如何在MATLAB中使用LMS自适应滤波器从原始信号中消除噪声?
好的,我一直在做一些关于噪声抵消的研究,我相信Widrow和Hoff的最小均方(LMS)自适应滤波器是我实现的最有效的算法,也是我最容易理解的算法。问题是我在让我的代码执行任何噪声消除时遇到了一些严重的问题。我知道你需要两个信号:噪声和原始信号的噪声。获取噪声并通过滤波器运行,滤波器输出源信号处出现的噪声估计值。然后你再从带有噪声的信号和原始信号中减去,这样做会得到一个滤波后的信号。我尝试过使用内置的LMS功能,但没有成功。任何帮助都将不胜感激:) 我看过的资料来源: 音频文件: 我的结果:如何在MATLAB中使用LMS自适应滤波器从原始信号中消除噪声?,matlab,filtering,noise,noise-reduction,Matlab,Filtering,Noise,Noise Reduction,好的,我一直在做一些关于噪声抵消的研究,我相信Widrow和Hoff的最小均方(LMS)自适应滤波器是我实现的最有效的算法,也是我最容易理解的算法。问题是我在让我的代码执行任何噪声消除时遇到了一些严重的问题。我知道你需要两个信号:噪声和原始信号的噪声。获取噪声并通过滤波器运行,滤波器输出源信号处出现的噪声估计值。然后你再从带有噪声的信号和原始信号中减去,这样做会得到一个滤波后的信号。我尝试过使用内置的LMS功能,但没有成功。任何帮助都将不胜感激:) 我看过的资料来源: 音频文件: 我的结果:
%clear command window, and delete all figures and variables
clc; close all; clear;
%import voice and noise audiofiles
fileName = 'theVoice.wav';
[original, FS] = audioread(fileName);
fileName = 'theNoise.wav';
[noise, ~] = audioread(fileName);
soundFileLength = length(original);
%set LMS filter parameters and apply the filter to input signal
filterLength = 32;
stepSize = 0.05;
lms = dsp.LMSFilter(filterLength, 'Method', 'LMS', 'StepSize', stepSize);
[~, filtered] = lms(noise, original);
%play filtered signal and provide plots
sound(filtered, FS);
x = linspace(0, 6, soundFileLength);
y1 = original;
y2 = noise;
y3 = filtered;
subplot(3, 1, 1);
plot(x, y1)
title('Original Audio')
subplot(3, 1, 2);
plot(x, y2)
title('Noise')
subplot(3, 1, 3);
plot(x, y3)
title('Filtered Audio')