FPGA - 滤波器 - FIR滤波器设计

2024-06-14 02:52
文章标签 设计 fpga 滤波器 fir

本文主要是介绍FPGA - 滤波器 - FIR滤波器设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一,数字滤波器

        滤波器是一种用来减少或消除干扰的器件,其功能是对输入信号进行过滤处理得到所需的信号。滤波器最常见的用法是对特定频率的频点或该频点以外的频率信号进行有效滤除,从而实现消除干扰、获取某特定频率信号的功能。一种更广泛的定义是将具有能力进行信号处理的装置都称为滤波器

        滤波器的分类方法有很多种,从处理的信号形式来讲,可分为模拟滤波器和数字滤波器两大类。

  • 模拟滤波器由电阻、电容、电感、运算放大器等组成,可对模拟信号进行滤波处理。
  • 数字滤波器则通过软 件或数字信号处理器件对离散化的数字信号进行滤波处理。

        随着数字信号处理理论的成熟、实现方法的不断改进,以及数字信号处理器件性能的不断提高,数字滤波器技术的应用也越来越广泛,已成为广大技术人员研究的热点。总体来说,与模拟滤波器相比,数字滤波器主要有以下特点:

  1. 数字滤波器是一个离散时间系统。应用数字滤波器处理模拟信号时,首先须对输入模拟信号进行限带、采样和A/D转换。数字滤波器输入信号的采样频率应大于被处理信号带宽的2倍,其频率响应具有 以采样频率为间隔的周期重复特性。为了得到模拟信号,数字滤波器 的输出数字信号需要经D/A转换和平滑处理。
  2. 数字滤波器的工作方式与模拟滤波器完全不同。模拟滤波器 完全依靠电阻、电容、晶体管等组成的物理网络实现滤波功能;数字滤波器则通过数字运算器件对输入的数字信号进行运算和处理。
  3. 数字滤波器具有比模拟滤波器更高的精度。数字滤波器甚至 能够实现模拟滤波器在理论上也无法达到的性能。例如,对于数字滤波器来说,可以很容易做到一个1000 Hz的低通滤波器,该滤波器允许999 Hz信号通过并且完全阻止1001 Hz的信号,模拟滤波器却无法区分 如此接近的信号。 
  4. 数字滤波器比模拟滤波器有更高的信噪比。因为数字滤波器 是以数字器件执行运算的,从而避免了模拟电路中噪声信号(如电阻 热噪声)的影响。
  5. 数字滤波器具有模拟滤波器无法比拟的可靠性。组成模拟滤 波器部件的电路特性会随着时间、温度、电压的变化而漂移,而数字电路就没有这种问题。
  6. 数字滤波器的处理能力会受到系统采样频率的限制。根据奈奎斯特采样定理,数字滤波器的处理能力会受到系统采样频率的限制。如果输入信号的频率分量包含超过滤波器1/2倍采样频率的分量 时,数字滤波器就会因为频谱的混叠而不能正常工作。
  7. 数字滤波器与模拟滤波器的使用方式不同。

二,数字滤波器的分类

        数字滤波器的种类很多,分类方法也不同,既可以从功能上分类,也可以从实现方法上分类,还可以从设计方法来分类。一种比较通用的分类方法是将数字滤波器分为两大类,即经典滤波器现代滤波器

        经典滤波器假定输入信号 x ( n )中的有效信号和噪声(或干扰)信号分布在不同的频带上,当 x ( n )通过一个线性滤波系统后,可以将噪声信号有效地减少或去除。如果有效信号和噪声信号的频带相互重叠,那么经典滤波器将无能为力。

        经典滤波器主要有低通滤波器(Low Pass Filter,LPF)高通滤波器(High Pass Filter,HPF)带通 滤波器(Band Pass Filter,BPF)带阻滤波器(Band Stop Filter,BSF)全通滤波器(All Pass Filter,APF)等。

        现代滤波理论研究的主要内容是从含有噪声信号的数据记录(又 称为时间序列)中估计出信号的某些特征或信号本身。一旦信号被估计出,那么估计出的信号将比原信号有更高的信噪比。

        现代滤波器把有效信号和噪声信号都视为随机信号,利用它们的统计特征(如自相关函数、功率谱函数等)推导出一套最佳的估值算法,然后用硬件或软件实现。

        现代滤波器主要有维纳滤波器(Wiener Filter)卡尔曼滤波器(Kalman Filter)线性预测器(Liner Predictor)自适应滤波器(Adaptive Filter)等。一些专著将基于特征分解的频率估 计及奇异值分解算法也归入现代滤波器的范畴。

        从实现的网络结构或者单位脉冲响应来看,数字滤波器可以分成无限脉冲响应(Infinite Impulse Response,IIR)滤波器有限脉 冲响应(Finite Impulse Response,FIR)滤波器,二者的根本区别在于两者的系统函数结构不同。


