过滤后听不到声音

信息处理 matlab 过滤器设计 巴特沃思
2022-02-12 08:31:01

我正在研究我的导师这个学期给我的一个项目。它有多个步骤。基本上,我有自己的音频。我使用方法将 AWGN 添加到此声音中awgn()SNR 为 30。我正在尝试使用过滤器来过滤声音中的噪音。

到目前为止我所做的是:

[sound,Fs] = audioread('C:\Users\Lenovo\Desktop\sound.m4a');

SNR = 30;

ndata = awgn(sound,SNR);

fft_sound = fft(ndata);

n = 7;
beginFreq = 1000/(Fs/2);
endFreq = 2400/(Fs/2);

[b,a] = butter(n, [beginFreq, endFreq], 'bandpass');
[H,W] = freqz(b,a,n);

fout = filter(b,a,real(fft_sound));
soundsc(fout,Fs);

我可以听到我的声音,也可以听到我的声音。我想过滤那些噪音。使用后,fft()我得到了声音的实部和虚部错误。所以我想使用real(). 但这一次我再也听不到我的声音了。我听到的只是背景中的噪音。

我该如何处理这种情况?

1个回答

几点

  1. 您需要过滤时域信号,而不是频域信号fout = filter(b,a,ndata)
  2. 你用agwn()错了,至少信噪比肯定不会是30分贝。我建议阅读文档
  3. 这是一个非常窄的带通滤波器,所以滤波后不会留下太多信号。音频听起来很不自然。
  4. 您的滤波器阶数相当高,在传递函数表示中使用滤波器可能会产生大量数值噪声甚至不稳定。改为使用级联的二阶部分。