⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lms.m

📁 用MATLAB编写的递推最小二乘算法算法LMS算法,karlman算法
💻 M
字号:
%基于LMS算法的自适应线性预测

clc;clear all;
N=1000;
M=100;%计算的次数
w1=zeros(N,M);w2=zeros(N,M);e1=zeros(N,M);

for k=1:M
    %产生白噪声
    Pv=0.0965;%定义白噪声方差
    a1=-0.195;a2=0.95;u=0.01;
    m=50000;%产生50000个随机数
    v=randn(1,m);
    v=v*sqrt(Pv);%产生均值为0,方差为Pv的白噪声
    
    m=1:N;
    v=v(1:N);%取出前1000个
    %plot(m,v);title('均值为0,方差为0.0965的白噪声');ylabel('v(n)');xlabel('n');
    v=v';

    %向量初使化
    x=zeros(1,N)';
    x(1)=v(1);%x(0)=v(0)
    x(2)=v(1)-a1*v(1);%x(1)=v(1)-a1*v(0)
    w=zeros(2,N);%w(0)=[0 0]';
    X=zeros(2,N);
    X(:,2)=[v(1) 0]';%X(0)=[v(0),0]';X(1)=[v(0) 0]'
    e=zeros(1,N)';%定义误差向量

    %根据LMS算法进行递推

    for n=1:N-2
        x(n+2)=v(n+2)-a1*x(n+1)-a2*x(n);
        X(:,n+2)=[x(n+1) x(n)]';
        e(n)=x(n+1)-X(:,n+1)'*w(:,n);
        w(:,n+1)=w(:,n)+u*X(:,n+1)*e(n);       
        
        w1(:,k)=w(1,:)'; w2(:,k)=w(2,:)';%将每次计算得到的权矢量值储存 
        e1(:,k)=e(:,1);%将每次计算得到的误差储存
     end
     
 end

%求权矢量和误差的M次的平均值         
wa1=zeros(N,1);wa2=zeros(N,1);en=zeros(N,1); 
for k=1:M
    wa1(:,1)=wa1(:,1)+w1(:,k);
    wa2(:,1)=wa2(:,1)+w2(:,k);
    en(:,1)=en(:,1)+e1(:,k);
end

n=1:N;
subplot(221)
plot(n,w(1,n),n,w(2,n));%作出单次计算权矢量的变化曲线
xlabel('n');ylabel('w(n)');title('w1(n)和w2(n)的单次变化曲线(线性预测,LMS)');
subplot(222)
plot(n,wa1(n,1)./M,n,wa2(n,1)./M);%作出M次计算权矢量的平均变化曲线
xlabel('n');ylabel('w(n)');title('w1(n)和w2(n)100次平均变化曲线');
subplot(223)
plot(n,(e(n,1)).^2);%作出单次计算e^2的变化曲线
xlabel('n');ylabel('e^2');title('单次计算e^2的变化曲线');
subplot(224)
plot(n,(en(n,1)./M).^2);%作出M次计算e^2的平均变化曲线
xlabel('n');ylabel('e^2');title('100次计算e^2的平均变化曲线');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -