Как удалить шум из wav-файла с помощью эллиптического фильтра IIR

Мне нужно удалить шум из музыкального файла wav с помощью Matlab.

Я знаю, что мне нужно использовать функции ellipord и ellip. Сначала я прочитал файл wav:[x,Fs]=wavread('file.wav');

Потом делаю спектрограмму: spectrogram(x,512,400,512,Fs,'yaxis');

введите здесь описание изображения

Теперь я не могу понять некоторые вещи:

  • Я должен удалить эту красную линию? (Я полагаю, это шум)
  • Каково значение Wp в функции эллипорда? (Я знаю, что это называется угловой частотой полосы пропускания).
  • Значение Ws будет примерно между 14000 и 16000 Гц? Стоит убрать шум? Как я могу понять значения Wp, Ws, Rs и Rp, глядя на эту спектрограмму?

person Fabio Cardoso    schedule 29.05.2013    source источник
comment
Есть тон на 15 кГц - длинная горизонтальная красная линия. Если вы пытаетесь удалить его, вам нужен режекторный фильтр. Полоса заграждения будет сосредоточена на 15 кГц, а полоса пропускания будет располагаться выше и ниже. Играйте с частотами среза, пока не получите приемлемое удаление тона без потери слишком большого количества сигнала. Попробуйте послушать! (wavplay)   -  person engineerC    schedule 30.05.2013
comment
Итак, у меня будет 2 Wp? Что-то вроде 0 до 14,9 кГц и еще один 15,1 кГц до 20 кГц?   -  person Fabio Cardoso    schedule 30.05.2013
comment
ELLIP(N,Rp,Rs,Wp,'stop') is a bandstop filter if Wp = [W1 W2]. Помните, что частоты задаются с точки зрения частоты дискретизации и должны находиться в диапазоне от 0 до 1.   -  person engineerC    schedule 30.05.2013


Ответы (1)


Ваш шум выглядит как высокочастотное шипение на частоте 15000 Гц. Я думаю, что лучший способ убрать этот шум — это полосовой фильтр, хотя трудно сказать, не слушая, может быть, фильтр нижних частот лучше соответствует вашим требованиям. Я бы попробовал и другие типы фильтров

Fs = 44100;
%what frequencies do you want to pass
wp = [12000 18000] / (Fs/2);
%what frequencies you don't want to pass
ws = [14000 16000] / (Fs/2);
%ellipsoid filter characteristics must be smooth
%so you have to select how many decibels 
%you allow to lose at passband (i.e. 12000 and 18000 hz)
rp = 3;
%stopband (minus decibels at 14000 and 16000 hz)
rs = 60;
[n,Wp] = ellipord(wp,ws,rp,rs)
[b,a] = ellip(n,rp,rs,wp,'stop');
freqz(b,a,Fs,Fs);
person Dmitry Galchinsky    schedule 29.05.2013
comment
Почему вы используете 7 на эллипсе, а не n? Итак, как я могу снова заставить свой x сделать новую спектрограмму? - person Fabio Cardoso; 30.05.2013
comment
Я экспериментировал и пропустил 7. Вы тоже можете поэкспериментировать, чтобы увидеть, как порядок фильтра (n) влияет на характеристики. После того, как вы узнали b и a, вы можете использовать функцию filter(b, a, x) для применения фильтра. - person Dmitry Galchinsky; 30.05.2013
comment
да, я сделал это, звучит хорошо, и теперь у меня не так много шума, я думаю, что теперь мне нужно только поиграть со значениями, чтобы добиться наилучшего «чистого» звука, верно? - person Fabio Cardoso; 30.05.2013
comment
Да. Вы также можете попробовать fdatool, чтобы узнать больше о типах фильтров. - person Dmitry Galchinsky; 30.05.2013
comment
если вы используете wp = [14950 15050] / (Fs/2); и ws = [14990 15010] / (Fs/2);, это звучит идеально, поэтому я приму ваш ответ. - person Fabio Cardoso; 30.05.2013