Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中使用LMS自适应滤波器从原始信号中消除噪声?_Matlab_Filtering_Noise_Noise Reduction - Fatal编程技术网

如何在MATLAB中使用LMS自适应滤波器从原始信号中消除噪声?

如何在MATLAB中使用LMS自适应滤波器从原始信号中消除噪声?,matlab,filtering,noise,noise-reduction,Matlab,Filtering,Noise,Noise Reduction,好的,我一直在做一些关于噪声抵消的研究,我相信Widrow和Hoff的最小均方(LMS)自适应滤波器是我实现的最有效的算法,也是我最容易理解的算法。问题是我在让我的代码执行任何噪声消除时遇到了一些严重的问题。我知道你需要两个信号:噪声和原始信号的噪声。获取噪声并通过滤波器运行,滤波器输出源信号处出现的噪声估计值。然后你再从带有噪声的信号和原始信号中减去,这样做会得到一个滤波后的信号。我尝试过使用内置的LMS功能,但没有成功。任何帮助都将不胜感激:) 我看过的资料来源: 音频文件: 我的结果:

好的,我一直在做一些关于噪声抵消的研究,我相信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')