首页 > 技术 > 内容

如何实现一种基于FPGA的横向FIR滤波器设计?

时间:2026-01-27  作者:Diven  阅读:0

横向FIR滤波器的设计

设经过AD采集得到的输入序列为x(n),其通过单位冲激响应为h(n)的因果FIR滤波器后,输出y(n)在时域可表示为线性卷积和的形式:

其中N-1为FIR滤波器阶数(也称抽头数),可以明显的看出h(n)是长度为抽头数加一的有限长序列,不失一般性的设抽头数为3的FIR单位冲激响应h(n)为,

依卷积和画出信号流程图如下,

我们必须明确这里的自变量n表示的并非是连续时间,而是第N次AD采样。

首先根据流程图所示,我们需要设计一个关于x(n)的移位电路,其RTL视图如下,

如图所示的x(n)的移位功能在Verilog中可以通过如下代码实现,注意clk是与数据同步的AD的采样率时钟(AD当前数据建立后,采用一个脉冲标志可实现)。

 

input clk;input signed[8:0] x_in;output reg signed [8:0] xn;output reg signed [8:0] xn_1;output reg signed [8:0] xn_2;output reg signed [8:0] xn_3;always@(posedge clk)beginxn <= x_in;//x(n)xn_1 <= xn;//x(n-1)xn_2 <= xn_1;//x(n-2)xn_3 <= xn_2;//x(n-3)end

 

为了设计方便,需要将浮点数转换为定点运算,注意,N位的数据完成N*N乘法后,其结果的长度为2N位,为了配合乘法运算,我们需要采用18位补码表示有符号数据(MSB为符号位),并对浮点数进行8位的量化处理(乘以256转换为定点数运算,运算结果除以256可得到相应的浮点数),那么上述的系统的冲激响应h(n)可表示为(这里不可避免的引入了量化误差),

对应的18位补码有符号十进制数为,

电路RTL视图如下,

如图所示的x(n)移位后对应的乘法功能在Verilog中可以通过如下代码实现。

 

input clk;input signed[8:0] x_in;output signed [17:0] mult0;output signed [17:0] mult1;output signed [17:0] mult2;output signed [17:0] mult3;reg signed [8:0] xn;reg signed [8:0] xn_1;reg signed [8:0] xn_2;reg signed [8:0] xn_3;always@(posedge clk)beginxn <= x_in;//x(n)xn_1 <= xn;//x(n-1)xn_2 <= xn_1;//x(n-2)xn_3 <= xn_2;//x(n-3)endassign mult0 = xn * 18'd162;//x(n) *h(0)assign mult1 = xn_1 * 18'd134;//x(n-1)*h(1)assign mult2 = xn_2 * 18'd218;//x(n-2)*h(2)assign mult3 = xn_3 * 18'd262062;//x(n-3)*h(3)

 

采用一级加法电路完成整个求卷积和的过程,需要注意的是,有符号的加法操作,需要对符合位进行保护,完成加法后数据的长度应设为2*N+log2(Tap+1)-1(其中Tap表示抽头数),则本文需要的加法寄存器的长度为为19位(2*9+log(4)-1),并且取其高11位作为y(n)输出(该操作等于除以256)其电路RTL视图如下,

该结构的总体Verilog代码如下。

 

Module fir(input clk,input signed[8:0] x_in,output signed [10:0] y_out);reg signed [8:0] xn;reg signed [8:0] xn_1;reg signed [8:0] xn_2;reg signed [8:0] xn_3;wire signed [17:0] mult0;wire signed [17:0] mult1;wire signed [17:0] mult2;wire signed [17:0] mult3;wire signed [18:0] adder0;always@(posedge clk)beginxn <= x_in;//x(n)xn_1 <= xn;//x(n-1)xn_2 <= xn_1;//x(n-2)xn_3 <= xn_2;//x(n-3)endassign mult0 = xn * 18'd162;//x(n) *h(0)assign mult1 = xn_1 * 18'd134;//x(n-1)*h(1)assign mult2 = xn_2 * 18'd218;//x(n-2)*h(2)assign mult3 = xn_3 * 18'd262062;//x(n-3)*h(3)assign adder0 = mult0 + mult1 + mult2 + mult3; //adder0(n)=x(n)*h(0)+x(n-1)*h(1)+x(n-2)*h(2)+x(n-3)*h(3)assign y_out = adder0[18:8];//y(n)=adder0(n)/256endModule

 

