基于LMS算法的自适应对消器的MATLAB实现 1.对消原理
文章图片
文章图片
信号,或者输出信号的均方值最小,就要求取得最小值,由(1-1)式推出等价的条件就是要求取得最小值,即要求输出信号与有用信号的误差的均方值为最小。
2.单个样本的仿真结果
文章图片
图2 对消噪声前后的效果图
MATLAB源代码如下:
%-------------------------------------------------
% 用LMS算法设计自适应滤波器
% 应用领域:自适应对消器
%-------------------------------------------------
clear all;
clc;
delta = 1/10000;
t = 0:delta:1-delta;
t = t';
% 转换成列向量
s = sin(2*pi*t);
sigma_n0 = 1;
n0 = sigma_n0*randn(size(t));
x = s + n0;
% 原始输入端的输入信号,为被噪声污染的正弦信号
d = x;
% 对于自适应对消器,用x作为期望信号
n1 = n0;
% 参考输入端的输入信号,为与n0相关的噪声% 设计自适应滤波器
N = 5;
% 滤波器阶数
w = ones(N,1);
% 初始化滤波器权值
u = 0.0026;
% 步长因子
y = zeros(length(t),1);
for k = N:length(t)
y(k) = n1(k-N+1:k)'*w;
e(k) = d(k) - y(k);
w = w + 2*u*e(k).*n1(k-N+1:k);
% 跟新权值
end% 图像化仿真效果
subplot(211),plot(t,x);
title('被噪声污染的正弦信号');
subplot(212),plot(t,s,'k',t,e,'g');
% 对消噪声后,误差信号即为对原始信号的估计
legend('原始正弦信号','自适应滤波后的信号');
axis([0 1 -1 1]);
title('滤波效果');
3.权值及误差样本均值的收敛性
由于LMS算法用单个样本误差来代替梯度法的误差均值,即用梯度的估计值代替梯度的精确值,这样算出的权值及误差将是随机变量,但权值的均值将收敛于梯度法算出的最优权值,均方误差也收敛于维纳解。
下面做出了100个样本的学习曲线可以观察其收敛情况。
文章图片
图3 LMS算法的学习曲线
文章图片
图4 LMS算法的学习曲线(局部放大图)
从图3和图4可以看出,相对于单个样本计算的误差也即滤波输出,100个样本计算的误差的均值与原始正弦信号更接近,这也验证了LMS算法计算的均方误差收敛于维纳解的理论。
文章图片
【matlab算法原理详解|【老生谈算法】matlab实现自适应对消器的LMS算法——LMS算法】图5 权值的学习曲线
从图5 可以看出随着样本数的增加,权值波动越来越小,这也验证了LMS算法计算的权值的均值收敛于最优权值的理论。
推荐阅读
- matlab算法原理详解|【老生谈算法】matlab实现车牌识别中值滤波算法——车牌识别中值滤波算法
- C语言|windows系统c语言编译器安装
- 工具类|初始化配置文件工具类
- 面试|0 基础 Java 自学之路(2021年最新版)
- 腾讯算法大赛|【复赛前排分享(二)】收好这份王牌优化指南,助你轻松上分无压力
- NoSQL|Redis中执行Lua脚本
- 面试|为什么我们从 Python 切换到 Go
- 零基础学好JAVASE|零基础带你学好JavaSE-抽象类和接口
- SQL|这道 Mysql 的解题思想,值得学习!