LMS消除噪声和干扰结合代码的实验理解

 

此图是LMS用于消除噪声或干扰的实现。

注意:虽然r(n)不等于v(n),但它们是相关的,如果语音信号x(n)与加性噪声v(n)不想关,那么当y(n)=v(n)时,e(n)^2的均值将可能达到最小值,传送到接收机的信号就只是语音信号e(n)=x(n),这意味着进入主拾音器的环境噪声已经被完全消除。

LMS消除噪声和干扰结合代码的实验理解_第1张图片

具体代码验证如下(代码由习题代码改编,S(n)假设为语音输入):

 

close all clear clc 
%construct input and desired output
rng('shuffle','twister'); r=200; L=1; n=[0:r-1]';

%% 原始实验
% v = -0.5+rand(r,1); x = 2*cos(0.5*pi*n)+v; d = sin(0.5*pi*n);
%可以通过有限长序列搭建模型,来预测未来,例如飞行轨迹预测等
%%

%% 【改变】这个实验结果很好的反应了P29的消除噪声和干扰
  v = -1+2*rand(r,1); x = v; s=sin(0.5*pi*n);d = sin(0.5*pi*n)+v;  
%% 

%compute maximum step size
Px = 2+0.5^2/3; mu_max=1/((L+1)*Px);%最大自适应步长

%compute error and find optimal weight vector for different step sizes
mu = [.1 .01]; theta=zeros(L+1,1); e = zeros(size(x)); q = x(:);

for i=1:2
    w=zeros(L+1,1);
    for k = 1:r
        if k<(L+1)
            theta(1:k)=q(k:-1:1);
        else
            theta=q(k:-1:k-L);
        end
        e(k) = d(k)-w'*theta;
        w = w+2*mu(i)*e(k)*theta; %结论,存在这样一个滤波器,使得输出逼近真实输出
    end
    subplot(2,1,i);
    stem(n,e.^2,'fill','MarkerSize',1)
end
%% 原始实验
% real = filter(w,1,x);
% figure
% plot(real,'b')
% hold on 
% plot(d,'r')
%%
figure
plot(e)
hold on 
plot(s)
figure
n=1:1:1024;
plot(abs(fft(s,1024)),'b');
hold on
plot(abs(fft(e,1024)),'r');
        

实验结果如下:

 LMS消除噪声和干扰结合代码的实验理解_第2张图片

LMS消除噪声和干扰结合代码的实验理解_第3张图片

LMS消除噪声和干扰结合代码的实验理解_第4张图片

也可将e(n) 和d(n)进行观察比较。

你可能感兴趣的:(DSP,LMS)