基于ModelSim求系统冲激响应与矩形脉冲响应

列写testbench如下,

 

`timescale 1ns/1ns`define ad_clk 20module fir_tb;regclk;reg signed[8:0] x_in;wire signed [10:0] y_out;fir fir(.clk(clk),.x_in(x_in),.y_out(y_out));initial clk = 1;always#(`ad_clk/2) clk = ~clk;initialbeginx_in = 9'd0;#(`ad_clk*20);#3;x_in = 9'd100;#(`ad_clk);x_in = 9'd0;#(`ad_clk*20);x_in = 9'd100;#(`ad_clk);x_in = 9'd100;#(`ad_clk);x_in = 9'd100;#(`ad_clk);x_in = 9'd100;#(`ad_clk);x_in = 9'd100;#(`ad_clk);x_in = 9'd0;#(`ad_clk*20);$stop;endendmodule

 

仿真求得对应的响应为

显然,当输入为x(n)=100δ(n)时,输出为y(n)=100h(n)(存在着量化误差),输入为x(n)=100[u(n)-u(n-5)]时,输出y(n)=[63δ(n) 115δ(n-1) 200δ(n-2) 168δ(n-3) 168δ(n-4) 105δ(n-5) 53δ(n-6) -33δ(n-7)]。

 


审核编辑:刘清

猜您喜欢


防浪涌电阻作为保护电路安全的重要元件,受到了越来越多的关注。肇庆英达作为国内知名的防浪涌电阻制造企业,其产品以优良的性能和多样的规格赢得了市场青睐。本文将详细介...
2018-11-14 18:30:49
NOR Flash是非易失性存储器,应用于嵌入式系统和消费电子产品中。主要参数包括存储容量、读取和写入速度、耐久性、功耗和工作温度范围。存储容量通常从几兆字节到...
2012-12-16 00:00:00
DSP有两种理解:1)广义的理解:digital signal processing——数字信号处理;它是利用数字信号处理系统,以数字形式对信号进行处理,最...
2019-07-12 17:47:00
精密电阻作为电路中的关键元件,其性能和规格受到关注。融欣(JACKCON)作为国内知名的精密电阻品牌,以高品质和多样化的产品规格赢得了认可。本文将围绕融欣(JA...
2021-10-08 12:27:28
电子元器件中,贴片电阻因其体积小、性能稳定、安装方便等优点被应用于各种电子设备中。对于电子设计师和维修人员来说,准确识别贴片电阻的尺寸非常重要,因为不同尺寸的贴...
2025-11-20 18:30:39
LED背光照明技术作为一种高效、节能、环保的照明方式,近年来发展迅速,正逐渐取代传统的照明方式,走进千家万户。从手机、电视屏幕到室内外照明,LED背光技术以其独...
2024-09-18 00:00:00
可插拔电缆是便捷的连接方式,应用于各类电子设备中。主要特点在于能够快速、方便地连接或断开电源,从而提高了设备的灵活性和可维护性。市场上的可插拔电缆种类繁多,主要...
2010-08-08 00:00:00
电子设备日益小型化、低功耗化的今天,高效的电源管理显得尤为重要。SP1602 是一款以其高效率和易用性而著称的降压型 DC-DC 转换器芯片,能有效地将较高的直...
2024-05-19 00:00:00
风能行业:为什么要进行监测?在风能行业,振动监测是一项至关重要的节约成本和安全措施。风力涡轮机由许多旋转元件组成,由于速度和负荷不断变化,这些元件随着时间的推移...
2023-08-03 08:04:00
微型保险丝作为电子设备中的重要保护元件,其好坏直接关系到设备的安全运行和使用寿命。正确测量微型保险丝的状态,不仅能够及时发现故障,还能避免设备因保险丝损坏而导致...
2025-11-25 07:30:46