三,FIR滤波器

        根据数字信号处理的基本理论,数字滤波器其实是一个时域离散系统,任何一个时域离散系统都可以用一个 N 阶差分方程来表示,即:

式中, x ( n )和 y ( n )分别是时域离散系统的输入序列输出序列; aj 和 bi 均为常数; y ( n - j )和 x ( n - i )项只有一次幂,没有相互交叉相乘项,故称为线性常系数差分方程。差分方程的阶数是由方程中 y( n - j )项 j 的最大值与最小值之差确定的。 y ( n - j )项 j 的 最大值取 N ,最小值取0,因此称为 N 阶差分方程。 

        一个时域离散系统的特征可以由单位脉冲响应(也称为单位取样响应或单位采样响应) h ( n )完全表示, h ( n )是指输入为单位采样序列 δ ( n )时的输出响应。当滤波器(也是一个时域离散系统)的输入序列 为 x ( n )时,滤波器的输出 y ( n )可表示为输入序列 x ( n )与单位脉冲响应序列 h ( n )的线性卷积,即:

        第一个式子中,当 aj =0且 j >0时, N 阶差分方程可表示为:

式1-3

        对于上式,当输入序列为单位采样序列 δ ( n )时,得到的单位脉冲响应 h ( n )为: 

        此时, h ( n )是长度为 M +1的有限长序列{ b (0), b (0),…, b ( M )},且 h (0)= b (0), h (1)= b (1),…, h ( M )= b ( M ),即 h ( n )就是由 bi (0< i ≤ M ) 组成的序列 。

        我们把式(1-3)表示的时域离散系统称为FIR滤波器,即有限脉冲响应滤波器。顾名思义,是指单位脉冲响应的长度是有限的滤波器。具体来讲,FIR滤波器的突出特点是其单位脉冲响应h(n)是一个 M +1点的有限长序列(0≤ n ≤ M )。其系统函数为:

从系统函数可以很容易看出,FIR滤波器只在原点上存在极点,这 使得FIR系统具有全局稳定性。 

        为了进一步了解FIR滤波器的输入/输出关系,以4阶FIR滤波器为例。根据式(1-3)可写出滤波器的输入/输出关系,即:

        y ( n )= b0 x( n ) + b1 x( n-1)+ b2 x( n-2)+ b3 x( n-3)+ b4 x( n-4)

        由上式可以清楚地看出,FIR滤波器是由一个抽头延时线加法器乘法器构成的,每一个乘法器的操作系数就是一个FIR滤波器系数。因此,FIR滤波器的这种结构也称为抽头延时线结构。

    FIR滤波器的FPGA设计需要完成两个基本步骤:

  1. 根据系统需求,采用MATLAB设计出符合频率响应特性的FIR 滤波器系数。
  2. 根据滤波器系数,采用FPGA实现对应的电路。 

四,FIR滤波器的FPGA实现结构

        一般来讲,FIR滤波器的基本结构可分为直接型级联型频率采、样型快速卷积型分布式等结构。其中直接型结构是FIR滤波器最常用的结构。

(1)基于累加器的FIR滤波器的FPGA设计

        以4阶FIR滤波器为例,采用MATLAB仿真分析基于累加器的FIR滤波器性能,采用FPGA实现FIR滤波器。

        根据前面的分析可知,数字滤波器主要用于分离频率信号,使某些频率的信号无损地通过,同时阻止某些频率的信号

        FIR滤波器是指单位脉冲响应长度有限数字滤波器。根据前文的分析可知,FIR滤波器的基本组成部分包括乘法器加法器单位延时 等。对于FPGA来讲,加法器可以采用Verilog HDL中的加法运算实现, 乘法器可以采用乘法器IP核来实现,单位延时可以采用D触发器来实现。在讨论复杂的FIR滤波器设计之前,先讨论一下简单的FIR滤波器设计,即基于累加器的FIR滤波器设计

        以4阶(长度为5)FIR滤波器为例,当FIR滤波器 的所有系数均为1时,滤波器的输出与输入关系为:

y(n)= x(n) + x(n-1) + x(n-2) + x(n-3) + x(n-4)

        此时的单位脉冲响应 h ( n )={1,1,1,1,1}。从上式可以看 出,FIR滤波器的表达式非常简单,其物理意义也很明确,即对连续输入的4个数据进行累加运算,得到FIR滤波器的输出结果。这种简单的 FIR滤波器是如何对信号进行滤波处理的呢我们先以一个具体的输入信号为例来进行说明。 

        假设输入的信号是由两个频率( f1=20 Hz, f2=2Hz)信号叠加形成的信号,即:

        现以频率 fs=100 Hz对输入信号进行采样,即每间隔0.01 s采样一个数 据,可得到输入序列:

        先通过MATLAB来仿真测试一下 。

        matlab代码:

