verilog下的可变字长,32阶自适应滤波器
基于LMS算法和FIR滤波器,进行自适应滤波。详细内容参考,裴师兄研究生毕业论文。
模块名 | 功能 |
---|---|
IS_reg | 输入信号移位寄存 |
forward_filter | fir滤波器 |
error_compute | 计算期望值和实际值的误差 |
backfoward_coe_upgrade | 依据lms算法的权重更新 |
IS_reg
输入信号寄存器由32个相同字长的寄存器连接构成,这些结果将由backforward_coe_upgrade用来更新权重,forward_filter模块用来进行滤波
foward_filter
包含乘法器阵列模块(mult_array)和并行压缩模块(parallel_compressor)。以上两个模块作为近似自适应滤波的处理重点,目前只完成了基本的框架搭建,后续使用近似的方法优化
error_compute
依据期望值和实际输出计算误差,返回值存在缩减,因为输出值的位宽和期望值不同。
backforward_coe_upgrade
由coe_upgrade单元构成,基于每一个IS输入,期望误差和上一次权重计算出下一个权重。
error_compute
裴哥定标理解在这个模块里,因为实际输出值是37位,但是之后需要使用乘法器运算,它的位宽需要是16,需要约化。由于信号幅值都是1,它们被扩展到16位时(补码),相当于前两位整数加上后14位小数,表示从-1到+1,而乘法运算的结果也应该再-1到+1之间,因为他是32个值相加,每一位乘法器输出的绝对值小于1,所以它的绝对值小于32位,整数部分需要用6位整数描述。但是,因为期望的输出值(归一化为16位)是两个幅值为1的信号叠加,它的幅值为2,也可以表示为2位整数和14位小数,所以实际输出的范围也应该是-2到2,所以也可以是2位整数和14位小数表示。这里14位小数取小数点之后的前14个,整数部分取第0位和之前任意一位。(整数的0位表示大小,前面的都应该是相同的符号位拓展,所以无所谓)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。