現在的位置: 首頁 > FPGA開發 > 正文

FPGA數字信號處理—滑動平均濾波器

2020年02月07日 FPGA開發 ⁄ 共 904字 ⁄ 字號 FPGA數字信號處理—滑動平均濾波器已關閉評論

最方便實現的求均值方法便是滑動平均濾波器,之所以稱之為濾波器是因為該算法本身有一種保留低頻分量、濾除高頻分量的特性。如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; //右移 等效為÷

對于FPGA而言,除法 運算很消耗資源,可以采用移位的方法來代替,如上代碼所示。

二八杠讨论心得 十大期货配资公司排名 涨鑫宝配资 证券投资分析师 股票行情分析论文 股票分析方法中进行技术分析 临汾股指期货配资 股票配资平台哪个好多少钱 东北期货配资 股票分析师炒股厉害吗 2019股票配资平台网址 四川成都股票配资利息 基金配资价格 股吧股票推荐 铁牛配资 南洋股份最新消息 沈阳期货配资
×