如何在 MATLAB 中使用 FIR 滤波器过滤音频文件中的噪声?
How can I filter noise in an audio file using FIR filter in MATLAB?
我只有一个 .wav 文件,并使用以下代码向其中添加了高斯白噪声:
%Reading the audio file
[originalAudio,Fs] = audioread('/Users/.../sound.wav');
%Adding white Guassian noise to the audio file
SNR = 20;
noisyAudio=awgn(originalAudio,SNR,'measured');
%sound(noisyAudio,Fs);
我想使用 FIR 滤波器去除噪声我尝试了以下用于卷积滤波器的代码。
outputAudio = conv2(noisyAudio,noisyAudio,'same');
在 Matlab 中是否有这样的内置函数来进行 FIR 滤波?
这可能不是您正在寻找的答案,但如果您想使用内置函数在 matlab 中进行 FIR 滤波,您可以使用 fir1
(或任何其他滤波器设计函数)来生成滤波器系数,然后 filter
进行卷积。根据定义,使用 LTI 系统的数字滤波是一种卷积运算。
>> b = fir1(40, .5); % generate 40th order lowpass FIR filter at half the nyquist
>> filteredAudio = filter(b, 1, noisyAudio); % since this is FIR, the only feedback coefficient is 1 at y_n
但是,这不会消除白噪声。它只会衰减低于奈奎斯特频率一半的频率(包括原始音频信号中的频率)。过滤与去噪不同。但是,将噪声信号与其自身进行卷积也不会对其进行降噪。
我只有一个 .wav 文件,并使用以下代码向其中添加了高斯白噪声:
%Reading the audio file
[originalAudio,Fs] = audioread('/Users/.../sound.wav');
%Adding white Guassian noise to the audio file
SNR = 20;
noisyAudio=awgn(originalAudio,SNR,'measured');
%sound(noisyAudio,Fs);
我想使用 FIR 滤波器去除噪声我尝试了以下用于卷积滤波器的代码。
outputAudio = conv2(noisyAudio,noisyAudio,'same');
在 Matlab 中是否有这样的内置函数来进行 FIR 滤波?
这可能不是您正在寻找的答案,但如果您想使用内置函数在 matlab 中进行 FIR 滤波,您可以使用 fir1
(或任何其他滤波器设计函数)来生成滤波器系数,然后 filter
进行卷积。根据定义,使用 LTI 系统的数字滤波是一种卷积运算。
>> b = fir1(40, .5); % generate 40th order lowpass FIR filter at half the nyquist
>> filteredAudio = filter(b, 1, noisyAudio); % since this is FIR, the only feedback coefficient is 1 at y_n
但是,这不会消除白噪声。它只会衰减低于奈奎斯特频率一半的频率(包括原始音频信号中的频率)。过滤与去噪不同。但是,将噪声信号与其自身进行卷积也不会对其进行降噪。