f1 = 20;
f2 = 2;
fs = 100;
t = 0 : 1/fs : 5;
s = sin(2*pi*f1*t) + sin(2*pi*f2*t);b = [1,1,1,1,1];
y = filter(b,1,s);figure(1);
subplot(211);plot(t,s);
legend('输入信号波形')
xlabel('时间/s');
ylabel('幅度/V');
subplot(212);plot(t,y);
legend('输出信号波形')
xlabel('时间/s');
ylabel('幅度/V');figure(2);
freqz(b,1);

MATLAB仿真得到的输入/输出信号波形如图所示 :

        从上图所示的输入/输出信号波形可以看出,输入信号是两个频率信号的叠加信号输出信号是频率为2Hz的单频信号。也就是说, 基于累加器的FIR滤波器将频率为20 Hz的信号完全滤除了,只剩下频 率为2 Hz的信号。 

        为什么会得到这样的结果呢?为什么长度为5(阶数为4)的FIR滤 皮器(由于FIR滤波器系数全部为1,因此相当于一个累加器)会将频 率为20 Hz的信号完全滤除,而完全保留频率为2 Hz的信号呢?

        首先,从时域来理解前面程序的运行结果。对于上式所示 的累加器,从时域来看,输出序列等于连续5个输入数据之和。对于输入信号中频率为20 Hz的信号,采样频率为100 Hz,每个周期正好有5 个采样数据对于正弦波信号来讲,每个周期采样的5个数据之和进行累加,刚好为0。因此,长度为5的基于累加器的FIR滤波器,当采样频 率为100 Hz时,刚好可以完全滤除频率为20 Hz的信号同时,对于频 率为2 Hz的信号来讲,每个周期采样50个数据,对50个连续数据进行累加相当于在一定程度上的平滑处理,没有明显的滤除效果。

        然后,从频域来理解程序的运行结果。图中右面的表示相频响应,从中可以看出,系统的相频响应分段呈现线性,分别在0~ 0.40.4~0.80.8~1内呈现线性。其中横坐标为相对于π的归一化频率。数字角频率与模拟频率有固定的转换关 系,如果系统的采样频率为 fs,则π对应于采样频率的一半,即 fs/2 。在这, fs=100 Hz,因此0.4对应的模拟频率为 0.4× fs/2=20 Hz

        上图右面上面的图中上方的图表示幅频响应,图中的横坐标为相对于π的归 一化频率。纵坐标为幅度,单位为dB,计算公式为: G =20 ×lg A  

        式中, A 为放大倍数; G 为对放大倍数平方转换成以dB为单位的值。当归一化频率为0.4(对应的模拟频率为20 Hz)时,对应的增益约为-45 dB,进行了大幅度的衰减;当归一化频率为0.04(对应的模拟频率为2 Hz)时,对应的增益约为14 dB,提高为原来的5倍。从上图左面图中可以看出,滤波后的2 Hz信号的幅度为5 V,刚好是输入信号幅度(1 V)的5 倍


        所以采用MATLAB中的函数可以直接实现滤波运算,但在FPGA 中则需要用加法器、乘法器、触发器等来搭建FIR滤波器电路,从而实现对输入信号的滤波处理。对于基于累加器的FIR滤波器的FPGA实现来讲,需要在FPGA中实现上式所示的运算。如前所述,在FPGA中 实现FIR滤波器可以采用直接型、级联型等不同的结构,由于直接型结构简单高效,采用直接型,如下图:

        Verilog 代码如下:

module FIR(input 							clk		,input 		signed	[8:0]		xin 	,output 		signed	[11:0]		yout	);//产生4级出发触发输出信号,相当于4级延时reg 	signed	[8:0] 	x1,x2,x3,x4;always @(posedge clk) beginx1 <= xin;x2 <= x1;x3 <= x2;x4 <= x3;end//对5个连续的输入信号累加assign yout = xin + x1 + x2 + x3 + x4;
endmodule

        需要注意的是,由于输入数据输出数据均为有符号数,因此程序中的所有数据均定义为signed类型的数据

(2)采用并行结构设计15阶FIR滤波器

        所谓并行结构,即并行实现滤波器的累加运算。具体来讲,就是先并行地将具有对称系数的输入数据相加,再采用多个乘法器并行实 现系数与数据的乘法运算,最后将所有乘积结果相加后输出。

根据FPGA设计原理以及并行结构的特点,对于15阶的FIR滤波器的运算,可采用以下步骤实现。

  1. 设计移位寄存器实现输入数据的15级移位输出。
  2. 采用8个加法器完成对称输入数据的加法运算。
  3. 采用8个乘法器并行完成输入数据与FIR滤波器系数的乘法运 算。
  4. 完成8输入加法器运算,输出FIR滤波器的结果。

