lms算法的fpga实现代码_(探讨滤波器)3. 自适应滤波LMS算法的FPGA实现

本文介绍了LMS滤波算法的基本原理,并详细讨论了如何在FPGA上实现这一算法,涉及到信号处理、随机信号分析和矩阵概率论等相关知识。提供的FPGA代码可供学习参考,可能存在记忆偏差和实现上的不足。
摘要由CSDN通过智能技术生成
85b8ecddffc801cb6ebb6bd4e1b7febb.png

最近有网友问能不能写一下LMS滤波算法的FPGA实现,当然可以,因为去年我就已经做过LMS滤波算法的FPGA实现,只是一直没有讲。

本文简单阐述LMS算法的原理,更细节的内容知乎上有人介绍,然后讲LMS算法的FPGA实现方法,将涉及部分现代信号处理,随机信号分析,矩阵,概率论等知识。

本文所用的FPGA代码为去年写,记忆可能有些偏差,实现方法可能也有不妥之处,可供学习使用。


其实所有的数字滤波器都逃不过 延时加权求和的六字真谛,但我们之前讨论的FIR滤波器,其截止频率等参数都是事先已经定好;如果事先已知有用信号与噪声信号的频率相差较远,用这种滤波器是可以完成滤波的。 但如果噪声与有用信号频率相差不大或者噪声近似高斯白噪声呢,这个情况该如何面对?这意味着滤波器参数不能再保持固定不变,也就意味着加权系数不能是定值,而是应该根据信号的某些统计特性改变。 维纳滤波器就是这样一种自适应滤波器,根据维纳霍夫方程可以求得维纳滤波器的加权系数。但是,维纳滤波器有其本身的局限性,在求解加权系数时,需要知道期望信号与输入信号的互相关函数,输入信号的自相关函数。这导致计算过程设计到矩阵运算,并且滤波器不适合非平稳信号,非平稳信号的相关性不是仅仅跟时间有关。 为了简化计算量,LMS不通过求均方误差的数学期望最小去获得最佳权值,而是直接对均方误差求最小值获得权值,然后不断地重复这个过程,直到接近最优维纳解。 维纳的权值更新方程: 根据最陡梯度下降,对 J 求导,得到 所以,权值更新方程最终为: u为学习率,控制权值更新的速度。 所以,LMS算法相比于前面讲过的FIR滤波器,不仅要对输入信号进行加权求和,还要求滤波器输出信号与期望信号的差值,然后根据差值更新权值信息。 LMS算法的FPGA实现结构里,我们依然使用FIR的基础模块,基础模块实现加权和权值更新,然后通过generate for调用基础模块,对所有结果求和;顶层求误差;这里对实现细节不做过多讲述,可以参考(探讨滤波器)2. 手把手用Verilog实现FIR滤波器,非IP核 的实现细节,原理大致相同。 示例中使用的输入信号为带噪信号,期望信号是带噪的语音信号。 base_generator.v 基础模块实现过程,当时使用的是Altera的芯片,所以设置了如果FPGA_FAMILY为“ALTERA”,会调用Altera的乘法器IP核进行权值增量的计算和加权计算过程。 always块里面,首先保存输入信号和误差信号,然后进行加权结果输出,权值更新。
wire signed [X_W+E_W-1:0]	coef_tmp		;	// xin * errre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值