自适应噪声抵消LMS算法Matlab仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自适应噪声抵消LMS 算法Matlab 仿真
传统的宽带信号中抑制正弦干扰的方法是采用陷波器(notch filter),为此我们需要精确知道干扰正弦的频率.然而当干扰正弦频率是缓慢变化时,且选频率特性要求十分尖锐时,则最好采用自适应噪声抵消的方法.下图是用一个二阶FIR 的LMS 自适应滤波器消除正弦干扰的一个方案。
1) 借助MATLAB 画出误差性能曲面和误差性能曲面的等值曲线; 2) 写出最陡下降法, LMS 算法的计算公式(δ=0.4);
3) 用MATLAB 产生方差为0.05,均值为0白噪音S(n),并画出其中一次实现的波形据2)中的公式,并利用3)中产生的S(n),在1)中的误差性能曲面的等值曲n 的值曲线上叠加画出LMS 法时100情况确定,一般选取足够大以使算法达到基)
(n y 宽带信号+正弦干扰
0()()()
y n S n N n =+图;
4) 根线上叠加画出采用最陡下降法, LMS 法时H(n)的在叠代过程中的轨迹曲线。
5)用MATLAB 计算并画出LMS 法时 随时间变化曲线(对 应S(n)的某一次的一次实现)和e(n)波形;某一次实现的结果并不能从统计的角度反映实验的结果的正确性,为得到具有统计特性的实验结果,可用足够多次的实验结果的平均值作为实验的结果。用MATLAB 计算并画出LMS 法时J(n)的100次实验结果的平均值随时间n 的变化曲线。 6)用MATLAB 计算并在1)中的误差性能曲面的等次实验中的H(n)的平均值的轨迹曲线;
(在实验中n=1,,…..N,N 的取值根据实验本收敛)
01(),(0)0.05
2()sin(
16102()sin()
16ss S n r N n n N n n πππ
==+是均匀分布的白噪音不相关
和)(),()(10n N n N n S
)
(n x x 1()()
)
(n e n N n =
1、用Matlab画误差性能曲面和误差性能曲面的等值曲线的程序如下:
[h0,h1] = meshgrid(-2:0.1:4 , -4:0.1:2);
J=
0.55+h0.*h0+h1.*h1+2*cos(pi/8)*h1.*h0-sqrt(2)*h0*cos(pi/10)-sqrt(2)*h1*cos(9*pi/4
0);
echo on;
v=0:0.1:2;
%axis([-4 4 -4 4 0 100]);
figure(1);
%误差曲面
surf(h0,h1,J);
xlabel('h0');
ylabel('h1');
title('误差性能曲面');
figure(2);
contour(h0,h1,J,v); %等值曲线
xlabel('h0');
ylabel('h1');
title('误差性能曲面等值曲线');
运行结果如下图示:
2、①最陡下降法计算公式:
)
(n 21
)()1(H G V n H n δ−=+ 其中δ取0.4,H(0)=[3 -4],
T ⎟⎠⎞⎜⎝⎛+=
⎟⎠⎞⎜⎝⎛
−⎥⎦⎤⎢⎣⎡⎟⎠⎞⎜⎝⎛+==⎟
⎠
⎞⎜⎝⎛−⎟⎠⎞⎜⎝⎛=⎥⎦⎤⎢⎣⎡−⎥⎦⎤
⎢⎣⎡⎥⎦⎤⎢⎣⎡=−=∑∑==1016k 2cos 2116)(2sin 210162sin 2161)(r 16k
2cos 16)(2sin 2162sin 2161)(r )1()0(2)()()0()1()1()0(22)(2)(V 15015010G ππππππππi yx i xx yx yx xx xx xx xx yx
xx k i i k k i i k r r n h n h r r r r r n H R n 而
故
⎥
⎦
⎤
⎢⎣⎡−−=⎥⎦
⎤
⎢⎣⎡−⎥⎦⎤⎢⎣⎡⎥⎦⎤⎢⎣⎡=5320.37362.2)0(5377.06725.02)()(19239.09239.012)(10G G V n h n h n V
②LMS 算法计算公式:
,...
2,1,0),1()1()()1()
1()()1()1(e =+++=++−+=+n n X n e n H n H n X n H n y n T δ
其中δ取0.4。
3、 用MATLAB 产生方差为0.05,均值为0白噪音s(n) 程序如下: n=1:1024;
s(n)=sqrt(0.05)*randn(1,length(n)); plot(s);
axis([0 1024 -1 1]); title('白噪声s(n)');
其一次实现图形如下:
4、 最陡下降法和LMS 算法程序: clear all;
N=1000;%信号点数 k=2;%滤波器阶数
q=0.4;%步长
s=sqrt(0.05)*randn(1,N);%原始信号
n=1:N;
y=s(n)+sin(2*pi*n/16+pi/10);%叠加噪声后的期望输出信号
x=sqrt(2)*sin(2*pi*n/16);%相关噪声输入
figure(1);
subplot(3,1,1);
plot(n,s);
title('原始宽带信号S(n)');
subplot(3,1,2);
plot(n,y);
title('叠加噪声后输出信号y(n)');
subplot(3,1,3);
plot(n,x);
title('相关噪声输入信号x(n)');
%设置初值并进行两种算法的迭代
hn=zeros(2,N);%存放最陡下降法下H(n)迭代数据
hn(:,1)=[3 -4]';
vg=[-2.7362 -3.5320]';
Rxx=[[1 0.9239]',[0.9239 1]'];
Ryx=[0.6725 0.5377]';
echo off;
for i=1:N-1%最陡下降法,第n=i-1次迭代
vg=2*Rxx*hn(:,i)-2*Ryx;
hn(:,i+1)=hn(:,i)-1/2*q*vg;
end;
hm=zeros(2,N);%存放LMS算法下H(n)迭代数据
h=[3 -4]';
hm(:,1)=h;
for i=2:N
%XN=x(i+1:i)';
u=x(i:-1:i-1);
en=y(i)-u*h;
h=h+q*en*u';
hm(:,i)=h;
end;
%绘制图像
[h0,h1] = meshgrid(-2:.1:4 , -4:.1:2);
J = 0.55+h0.*h0+h1.*h1+2*cos(pi/8)*h1.*h0-sqrt(2)*h0*cos(pi/10)-sqrt(2)*h1*cos(9*pi/4 0);
v=0:0.1:2;%等值曲线取值