代码如下:

module FIR_parallel(input 						clk,input 	signed	[7 : 0] 	Xin,output 	signed  [21: 0]		Yout);//数据存入到移位寄存器reg 	signed [7:0]Xin_reg [15:0];always @(posedge clk ) beginXin_reg[0 ] <= Xin;Xin_reg[1 ] <= Xin_reg[0 ];Xin_reg[2 ] <= Xin_reg[1 ];Xin_reg[3 ] <= Xin_reg[2 ];Xin_reg[4 ] <= Xin_reg[3 ];Xin_reg[5 ] <= Xin_reg[4 ];Xin_reg[6 ] <= Xin_reg[5 ];Xin_reg[7 ] <= Xin_reg[6 ];Xin_reg[8 ] <= Xin_reg[7 ];Xin_reg[9 ] <= Xin_reg[8 ];Xin_reg[10] <= Xin_reg[9 ];Xin_reg[11] <= Xin_reg[10];Xin_reg[12] <= Xin_reg[11];Xin_reg[13] <= Xin_reg[12];Xin_reg[14] <= Xin_reg[13];Xin_reg[15] <= Xin_reg[14];end//采用加法器 实现对称系数相加reg 	signed [8:0]Xin_add[7:0];always @(posedge clk ) begin Xin_add [0] <= Xin_reg[0] + Xin_reg[15];Xin_add [1] <= Xin_reg[1] + Xin_reg[14];Xin_add [2] <= Xin_reg[2] + Xin_reg[13];Xin_add [3] <= Xin_reg[3] + Xin_reg[12];Xin_add [4] <= Xin_reg[4] + Xin_reg[11];Xin_add [5] <= Xin_reg[5] + Xin_reg[10];Xin_add [6] <= Xin_reg[6] + Xin_reg[9 ];Xin_add [7] <= Xin_reg[7] + Xin_reg[8 ];end//例化乘法ip核wire	signed [20:0] xout[7:0];mult u0(.clk(clk), .a(Xin_add[0]) .b(12'd0 		) .p(xout[0]));mult u1(.clk(clk), .a(Xin_add[1]) .b(12'd7 		) .p(xout[1]));mult u2(.clk(clk), .a(Xin_add[2]) .b(12'd15 	) .p(xout[2]));mult u3(.clk(clk), .a(Xin_add[3]) .b(12'd46 	) .p(xout[3]));mult u4(.clk(clk), .a(Xin_add[4]) .b(12'd307	) .p(xout[4]));mult u5(.clk(clk), .a(Xin_add[5]) .b(12'd850	) .p(xout[5]));mult u6(.clk(clk), .a(Xin_add[6]) .b(12'd1545 	) .p(xout[6]));mult u7(.clk(clk), .a(Xin_add[7]) .b(12'd2047 	) .p(xout[7]));//2级流水线实现加法reg 	signed [20:0]sum1,sum2;always @(posedge clk) beginsum1 <= xout[0] + xout[1] + xout[2] + xout[3] ;sum2 <= xout[4] + xout[5] + xout[6] + xout[7] ;Yout <= sum1 + sum2;endendmodule

参考文献: 

[1]褚振勇,屈丹,门向生.利用FPGA实现数字信号处理[J].电讯技术,2006,(1):91-96

[2]杜勇.Xilinx FPGA 数字信号处理设计[M].电子工业出版社:202003.339. 

[3]王媛,金磊,曾富华.基于FPGA的多功能FIR数字滤波器设计[J].现代电子技术,2023,46(18):38-42.DOI:10.16652/j.issn.1004-373x.2023.18.007.

[4]刘虹雨.基于FPGA的FIR滤波器电路设计研究[D].电子科技大学,2023.DOI:10.27005/d.cnki.gdzku.2023.003142.

[5]张海军.基于FPGA的16阶FIR滤波器的设计与实现[J].安徽大学学报(自然科学版),2009,33(01):62-65+69.

这篇关于FPGA - 滤波器 - FIR滤波器设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059174

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激

分布式文件系统设计

分布式文件系统是分布式领域的一个基础应用,其中最著名的毫无疑问是 HDFS/GFS。如今该领域已经趋向于成熟,但了解它的设计要点和思想,对我们将来面临类似场景 / 问题时,具有借鉴意义。并且,分布式文件系统并非只有 HDFS/GFS 这一种形态,在它之外,还有其他形态各异、各有千秋的产品形态,对它们的了解,也对扩展我们的视野有所俾益。本文试图分析和思考,在分布式文件系统领域,我们要解决哪些问题、有

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。