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

📄 lms.m

📁 一个经典的LMS程序
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 该程序实现时域LMS算法,并用统计的方法仿真得出不同步长下的学习曲线
% W为信道参数,u为迭代步长
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function LMS(W,u)
% 初始化参数
g=200;                     %   统计仿真次数为g
N=1000;                    %   输入信号抽样点数N,也为迭代次数
M=11;                      %   时域抽头LMS算法滤波器阶数
d=6;                       %   信号延迟
ee=zeros(g,N-M+1);         %   将每次独立循环的误差结果存于矩阵ee中,以便后面对其平均
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  产生信道序列
h=zeros(1,3);              %   信道序列初始化
for n=1:3
    h(n)=0.5*(1+cos(2*pi/W*(n-2))); %   信道序列
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  独立循环算法
for q=1:g                    
    out = randint(1,N);       %   产生随机0、1序列
    I = (out-0.5).*2;         %   得到原始信号I
    xx=conv(h,I);             %   原始信号通过信道后的信号
    x=awgn(xx,30,'measured'); %   给信号加上方差为0.001的白噪声
    xn=x(1:N);                %   被噪声污染的输入信号
    yd=zeros(1,N);            %   期望输出信号yd初始化
    yd((d+1):N)=I(1:(N-d));   %   yd为I延迟7个单位
    w=zeros(1,M);             %   设置抽头加权初值
    e=zeros(1,N);             %   误差信号初始化
    % 用LMS算法迭代滤波
    for i=M:N
        XN=xn((i-M+1):(i));  
        y(i)=w*XN';
        e(i)=yd(i)-y(i);
        w=w+u*e(i)*XN;    
    end
    ee(q,:)=(e(M:N)).^2;      %   存储误差平方序列
end
for b=1:(N-M+1)
    bi(b)=sum((ee(:,b)))/g;   %   求误差平方值的的统计平均
end
t=1:(N-M+1);
semilogy(t,bi);               %   平均学习曲线
title('MSE学习曲线');
xlabel('迭代次数');
ylabel('均方误差');
hold on
%  EOF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

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