【问题标题】:How to remove the noise from a wav file with a IIR Eliptical filter如何使用 IIR 椭圆滤波器从 wav 文件中去除噪声
【发布时间】:2013-05-29 19:55:14
【问题描述】:

我必须用 matlab 去除 wav 音乐文件中的噪音。

我知道我必须使用ellipordellip 函数。首先我阅读了wav文件:[x,Fs]=wavread('file.wav');

然后我做一个频谱图: spectrogram(x,512,400,512,Fs,'yaxis');

现在,我有些看不懂:

  • 我必须删除那条红线吗? (我想这就是噪音)
  • 椭圆函数的 Wp 值是多少? (我知道它称为通带拐角频率)。
  • Ws 值会在 14000 到 16000 赫兹之间吗?消除噪音的价值?看这个频谱图,我如何计算出 Wp、Ws、Rs 和 Rp 的值?

【问题讨论】:

  • 有一个 15 kHz 的音调 - 长的水平红线。如果你想删除它,你需要一个陷波滤波器。阻带将以 15 kHz 为中心,通带将位于上方和下方。使用截止频率,直到您获得可接受的音调去除而不会丢失太多信号。试试听吧! (wavplay)
  • 那么,我要 2 个 Wp 的吗?像 0 到 14.9khz 和另一个 15.1khz 到 20khz?
  • ELLIP(N,Rp,Rs,Wp,'stop') is a bandstop filter if Wp = [W1 W2]。请记住,频率是根据采样频率指定的,并且应该在 0 到 1 的范围内。

标签: matlab wav noise-reduction


【解决方案1】:

您的噪音看起来像是 15000 Hz 的高频嘶嘶声。我认为消除这种噪声的最佳方法是带阻滤波器,虽然很难说不听,但也许低通滤波器会更好地满足您的要求。我也会尝试其他过滤器类型

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);

【讨论】:

  • 为什么在椭圆上使用 7 而不是 n?那么,我怎样才能让我的x 再次做一个新的频谱图呢?
  • 我正在尝试并错过了 7。您也可以尝试查看过滤器顺序 (n) 如何影响特征。在你知道ba 之后,你可以使用filter(b, a, x) 函数来应用过滤器
  • 是的,我做到了,听起来不错,现在我没有那么多噪音了,我想现在我只需要使用数值来达到最好的“干净”声音,对吗?
  • 是的。您也可以尝试fdatool 了解有关过滤器类型的更多信息
  • 如果你使用wp = [14950 15050] / (Fs/2);ws = [14990 15010] / (Fs/2);听起来很完美,所以我会接受你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2011-07-07
相关资源
最近更新 更多