基于FPGA和符号LMS算法的自适应滤波器设计

作者:邱陈辉;李锋;徐祖强 刊名:电子器件 上传者:黄萱

【摘要】为了减少实现基于FPGA和LMS算法的自适应滤波器过多消耗硬件资源的问题,提出了符号LMS算法,通过降低乘法运算的次数来提高自适应滤波器的运行速度,并使用流水线技术进行优化。软件仿真验证了符号LMS算法的可行性,硬件仿真证实了采用该算法和流水线技术的自适应滤波器的优越性。

全文阅读

自适应滤波器在现代数字信号处理中的应用极为广泛,主要分成系统辨识、逆模型、预测和干扰消除4大类别[1]。对于实时性要求很高的场合,往往需要使用硬件设计自适应滤波器,并且自适应算法尽量简单、易实现[2]。基于现场可编程门阵列(FP-GA)硬件和最小均方(LMS)自适应算法的自适应滤波器近年来被不断地研究和改进。由于FPGA中嵌入了较多硬线乘法器和加减器,使用它们很容易实现乘累加(MAC)运算,故通常将采用LMS算法的自适应滤波器直接映射到FP-GA芯片上。但这样消耗较多的硬件资源,也不能发挥FPGA并行处理的优势。故本文提出了利用符号LMS算法和流水线技术对上述自适应滤波器进行优化,从而减少嵌入式乘法器资源的消耗并且提高运行速度。1自适应滤波器算法1.1LMS算法设x(n)和w(n)分别表示自适应滤波器的输入信号和权值向量,定义x(n)=[x(n),x(n-1),…,x(n-L+1)]Tw(n)=[w0(n),w1(n),…,wL-1(n)]T则LMS算法的基本形式如下滤波输出:y(n)=wT(n)x(n)=L-1k=0wkx(n-k)(1)误差计算:e(n)=d(n)-y(n)(2)权值更新:w(n+1)=w(n)+e(n)x(n)(3)其中y(n)是自适应滤波器的输出信号,d(n)是期望信号,e(n)表示误差信号,是收敛因子,L是自适应滤波器的阶数。因为LMS算法是严格顺序执行的,所以式(1)~式(3)的次序不能颠倒[3]。其模块图如图1所示。图1LMS算法的模块图虽然LMS算法的推导过程涉及求梯度和微分,但是其最终形式只涉及乘法、加减和迭代3种运算,并且乘法运算量最多。而利用FPGA实现基于LMS算法的自适应滤波器时,硬件资源的消耗很大一部分来源于乘法运算。不管是利用FPGA中的基本逻辑单元LE(LogicElement)还是嵌入式乘法器模块实现乘法运算,基于硬件的乘法运算都将是高成本的,应尽可能地减少[4]。1.2符号LMS算法式(1)中的乘法是为了计算自适应均衡器的输出信号,不能删减。式(3)中的乘法是针对收敛因子、误差信号e(n)和输入矢量x(n)进行的,可以进行改进。针对一些特殊应用,e(n)和x(n)的乘积事实上无需两者都以全精度值参与计算,只取他们的符号进行运算即可[5]。第1种方案是对e(n)取符号,利用正负号符号函数Signum()得sign[e(n)],而x(n)保持全精度,这样两者相乘的结果就是x(n),要么是对x(n)取负值。第2种方案是对x(n)中的x(n)、x(n-1)、…、x(n-L+1)取符号,利用Signum()得sign[x(n)],此时两者的乘积要么就是e(n),要么就是对e(n)取负值。第3种方案是同时对e(n)和x(n)取符号,利用Signum()得sign[e(n)]和sign[x(n)],这样两者相乘的结果就是1或-1。这3种符号LMS算法方案的公式表示依次为w(n+1)=w(n)+sign[e(n)]x(n)(4)w(n+1)=w(n)+e(n)sign[x(n)](5)w(n+1)=w(n)+sign[e(n)]sign[x(n)](6)符号LMS算法其实是对LMS算法的一种改进,其模块图如图2所示,它可由随机梯度法推导而来,以均方误差E[|e(n)|2]为代价函数J(n),推导关键是对J(n)求梯度,然后对其权值w(n)进行自适应调整时,只考虑J(n)的梯度方向,忽略具体的梯度值。因此,牺牲输入信号或误差信号精度的符号LMS算法并不适用于所有的自适应系统[6],利用MATLAB对使用该算法的自

参考文献

引证文献

问答

我要提问