使用LMS滤去正弦干扰

LMS的公式

1. 最陡梯度下降法计算公式
(1) H ( n + 1 ) = H ( n ) − 1 2 δ V G ( n ) H(n+1)=H(n)-\frac{1}{2}\delta V_G(n) \tag{1} H(n+1)=H(n)21δVG(n)(1)

其中 δ \delta δ 取0.4,H(0)= [ 3 − 4 ] T [3\quad-4]^T [34]T
(2) V G ( n ) = 2 R x x H ( n ) − 2 r y x = 2 [ r x x ( 0 ) r x x ( 1 ) r x x ( 1 ) r x x ( 0 ) ] − 2 [ 22 r y x ( 0 ) r y x ( 1 ) ] V_G(n)=2R_{xx}H(n)-2r_{yx}= 2 \left[ \begin{matrix} r_{xx}(0) & r_{xx}(1) \\ r_{xx}(1) & r_{xx}(0) \end{matrix} \right]-2 \left[22 \begin{matrix} r_{yx}(0)\\ r_{yx}(1) \end{matrix} \right] \tag{2} VG(n)=2RxxH(n)2ryx=2[rxx(0)rxx(1)rxx(1)rxx(0)]2[22ryx(0)ryx(1)](2)
(3) r x x ( k ) = 1 16 ∑ i = 0 15 ( 2 s i n 2 π i 16 ) ( 2 s i n 2 π ( i − k ) 16 ) = c o s 2 π k 16 r_{xx}(k)=\frac{1}{16}\sum_{i=0}{15}\Big(\sqrt{2}sin\frac{2\pi i}{16}\Big)\Big(\sqrt{2}sin\frac{2\pi (i-k)}{16}\Big)=cos\frac{2\pi k}{16} \tag{3} rxx(k)=161i=015(2 sin162πi)(2 sin162π(ik))=cos162πk(3)
(4) r y x ( k ) = 1 16 ∑ i = 0 15 [ 2 s i n ( 2 π i 16 + π 10 ) ] ( 2 s i n 2 π ( i − k ) 16 ) = 1 2 c o s ( 2 π k 16 + π 10 ) r_{yx}(k)=\frac{1}{16}\sum_{i=0}{15}\Big[\sqrt{2}sin\Big(\frac{2\pi i}{16}+\frac{\pi}{10}\Big)\Big]\Big(\sqrt{2}sin\frac{2\pi (i-k)}{16}\Big)=\frac{1}{\sqrt{2}}cos\Big(\frac{2\pi k}{16}+\frac{\pi}{10}\Big) \tag{4} ryx(k)=161i=015[2 sin(162πi+10π)](2 sin162π(ik))=2 1cos(162πk+10π)(4)


V G ( n ) = 2 [ 1 0.9239 0.9239 1 ] [ h 0 ( n ) h 1 ( n ) ] − 2 [ 0.6725 0.5377 ] V_G(n)=2\left[ \begin{matrix} 1 & 0.9239 \\ 0.9239 &1 \end{matrix} \right] \left[ \begin{matrix} h_0(n) \\ h_1(n) \end{matrix} \right] -2\left[ \begin{matrix} 0.6725\\ 0.5377 \end{matrix} \right] VG(n)=2[10.92390.92391][h0(n)h1(n)]2[0.67250.5377]
V G ( 0 ) = [ − 2.7362 − 3.5320 ] V_G(0)=\left[ \begin{matrix} -2.7362\\ -3.5320 \end{matrix} \right] VG(0)=[2.73623.5320]
2. LMS法计算公式
e ( n + 1 ) = y ( n + 1 ) − H T ( n ) X ( n + 1 ) e(n+1)=y(n+1)-H^T(n)X(n+1) e(n+1)=y(n+1)HT(n)X(n+1)
H ( n + 1 ) = H ( n ) + δ e ( e + 1 ) X ( n + 1 ) , n = 0 , 1 , 2 … H(n+1)=H(n)+\delta e(e+1)X(n+1),n=0,1,2 \dots H(n+1)=H(n)+δe(e+1)X(n+1),n=0,1,2
其中 δ \delta δ取0.4

误差性能曲面和等值曲线

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/40);%???
v=0:0.1:2;
figure;
surf(h0,h1,J);
xlabel('h0');
ylabel('h1');
title('误差性能曲面');
figure;
contour(h0,h1,J,v);
xlabel('h0');
ylabel('h1');
title('误差性能曲面等值曲线');

surf

face

matlab的白噪声

使用函数mvnrnd(0,0.05,k)‘生成一列长度为K,均值为0,方差为0.05的白噪声
图像如下:
0.05白噪声

LMS算法程序

matlab代码如下

