2021-12-04:滑动平均滤波器的verilog实现
2021/12/4 23:20:15
本文主要是介绍2021-12-04:滑动平均滤波器的verilog实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
https://blog.csdn.net/qq_36248682/article/details/105666864
最方便实现的求均值方法便是滑动平均滤波器,之所以称之为滤波器是因为该算法本身有一种保留低频分量、滤除高频分量的特性。
如3点滑动平均滤波器的输出y(n)=[x(n-2)+x(n-1)+x(n)]/3。滑动平均滤波器的频率响应是1。
上述示例x(n)的每个取样点权值相同,都为1/3。也可以为每个取样点选择不同的权值,即为加权滑动平均滤波器 。
FPGA设计
在Quartus II开发环境下完成8点滑动平均滤波器的设计。模块接口如下(使用Verilog):
module Average_Filter
#(
parameter AVE_DATA_NUM = 5’d8,
parameter AVE_DATA_BIT = 5’d3
)
(
input i_rst_n,
input i_clk,
input [31:0]din,
output [31:0]dout
);
使用一组8个寄存器移位存储数据,即求平均值时共选取8个数据进行运算。代码如下:
reg [31:0] data_reg [AVE_DATA_NUM-1:0];
reg [7:0]temp_i;
always @ (posedge i_clk or negedge i_rst_n)
if(!i_rst_n)
for (temp_i=0; temp_i<AVE_DATA_NUM; temp_i=temp_i+1)
data_reg[temp_i] <= 'd0;
else
begin
data_reg[0] <= din;
for (temp_i=0; temp_i<AVE_DATA_NUM-1; temp_i=temp_i+1)
data_reg[temp_i+1] <= data_reg[temp_i];
end
对连续8个寄存器数据求和并计算均值
reg [31:0] sum;
always @ (posedge i_clk or negedge i_rst_n)
if (!i_rst_n)
sum <= 'd0;
else
sum <= sum + din - data_reg[AVE_DATA_NUM-1]; //将最老的数据换为最新的输入数据
assign dout = sum >> AVE_DATA_BIT; //右移3 等效为÷8
对于FPGA而言,除法 运算很消耗资源,可以采用移位的方法来代替,如上代码所示。
这篇关于2021-12-04:滑动平均滤波器的verilog实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?