Удалить шум из mp3 файла, MATLAB - PullRequest
0 голосов
/ 01 января 2019

У меня есть mp3-файл по ссылке ниже, где слышен человеческий голос и какой-то жужжащий фон.Я хочу убрать гудящий шум.Есть ли кто-нибудь, кто может сказать мне, как это сделать в MATLAB?https://www.dropbox.com/s/h95y1oelbzvcgkc/allthatbass.mp3?dl=0

%% Read in the file
clearvars;
close all;
[f,fs] = audioread('allthatbass.mp3');
%% Play original file
pOrig = audioplayer(f,fs);
N = size(f,1);
%% Plot the spectrum
df = fs / N;
w = (-(N/2):(N/2)-1)*df;
y = fft(f(:,1), N) / N; % For normalizing, but not needed for our analysis
y2 = fftshift(y);
figure;
plot(w,abs(y2));
%% Design a bandpass filter that filters out between 700 to 12000 Hz
n = 7;
beginFreq = 700 / (fs/2);
endFreq = 12000 / (fs/2);
[b,a] = butter(n, [beginFreq, endFreq], 'bandpass');
%% Filter the signal
fOut = filter(b, a, f);
%% Construct audioplayer object and play
p = audioplayer(fOut, fs);
p.play;

Я ожидаю, что гудение устранено, но выходной звук похож на оригинальный звук.

введите описание ссылки здесь

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Попробуйте использовать фильтр низких частот в MATLAB.Их относительно легко реализовать.Вы можете найти документацию вместе с примерами здесь .

0 голосов
/ 03 января 2019

Я скачал исходный файл, который вы связали в своем вопросе, и добавил следующую строку в конце:

audiowrite('filtered.wav', fOut, fs);

Получившийся файл 'Filter.wav' звучит очень иначе, чем мои уши (я использовалгарнитуру для прослушивания).Если вы откроете файл Filter.wav, например, в Audacity , и посмотрите на спектр, то он действительно будет отличаться от оригинала (как и ожидалось, частоты ниже 700 Гц и выше 12 кГц будут удалены).

Давайте попробуем проверить это в matlab.Следующий скрипт читает оба файла и выводит значение дБ обоих ffts.Нижний график представляет отфильтрованный сигнал, и четко видно, что низкие частоты удалены.Срез выше 12 кГц также виден, но кажется, что эти частоты уже были ослаблены в исходном сигнале, и полосовой фильтр усиливает это.

%% Read in both files
clearvars;
close all;
[f,fs] = audioread('allthatbass.mp3');
[fflt, fsflt] = audioread('filtered.wav');
N = size(f,1);
%% Compute the ffts
df = fs / N;
n = N / 2; % plot only the second half of the spectrum
w = (0:(n)-1)*df;
y = fft(f(:,1), N) / N;
y2 = fftshift(y);
yflt = fft(fflt(:,1), N) / N;
y2flt = fftshift(yflt);
%% Plot the spectrum of both files (use the dB value, i.e. 10 * log(abs(x)) )
figure;
ax1 = subplot(2,1,1);
plot(w,10*log(abs(y2(n:end-1,1))));
ax2 = subplot(2,1,2);
plot(w, 10*log(abs(y2flt(n:end-1,1))));
linkaxes([ax1, ax2], 'y'); % link the axes (this makes it easier to visually compare the plots)
...