【信号处理】改进型的LMS算法-NLMS算法
发布日期:2021-05-04 12:56:05
浏览次数:32
分类:技术文章
本文共 1184 字,大约阅读时间需要 3 分钟。
一、简介
最小均方(LMS, Least Mean Squares)是最基本的自适应滤波算法。
LMS算法是自适应滤波器中常用的一种算法与维纳算法不同的是其系统的系数随输入序列而改变。维纳算法中截取输入序列自相关函数的一段构造系统的最佳系数。而LMS算法则是对初始化的滤波器系数依据最小均方误差准则进行不断修正来实现的。因此理论上讲LMS算法的性能在同等条件下要优于维纳。但是LMS是在初始值下逐步调整的,因此在系统稳定前,会有一段调整时间,调整时间受步长因子的控制,一定范围内,步长因子越大,调整时间越小,步长因子的最大取值为R的迹。LMS采用平方误差最小的原则代替均方误差最小的原则,信号基本关系如下:二、源代码
clear allclose allhold off%系统信道权数sysorder = 5 ;%抽头数N=1000;%总采样次数inp = randn(N,1);%产生高斯随机系列n = randn(N,1);[b,a] = butter(2,0.25);Gz = tf(b,a,-1);%逆变换函数h= [0.0976;0.2873;0.3360;0.2210;0.0964;];%信道特性向量y = lsim(Gz,inp);%加入噪声n = n * std(y)/(10*std(n));%噪声信号d = y + n;%期望输出信号totallength=size(d,1);%步长N=60 ; %60节点作为训练序列%算法的开始w = zeros ( sysorder , 1 ) ;%初始化for n = sysorder : N u = inp(n:-1:n-sysorder+1) ;% u的矩阵y(n)= w' * u;%系统输出r(n)=u'*u;%自相关矩阵e(n) = d(n) - y(n) ;%误差fai=.0001;%修正参数,为防止u'*u过小导致步长值太大而设置的if n < 20mu=0.32;elsemu=0.15;endw = w + mu * u * e(n)/(r(n)+fai) ;%迭代方程end %检验结果for n = N+1 : totallengthu = inp(n:-1:n-sysorder+1) ;y(n) = w' * u ;e(n) = d(n) - y(n) ;%误差end hold onplot(d)plot(y,'r');title('系统输出') ;xlabel('样本')ylabel('实际输出')figuresemilogy((abs(e))) ;% e的绝对值坐标title('误差曲线') ;xlabel('样本')ylabel('误差矢量')figure%作图plot(h, 'k+')
三、运行结果
四、备注
完整代码或者代写添加QQ 1575304183
转载地址:https://blog.csdn.net/qq_34763204/article/details/116310919 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月20日 23时57分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
简单了解各种序列化技术-Avro序列化
2019-05-01
AIO 初体验
2019-05-01
各IO 模型对比与总结
2019-05-01
缓冲区Buffer-Buffer操作基本API
2019-05-01
SaaS-基础概念
2019-05-01
云计算的三种模式
2019-05-01
SpringBoot 多个拦截器配置
2019-05-01
Springboot Logging的配置以及使用详解
2019-05-01
JAVA过滤器(Filter)与拦截器(Interceptor)区别及关系
2019-05-01
彻底解决mysql中文乱码
2019-05-01
Chrome jsonView插件安装
2019-05-01
Math.random()的用法
2019-05-01
5G学习:协议规范与命名规则
2019-05-01
解决:“getImageInfo:fail download image fail. reason: downloadFile:fail createDownloadTask:fail exceed
2019-05-01
好慌,Redis这么多集群方案,要用哪种?
2019-05-01
3种缓存算法,一口气把面试官喂饱
2019-05-01
9-java.sql.SQLException: Incorrect string value: ‘\xE9\x82\xA3\xE5\xB0\xB1‘ for column ‘content‘
2019-05-01