MATLAB做LMS算法(最小均方误差算法) 您所在的位置:网站首页 LMS迭代公式 MATLAB做LMS算法(最小均方误差算法)

MATLAB做LMS算法(最小均方误差算法)

2024-01-21 15:54| 来源: 网络整理| 查看: 265

目录背景知识代码参考

背景知识

自适应滤波的4种不同应用是:预测、辨识、反建模和干扰抵消

LMS算法(最小均方误差算法)是自适应滤波算法的一种,主要干的事情是:基于最小均方误差准则,使滤波器的输出信号与期望输出信号之间的均方误差最小。 LMS算法简单有效,计算量小,鲁棒性好,易于实现。

代码

LMS.m 代码来自这本书[1],本人改了2个句子[2] 这份代码是真的强,\(0.05\pi\)角频率的单频信号叠上3dB且0均值的加性高斯白噪声,很快被“纠正回”期望的\(0.05\pi\)角频率的单频信号。

%用MATLAB实现LMS算法,将输入和输出信号进行对比,并给出均方误差曲线。 %假设滤波器抽头个数为k,数据长度为N g=100; %统计仿真次数为g N=1024; %输入信号抽样点数为N k=128; %时域抽头LMS算法滤波器阶数 pp=zeros(g,N-k);%将每次独立循环的误差结果存于矩阵pp中,以便后面取平均 u=0.0002;%步长因子u for q=1:1:g t=1:1:N; a=1; s=a*sin(0.05*pi*t); %输入单频信号s figure(1); subplot(311); plot(t,real(s) ); %信号s时域波形 title('信号s时域波形'); xlabel('n');ylabel('s'); axis([0,N,-a-1,a+1]); xn=awgn(s,5);%加入均值为0的高斯白噪声,信噪比为3dB %设置初值 y=zeros(1,N);%输出信号y y(1:k)=xn(1:k);%将输入信号xn的前k个值赋值给y的前k个值 w=zeros(1,k); %设置抽头加权初值 e=zeros(1,N); %误差信号 %用LMS算法迭代滤波 for i=(k+1):1:N XN=xn((i-k+1):(i)); y(i)=w*XN'; e(i)=s(i)-y(i); w=w+u*e(i)*XN; end pp(q, : )=( e(k+1:N ) ).^2; end subplot(312); plot(t,real(xn)); %信号s时域波形 title('信号s加噪声后的时域波形'); subplot(313); plot(t,real(y));%信号s时域波形 title('自适应滤波后的输出时域波形'); bi=mean(pp,1); %对第一维度求平均 %人生苦短,对某一维度求平均这么写不是更好写吗 figure(2); t=1:1:N-k; plot(t,bi,'r'); title('均方误差-时间曲线') %太蠢了这里为什么会写hold on

参考

《无线通信的MATLAB和FPGA实现》 3.5.3 LMS算法的MATLAB实现 ↩︎

炫耀我刚学的Markdown 脚注语法 ↩︎



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有