FPGA数字信号处理之:最小二乘法LMS自适应滤波器实现(两种实现方式)

一、定义

        1959年由Widrow和Hoff提出了最小均方(Least Mean Square,LMS)算法,LMS基于维纳滤波理论,采用瞬时值估计梯度矢量的算法,通过最小化误差信号的能量来更新自适应滤波器权值系数。最小二乘(Least Square)准则:以误差的平方和最小作为最佳准则的误差准则。

        式中, ξ(n)是误差信号的平方和;ej是j时刻的误差信号,

        dj是j时刻的期望信号,Xj是j时刻的输入信号构成的向量, W表示滤波器的权系数构成的向量。通过选择W,使ξ(n)取得最小值的滤波称为最小二乘(Least Square,简称LS)滤波,而满足E[e2j]取得最小值的滤波称为最小均方误差(Least Mean Square, 简称LMS)滤波。

二、原理 

        1.设计一个N 阶滤波器,它的参数为w(n),则滤波器输出为
        $$y(n)=\sum_{i=0}^{N-1} w_{i}(n) x(n-i)=w^{T}(n)x(n)=x^{T}(n) w(n)$$
       2. 期望输出为d(n),则误差信号可以定义为:
        $$e(n)=d(n)-y(n)=d(n)-w^{T}(n) x(n)$$
        3.我们的目标就是将误差e(n)最小化,采用最小均方误差(MMSE )准则,最小化目标函数:J(w)
        $$J(w)=E\left\{|e(n)|^{2}\right\}=E\left\{\left|d(n)-w^{T}(n) x(n)\right|^{2}\right\}$$
        4.计算目标函数J(w)对w的导数,令导数为0:
        $$\nabla (J(w)) = \frac{{\partial [\mathop e\nolimits^2 (n)]}}{{\partial w(n)}} =  - 2e(n)X(n)$$
        5.则滤波器系数的更新公式可以写为:
        $$w(n+1)=w(n)-\frac{1}{2}\mu [-\nabla (J(w))]=w(n)+\mu e(n)X(n)$$
        上式中的u为步长因子。u值越大,算法收敛越快,但稳态误差也越大;u值越小,算法收敛越慢,但稳态误差也越小。为保证算法稳态收敛,应使u在以下范围取值:

        $$0 < \mu  < \frac{2}{{\sum\limits_{i = 1}^N {x(i)_{}^2} }}$$ 

三、FPGA实现

(一)matlab + RTL

        使用matlab生成LMS滤波器所需系数,然后使用system generator调用fir滤波器IP搭建算法模型如下:

 

 (二)纯RTL

        完全使用system generator搭建滤波器算法模型如下:

四、实现效果

        分别比较了自适应滤波器输入、预期输出、自适应滤波器matlab输出、自适应滤波器FPGA输出,经分析,使用fpga实现最小二乘法滤波还是挺不错的。 看起来图a效果要比图b效果好,那是因为图a抽头数20,图b抽头数8,后面有时间我将抽头数改为相同再比较试试。

图a:matlab + RTL

图b:纯RTL

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值