%LMS算法演示(matlab) 假如我年少有为
%设置参数,N为采样个数,u为步长
close all
clear,clc;
N=16;u=0.4;
%设置迭代次数k
k=1000;
t=1:k;
rk = mvnrnd(0,0.05,k)'; %方差为0.05的白噪声
%figure,plot(1:k,rk);%绘制白噪声
y=rk(t)+sin(2*pi*t/N+pi/10);
x=sqrt(2)*sin(2*pi*t/N);
figure;subplot(3,1,1);
plot(t,rk);
title('白噪声');
subplot(3,1,2);
plot(t,x);
title('相关噪声');
subplot(3,1,3);
plot(t,y);
title('叠加后噪声');
%设置起始权值
wk(1,:)=[3 -4];
%用LMS算法迭代求最佳权值
for i=2:k
    xk(i,:)=[x(i) x(i-1)];%输入信号
    yk(i-1)=xk(i-1,:)*wk(i-1,:)';%输出信号
    dk(i-1)=y(i-1);%期望信号
    err(i-1)=dk(i-1)-yk(i-1);%误差
    wk(i,:)=wk(i-1,:)+u*err(i-1)*xk(i-1,:);%权值迭代
end
Rxx=[[1 0.9239]',[0.9239 1]'];
Ryx=[0.6725 0.5377]';
wk2(:,1)=[3 -4]';
vg=[-2.736 -3.5320]';
for i=1:k-1
    vg=2*Rxx*wk2(:,i)-2*Ryx;
    wk2(:,i+1)=wk2(:,i)-1/2*u*vg;
end;
[x,y]=meshgrid([-2:0.1:4],[-4:0.1:2]);
%求性能表面
%生成曲面值
[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/40);%???
v=0:0.1:2;
figure;
surf(h0,h1,J);
xlabel('h0');
ylabel('h1');
title('误差性能曲面');
figure;
contour(h0,h1,J,v);
xlabel('h0');
ylabel('h1');
title('误差性能曲面等值曲线');

%画迭代时权值的变化
hold on;plot(wk(:,1),wk(:,2),'r');
hold on;plot(wk2(1,:),wk2(2,:),'g');

%绘制误差与迭代次数的图
figure,plot(err);

多次LMS的统计平均

matlab代码如下

clear all;
close all;

g=100;
N=1000;
q=0.4;
k=2;

jn=zeros(1,N-k+1);
en0=zeros(1,N-k+1);
ejn = zeros(1,N-k+1,g);

for j=1:g
    
    rk = mvnrnd(0,0.05,N)';
    n=1:N;
    y=rk(n)+sin(2*pi*n/16+pi/10);
    x=sqrt(2)*sin(2*pi*n/16);
    
    h=[3 -4]';
    for i=k:N
        u=x(i:-1:i-1);
        en=y(i)-u*h;
        h=h+q*en*u';
        
        en0(i-k+1)=en;%保留最后一次的en
        jn(i-k+1)=en^2;%保留最后一次的jn
        ejn(:,i-k+1,j)=en^2;%保留所有的J(n)
    end
end

%计算统计平均值
for i=1:N-k+1
    jn(i)=sum(ejn(1,i,:))/g;
end

figure;
subplot(2,1,1);
plot(jn);
title('一次的J(n)');
subplot(2,1,2);
plot(en0);
title('一次的e(n)');

figure(2);
plot(jn);
title('100下的平均J(n)');

在这里插入图片描述

在这里插入图片描述

多次LMS下的平均误差性能曲线

matlab代码如下

clear all;
close all;
N=1000;q=0.4;
k=2;
t=1:N;
g=100;

wk =zeros(2,N,g);
for j=1:g
    rk = mvnrnd(0,0.05,N)'; %方差为0.05的白噪声
    y=rk(t)+sin(2*pi*t/16+pi/10);
    x=sqrt(2)*sin(2*pi*t/16);
    %设置起始权值
    h=[3 -4]';
    wk(:,1)=[3 -4]';
    hm=zeros(2,N);
    hm(:,1)=[-3,4]';
    %用LMS算法迭代求最佳权值
    for i=k:N
        u=x(i:-1:i-1);
        en=y(i)-u*h;
        h=h+q*en*u';
        hm(:,i)=h;
        wk(:,i,j)=h;
    end
    Rxx=[[1 0.9239]',[0.9239 1]'];
    Ryx=[0.6725 0.5377]';
    wk2(:,1)=[3 -4]';
    vg=[-2.736 -3.5320]';
    for i=1:N-1
        vg=2*Rxx*wk2(:,i)-2*Ryx;
        wk2(:,i+1)=wk2(:,i)-1/2*q*vg;
    end
end

for i=1:N-k+1
    wk_e(1,i+1)=sum(wk(1,i+1,:))/g;
    wk_e(2,i+1)=sum(wk(2,i+1,:))/g;
end
wk_e(:,1)=[3,-4]';

[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/40);%???
v=0:0.1:2;
figure;
surf(h0,h1,J);
xlabel('h0');
ylabel('h1');
title('误差性能曲面');
figure;
contour(h0,h1,J,v);
xlabel('h0');
ylabel('h1');
title('误差性能曲面等值曲线');
hold on
plot(wk_e(1,:),wk_e(2,:),'r');
plot(wk2(1,:),wk2(2,:),'g');
title('100次LMS法平均轨迹');legend('等值曲线','最陡法','平均LMS法');

在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值