2

我想从录制的声音中去除噪音并让它找到该声音的基本频率,但我不知道如何去除这些噪音。我正在录制从不同高度坠落物体的声音。我想找到录制声音的高度和最大频率之间的关系。

  [y,fs]=wavread('100cmfreefall.wav');

 ch1=y(:,1);
 time=(1/44100)*length(ch1);
t=linspace(0,time,length(ch1));


L=length(ch1);
 NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
Y1=log10(Y);
figure(1)

f = fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(Y1(1:NFFT/2+1))) ;

[b,a]=butter(10,3000/(44100/2),'high');
Y1=filtfilt(b,a,Y1);

% freqz(b,a)
figure(2)

plot(f,2*abs(Y1(1:NFFT/2+1))) ;

title('Single-Sided Amplitude Spectrum of y(t)');
xlabel('Frequency (Hz)');
ylabel('|Y(f)|')
xlim([0 50000])


% soundsc(ch1(1:100000),44100)
4

2 回答 2

19

说你的信号中有噪音是非常模糊的,根本没有传达太多信息。一些问题是:

  • 噪音是高频还是低频?
  • 它是否与您的信号频带很好地分开或混合在一起?
  • 噪声是否遵循统计模型?它可以被描述为一个平稳的过程吗?
  • 噪声是另一个确定性干扰信号吗?

您采取的方法肯定取决于上述问题的答案。

但是,根据您描述的实验设置,我的猜测是您的噪音只是背景噪音,在大多数情况下,可以近似为白色。白噪声是指在所有频率上具有恒定功率的统计噪声模型。

最简单的方法是使用低通滤波器或带通滤波器来仅保留您感兴趣的那些频率(如果您还不知道,快速查看频谱应该会发现这一点)。在我之前的回答中,关于使用 MATLAB 进行过滤的相关问题,我提供了创建低通滤波器和常见陷阱的示例。您可能可以通读它,看看它是否对您有帮助。

一个简单的例子:

考虑一个频率为 50 Hz 的正弦曲线,以 1000 Hz 采样。为此,我添加了高斯白噪声,使得 SNR 约为 -6dB。原始信号和噪声信号可以在下图的第一行看到(仅显示了 50 个样本)。如您所见,嘈杂的信号几乎看起来没有希望,因为所有结构似乎都已被破坏。但是,采用 FFT 可以显示隐藏的正弦曲线(如底行所示)

在此处输入图像描述

使用 48 至 52 Hz 的窄带滤波器过滤噪声信号,为我们提供“干净”的信号。由于噪声,幅度当然会有所损失。然而,信号已经从最初看起来像是一个失败的原因中检索出来。

在此处输入图像描述

您如何进行取决于您的具体应用。但我希望这可以帮助您了解一些噪声过滤的基础知识。

编辑

@Shabnam:已经有近 50 条评论了,我真的没有看到你做出任何努力去理解,或者至少,你自己尝试一下。您真的应该学习阅读文档并学习概念并尝试它,而不是为每一个错误都跑回去。无论如何,请尝试以下(从您的代码修改)并在评论中显示输出。

[y,fs]=wavread('100cmfreefall.wav');
ch1=y(:,1);
time=(1/fs)*length(ch1);
t=linspace(0,time,length(ch1));
L=length(ch1);
NFFT = 2^nextpow2(L);
f = fs/2*linspace(0,1,NFFT/2+1);

[b,a]=butter(10,3e3/(fs/2),'high'); 
y1=filtfilt(b,a,ch1);

figure(1)
subplot(2,1,1)
Y=fft(ch1,NFFT)/L;
plot(f,log10(abs(Y(1:NFFT/2+1))))
title('unfiltered')

subplot(2,1,2)
Y1=fft(y1,NFFT)/L;
plot(f,log10(abs(Y1(1:NFFT/2+1))))
title('filtered')
于 2011-05-04T15:04:58.620 回答
0

对您的问题的回答在很大程度上取决于您所谓的“噪声”的特征——它的光谱分布、噪声是否静止、噪声的来源(它起源于环境还是记录链?)。

如果噪声是平稳的,即其统计特征不随时间变化,您可以尝试仅记录几秒钟(10-15 是一个很好的初始猜测)的噪声,执行 FFT,然后在 FFT 中减去噪声的值n来自您的测量 FFT bin 的bin n

你可以在这里阅读一些背景:http ://en.wikipedia.org/wiki/Noise_reduction

于 2011-05-04T07:23:53.647 回答