自适应滤波及其Python实现

由于原博客在word里编辑,插入了很多Mathtype公式,而CSDN不支持Mathtype,转换格式出现了很多麻烦和排版混乱,故此博客部分采用截图展示。

原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

程序及结果

Python
程序:
(1)LMS算法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)求MSE
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述

分析

图1.1上图是滤波器输入信号,即滤波前含噪声的接收信号x(n)波形,从图中我们可以看出,输入信号中的噪声引起波形的随机性,对于有效信号s(n)的原波形造成了不同程度的波动,要想近乎完美的得到s(n)信号,必须进行滤波,而又因为噪声的随机性,仅靠一个固定参数的滤波器是不行的,需要能够利用前一时刻已获得的滤波器参数等结果,自动地调节现时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性,从而才能实现最优滤波。
图1.1下图中蓝色是期望输出信号s(n),红色是滤波实际输出信号s(n)估计。程序中我取了序列长度为256点,然后训练次数为128次,结果如图所示。对比两个波形,以及与上面的滤波前信号相比较,可以发现,滤波效果几乎和期望结果相一致。前一部分的滤波输出波形有一定偏差,分析是因为取信号向量时,由于程序设定信号序列长度为N,范围是从0-N-1,故信号向量中,x(n-i)项中索引小于0的部分便默认为0,故实际输出序列前一部分,由于n值较小,导致信号向量中的有效数据较少,其他都设置为0,但这并不影响整体的滤波效果。
图1.2中,画出了输出与期望均方误差随着迭代次数变化的曲线。程序中设定序列长度为64,然后分别探究迭代1-60次时的输出与期望的误差,每种迭代次数重复进行200次,对每一次的误差进行平方求和再求平均得到该迭代次数的均方误差,画出图像。由图像可知,随着迭代次数的增加,均方误差逐渐收敛于0,符合该算法的收敛性要求。

猜你喜欢

转载自blog.csdn.net/qq_44628230/article/details/107014315