FIR高阶带通滤波器

2024-08-29

FIR高阶带通滤波器(共5篇)

FIR高阶带通滤波器 篇1

0 引 言

在FPGA应用中, 比较广泛而基础的就是数字滤波器。根据其单位冲激响应函数的时域特性可分为无限冲击响应 (Infinite Impulse Response, IIR) 滤波器和有限冲击响应 (Finite Impulse Response, FIR) 滤波器。DSP Builder集成了Altera和Matlab/Simulink基于FPGA的信号处理的建模和设计。该工具可以将数字信号处理算法 (DSP) 系统表示成为一个高度抽象的模块, 在不降低硬件性能的前提下, 自动将系统映射为一个基于FPGA的硬件设计方案。即支持设计者在Matlab中完成算法设计, 在Simulink软件中完成系统集成, 然后通过SignalCompiler (模块名) 生成在QuartusⅡ软件中可以使用的硬件描述语言, 最终实现硬件系统的设计[1]。FIR滤波器是DSPBuilder应用中最为常用的模块之一, 在此基于上述基础, 设计实现了基于模块的FIR数字带通滤波器。

1 基于DSP Builder的滤波系统设计

1.1 FIR滤波器原理

有限冲激响应 (Finite Impulse Response, FIR) 滤波器是由有限个采样值组成, 实现的方式是非递归、稳定的, 在满足幅频响应要求的同时, 可以获得严格的线性相位特性, 因此在高保真的信号处理等领域得到广泛应用。

对于一个FIR滤波器系统, 它的冲击相应总是有限长的, 其系统函数可记为:undefined, 最基本的FIR滤波器可表示为:

undefined

式中:x (n) 是输入采样序列;h (n) 是滤波器系数;L是滤波器阶数;y (n) 表示滤波器输出序列, 为x (n) 和h (n) 的卷积。FIR滤波器基本结构如图1所示。

对于一个4阶滤波器子系统其输出可表示为:

undefined

可见在这个子系统中共需要4个延时器, 4个乘法单元和一个4输入的加法器, 并可以根据实际需要选择调用子系统构成多阶滤波器[2]。

1.2 滤波的总体要求及实现

1.2.1 设计要求和滤波参数选取

该带通滤波器的技术指标为16阶FIR数字带通滤波器, 对模拟信号的采样频率fs为102.4 kHz, 通带频率为24~44 kHz, 上限截止频率24 kHz, 下限截止频率44 kHz, 输入/输出序列位宽分别是9位、19位[3]。滤波器系数由滤波器设计工具FDATools生成。因FIR数字滤波器的设计方法主要有窗函数法和等波纹一致逼近法等, 比较最佳效果选定Equiripple等波纹法实验。输入信号采用DSPBuilder库中的增加/减少 (Increment Decrement) 模块和LUT模块, 分别构成一个线性递增的地址发生器和正弦查找表模块。这样组建一组正弦信号, 考虑组建通带内频率f1=24.414 kHz与带外频率f2=48.828 kHz叠加。之所以选这两个频率主要根据LUT中的信号的步进制即在一个周期 (0~2π) 中对信号采样点来决定的。

1.2.2 带通滤波器的模型设计

根据FIR滤波器原理和4阶子系统的输出公式, 在Matlab的Simulink环境下, 调用AlteraDSP Builder库中的4个Delay延迟模块、4个Product乘法模块、5个9位的Input输入端口、1个20位的Output输出端口和一个4输入的加法器, 使9位的输入序列x (n) 和FIR滤波器的系数h (0) , h (1) , h (2) , h (3) 作为输入, 完成4阶滤波器子系统。调用4个这样的子系统级联起来构成16阶的滤波器。其中, 滤波器系数h (0) , h (1) , …, h (15) 由滤波器设计工具FDATools生成, 系数与滤波器关联, 建立出完整的滤波系统模型[2]。

2 Simulink的模型仿真

在Simulink环境下设计仿真时间等参数, 运行仿真得到滤波输出的幅频相应图和时域图如图2, 图3所示。

图2中纵横坐标分别代表了幅值和频率值显示, Magnitude, Frequency单位分别是dB (幅值单位也称衰减倍数) 和MHz (横坐标每格单位相比kHz被放大104便于观察) 。纵横轴每格量为5 dB和50 MHz。从该频谱图中可看出, 滤波后通带内幅频曲线相对平缓, 带外衰减较大, 由滤波前的连续幅频变成了选择通过的单一幅频曲线, 起到了过滤带外频谱的作用。

该图坐标轴的纵横轴分别代表了幅度值和时间轴。单位分别为十进制数和s。图3 (a) 是两正弦信号经平行加法器合成的波形图3 (b) 滤波后的波形。可见高频信号衰减很大起到了过滤带外时间离散信号的作用。综上该带通滤波器在频域和时域都实现了相应的滤波功能, 至此完成了模型仿真。

3 在ModelSim中实现RTL级仿真

Simulink中仅实现了算法级的仿真, 而ModelSim需要对生成的VHDL代码进行功能仿真即RTL级仿真。如图4的波形。

图4定性表述了6个信号波形。clock为时钟周期, 第二个信号是全局复位。重点观察第三、六个信号, 分别是输入信号 (加了数/模转换的) 的模拟显示和经滤波后输出信号的模拟显示。这和Simulink中仿真结果是一致的。第四个信号是滤波后 (加数/模转换) 的信号, 第五个是最后一个4阶滤波子系统的输出。同样可设置ModelSim对应的数字显示, 每个时钟周期对应的数值即为每个时钟周期对正弦信号的一个采样点计算一次的值。

4 在Quartus Ⅱ中实现时序仿真

ModelSim中也仅实现RTL级仿真, 并不能精确反应电路的全部硬件特性。Altera提供自动和手动两种综合适配流程, 在此选用自动流程在Quartus Ⅱ中进行硬件设计。设定990 ns仿真结果如图5所示与图3 ModelSim的数字显示对应信号和结果均是一致的, 只是QuartusⅡ的时序仿真[4]更为精确。

5 FPGA硬件实现

系统仿真通过后, 需转到硬件上加以实现, 这是整个DSP Builder设计中最为关键的一步。Quartus Ⅱ仿真中生成了.sof编程文件, 用于FPGA编程配置, 完成了对开发板Stratix Ⅱ EP2S180特定芯片的编译和管脚的分配。将.sof文件下载到开发板中, 编程模式为USB Blaster相应模式为JTAG, 用示波器检测D/A输出, 可观察到实测的输入/输出波形与仿真结果均对应一致。至此完成了该滤波器完整的FPGA开发设计, 并验证了该滤波器达到预期设计要求。

6 结 语

这里介绍在Altera DSPBuilder环境下基于模型化设计FIR数字带通滤波器的方法, 通过模块化的方法实现了向VHDL硬件描述语言代码的自动转换、RTL级功能仿真、综合编译适配和布局布线、时序实时仿真直至对目标器件的编程配置和硬件实现。验证了滤波器满足预期设计要求。创新点在于便捷地设计模块或修改基本参数, 完成其他DSP系统设计。综上采用DSP Builder作FPGA设计, 可以更快速、可靠、有效地实现系统功能。 体现了FPGA技术的便捷和发展。

摘要:为设计一个项目可用的FIR数字带通滤波器, 采用Matlab/Simulink软件中DSPBulider强大的算法模块设计工具, 结合Altera公司的FPGA开发板实现FIR数字带通滤波器的系统集成、RTL级仿真、综合编译、下载等设计流程, 并对正弦信号进行滤波, 结果下载到开发板上用示波器观测, 达到了预期的滤波效果和目的。基于DSPBuilder完成系统建模, 省去了复杂的VHDL编程, 还可针对具体模块进行参数设置从而适应不同的滤波需求。该方法实现简单、可靠, 还可类推实现其他复杂的嵌入式系统设计。

关键词:FIR (有限冲击相应) ,数字带通滤波器,FPGA,DSPBulider

参考文献

[1]任爱峰, 初秀琴, 常存, 等.基于FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版社, 2004.

[2]潘松, 黄继业, 曾毓.SoPC技术使用教程[M].北京:清华大学出版社, 2004.

[3]飞思科技产品研发中心.Matlab 7辅助信号处理技术与应用[M].北京:电子工业出版社, 2005.

[4]郑亚民, 董晓舟.可编程逻辑器件开发软件QuartusⅡ[M].北京:国防工业出版社, 2006.

[5]杨守良.Matlab/Si mulink在FPGA设计中的应用[J].微计算机信息, 2005, 21 (16) :98-99.

[6]程佩青.数字信号处理教程[M].北京:清华大学出版社, 2001.

[7]杨春玲, 张辉.现代可编程逻辑器件及SoPC应用设计[M].哈尔滨:哈尔滨工业大学出版社, 2005.

[8]齐鹏飞, 刘雄飞, 张德恒.基于FPGA的数字滤波器的设计与实现[J].现代电子技术, 2006, 29 (15) :70-71.

[9]赖联友, 吴伟力, 许伟坚.基于FPGA的FIR滤波器设计[J].集美大学学报, 2006, 11 (4) :348-350.

[10]Altera.Altera DSP Builder for DSP 6.1 User Guide.pdf[EB/OL].http://www.altera.com, August 2004/Novem-ber 2008.

FIR高阶带通滤波器 篇2

FPGA是专用集成电 路领域的一种半 定制电路, 可构建高度并行的数据处理架构,提高系统的实时性[1]。而FPGA的可重配置性意味着只要开发出算法,便可通过下载不同的配置文件对相应硬件结构和功能进行升级,这也保证了系统有更强的适应性和灵活性。FPGA不仅具有专用集成电路速度快和工作稳定的特点,又兼具了软件的实时性,是实现高阶FIR滤波器的理想器件。

本文采用FPGA实现高阶FIR滤波器,介绍了快速卷积结构的FIR滤波器原理[2]和一维转二维FFT算法来实现长序列的FFT[3],给出了FPGA上各模块的结构原理和仿真验证结果。

1FIR滤波器原理及FFT算法改进

1.1快速卷积结构原理及运算量分析

FIR滤波器的输出可用时域上的线性卷积y( n) = h( n) * x( n) 实现。若两序列x( n) 与h( n) 的长度分别为N1和N2( N1≠N2) ,将两序列补零变成L点的序列x'( n) 和h'( n) ,且满足

就可用两序列的圆周卷积代替两序列的线性卷积。利用“时域序列的圆周卷积等效于频域的离散频谱的乘积”这一性质,可先对两L点序列进行离散傅里叶变换( DFT)[4]

两者相乘,得到

最终再对Y( k) 进行离散傅里叶反变换( IDFT)

其中,带表圆周卷积。最后,取y'( n) 的前N1+ N2-1个值,就得到FIR滤波器的 输出y ( n ) 。 其中对x'( n) 和h'( n) 的L点和IDFT可采用FFT[5]和IFFT算法快速实现,这样大幅加快了FIR滤波器的速度。另外,一般h'( n) 的值是固定的,可先对h'( n) 进行FFT得到频域系数H( k) 并存储,这样就无需每次对h'( n) 进行FFT,节省了一次FFT的时间。

对于快速卷积结构,将x( n) 与h( n) 均补零变成长度为L的序列,则快速卷积结构需要进行( L +1) log( L) 次复数乘法和2Llog( L) 次复数加法。

随着FIR滤波器[6,7]的阶数增加,采用线性卷积等方法的运算量会急剧增加,而采用快速卷积结构可大幅减小运算量,当N1和N2足够长时,用该结构计算线性卷积更快,这对提高滤波器的实时性有着重要的意义。

1.2FFT算法改进

对于高阶的FIR滤波器[8,9],由于输入序列补零后长度较长,采用直接级联型的方法实现长序列FFT会造成存储规模过于庞大,逻辑设计也较为困难,必须加以改进。

设输入序列x( n) 的长度N = 2n,其DFT为

式( 5) 中0≤k < N,将输入序列按间隔l等间距抽取,l是2的幂次方数。

式 ( 6) 中0 ≤ k < N/l,0 ≤ s < l,其中皆为N/l点DFT。所以,可对这l组N / l点DFT分别采用FFT进行计算,得到N/l个子序列Xi( k) ,其中0 ≤ i < l,0 ≤ k < N / l。式( 6) 可简写为

从式( 7) 可看出,该式实际上是对输入序列{ WiNkXi( k) } 的DFT,对于每个k值有0≤k < N/l,X( k + s N/l) 均可采用l点的FFT来进行计算。对N/l个k值进行l点的FFT就可得到序列x( n) 的FFT结果,这种方法实际上是将一维的FFT转化为二维FFT[10]。相对于直接级联的方法,一维转二维FFT可少存储资源的消耗并减少控制逻辑的复杂度,是在FPGA上实现长序列FFT的有效方法。

2FPGA实现高阶FIR滤波器

系统使用Xilinx公司的XCLVLX240T FPGA,采用Verilog HDL语言进行算法设计。

如图2所示,当系统开始工作时,控制模块将FFT / IFFT模块、频域相乘模块[11]等各部分的复位端口拉高1 000 ns使各模块复位。复位操作完成后, FFT / IFFT模块从存储器1中读取输入序列进行FFT变换。FFT变换完成后的数据直接送入频域相乘模块中,频域相乘模块从滤波器系数存储器中读取系数与FFT结果相乘,并将相乘结果存入存储器1中。频域相乘运算结束后,控制模块对各模块进行复位,复位完成后,FFT/IFFT模块从存储器1中读取数据进行IFFT变换,得到滤波器输出结果,并将结果重新存储在存储器1中。

2.1FFT/IFFT模块设计

FFT / IFFT模块在进行FFT时从存储器1中读取列数据,送入128点列变换FFT核中,FFT核的输出连接到复数乘法器,与旋转因子相乘后送入存储器2暂存。列变换完毕后,256点行变换FFT核从存储器2中读取数据进行行变换,并输出最终的FFT运算结果。IFFT过程与FFT过程类似,只是在读取旋转因子时,对旋转因子的最高位,即符号虚部符号位的最高位取反,得到WN- ik。FFT/IFFT模块内部的连接框图如图3所示。

2.2频域相乘模块设计

频域相乘模块的作用是从系数存储器中读取滤波器系数并与FFT的输出相乘,得到频域的乘积结果。 频域相乘模块包括地址控制单元和复数乘法器两部分,其内部连接如图4所示。

如图4所示,当FFT_MODE信号为低电平时,系统工作在IFFT状态下,复数乘法器不启动,FFT/IFFT模块输出数据xk_re与xk_im通过多路选择器直接连接到存储器1的数据输入端口,FFT/IFFT模块输出的写使能信号和地址信号也通过多路选择器直接连接到存储器1的写使能端口和地址端口。

当FFT_MODE信号为高电平时,系统工作在FFT状态下。控制单元输出系数存储器地址信号和读使能信号,与xk_re、xk_im相乘。当复数乘法器RDY信号拉高时,控制单元输出存储器1的地址信号和写使能信号,并通过多路选择器连接到存储器1相应的端口, 频域相乘结果存入存储器1中。

3实验结果

本文采用Matlab对FPGA进行辅助设计和仿真验证,表1是FIR滤波器的设计指标。

根据上述指标,通过Matlab的FDATool采用凯塞窗设计得到一个15 056阶的带通FIR滤波器,并产生测试数据x( t) = 0. 5sin( 270 × 2πt) + 2sin( 40 × 2πt) 。 测试数据与滤波器系数补零成为32 768点序列,并对补零后的滤波器系数进行FFT。将这两组数据写入 . coe文件中,连同设计文件下载到FPGA中。基于FPGA的高阶FIR滤波器仿真输出波形如图5所示。

仿真软件ISIM将仿真输出数据存储在 . txt文件中, Matlab读取 . txt文件并绘制图形得到如图7所示的结果。

由图可看出,测试数据中包含的40 Hz频率成分已经完全被滤除,只保留了270 Hz的频率成分,可见基于FPGA的高阶FIR滤波器完全可达到设计要求。在速度方面,基于FPGA的高阶FIR滤波器在200 MHz工作时钟下完成滤波操作只需1. 5 ms,速度超过了Matlab。

4结束语

本文详细叙述了基于快速卷积的FIR滤波器原理,并推导了一维大点数FFT转二维小点数FFT的公式,给出了基于FPGA的高阶FIR滤波器的工作过程和FFT/IFFT模块等关键模块的结构原理及工作过程。 仿真验证表明,采用快速卷积结构实现高阶FIR滤波器可大幅减少运算量,达到实时处理的效果。采用一维大点数FFT转二维小点数FFT的方法可以有效减少FPGA片内存储资源的消耗,并降低了逻辑控制的复杂性。相比Matlab,FPGA能做到实时处理,且误差可控制在较小的范围内,是实现高阶FIR滤波器的有效手段。

摘要:对于高阶FIR滤波器,由于运算量较大,采用软件等方式无法达到实时处理的要求。文中提出了采用FPGA实现快速卷积结构的高阶FIR滤波器,推导出将大点数FFT分解为二维FFT变换的公式。根据上述理论在采用Verilog HDL语言设计了基于一维转二维FFT的快速卷积结构高阶FIR滤波器。实验表明,该基于FPGA的高阶FIR滤波器具有精度高、速度快、资源消耗少、调试方便、易于集成等优点,并可达到工程实践的要求。

FIR高阶带通滤波器 篇3

随着电子技术的飞速发展,人们正逐步进入数字化时代,数字滤波器越来越受到人们的关注,并且在近代电信设备和各类控制系统中的应用极为广泛,如语音处理、图像处理、通信、电视、雷达、生物医学信号处理等。数字滤波器根据其冲激响应函数的时域特性,可分为有无限长单位冲激响应(IIR)滤波器和有限长单位冲击响应(FIR)滤波器。IIR滤波器虽然可以利用模拟滤波器设计的结果,而模拟滤波器的设计有大量的图表可查,方便简单,但它的相位是非线性的。图像处理以及数据传输都要求信道具有线性相位,同时又可以具有任意的幅度特性。此外,FIR滤波器的单位冲激响应是有限长的,因而滤波器一定是稳定的。随着Matlab软件和信号处理工具箱的不断完善,可以利用Matlab信号处理工具箱快速有效地实现数字滤波器的设计、分析和仿真。本文首先使用Matlab设计了一个FIR数字带通滤波器,并对一段含噪语音信号进行滤波,然后在TI公司生产的TMS320C5402芯片上具体实现了该滤波器。

1FIR数字带通滤波器设计原理

设FIR滤波器单位脉冲响应h(n)长度为N,其系统函数H(z)为:

Η(z)=n=0Ν-1h(n)z-n(1)

FIR滤波器的设计任务是选择有限长度的h(n),使传输函数满足技术要求。一般是先给定所要求的理想滤波器频率响应Hd(ejω),导出hd(n)。因为理想滤波器的冲激响应hd(n)是无限长的非因果序列,而所要设计的是hd(n)是有限长的FIR滤波器,所以要用有限长序列hd(n)来逼近无限长序列h(n)。设:

hd(n)=12π-ππΗ(ejω)ejωdw(2)

常用的方法是使用有限长的窗函数w(n)来截取hd(n),即:

h(n)=w(n)*hd(n)(3)

根据在时域是相乘关系在频域则是卷积关系,可得:

Η(ejω)=12π-ππΗd(ejω)WR[ej(ω-θ)]dθ(4)

式中:WR(ejω)为窗谱;H(ejω)是FIR滤波器频率响应。由此可见,窗函数不仅影响原信号在时域内的波形,而且也影响频域内的波形。

2用Matlab辅助设计与仿真

设计一个FIR滤波器,关键是要得到正确的h(n)系数。把生成的滤波器系数加载到目标DSP程序中有两种方式:

(1) 把滤波器系数输入到一个C语言的头文件,在所建工程中添加该头文件;

(2) 直接把生成的滤波器系数加载到DSP程序的一个变量中。

本文采用第二种方法。选择菜单File→Export打开Export对话框,选择Coefficient File(ASCII),指定输出文件名,生成*fcf文件,就可以直接把生成的*fcf文件中的系数添加到DSP程序的变量中了[1]。

在Matlab软件平台下,利用wavread函数对语音信号进行采样,记住采样频率和采样点数。采样值放在向量y中,fs表示采样频率(单位:Hz),bits表示采样位数。根据语音信号的特点给出数字带通FIR滤波器的性能指标:设置通带频率fp1=1 200 Hz,fp2=3 000 Hz,阻带频率fs1=1 000 Hz,fs2=3 200 Hz,抽样频率fs=8 000 Hz,阻带最小衰减As=50 dB,通带最大衰减[2]Ap=1 dB。这里采用窗函数设计法设计FIR带通滤波器。首先根据阻带衰减选择窗形状,海明窗和布莱克曼窗等窗函数均可提供大于50 dB的衰减。由于海明窗可提供较小的过渡带,所以选择海明窗。根据ωp1=2fp1/fs;ωs1=2fs1/fs,B(带宽)=ωp1-ωs1,N(窗口长度)=ceil(6.6/B),n(阶数)=N-1;算出阶数为132。在FDATool设计界面,按要求填写以上参数,得到FIR数字帯通滤波器的仿真图像,如图1所示。

然后再用设计的FIR数字带通滤波器对加噪的语音信号进行滤波。在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波。编写Matlab程序如下,实现上述功能。

程序中“quzao”为录制的波形音频文件(.wav),对加噪的语音信号进行滤波仿真处理后,输出结果如图2所示。

3FIR数字带通滤波器语音去噪的DSP实现

3.1 硬件结构

图3为FIR帯通滤波器的语音去噪硬件结构框图。系统主要由DSP芯片(TMS320C5402)、A/D转换器(ADS7864)和D/A转换器(DAC7625)组成。

实现的核心器件采用TI公司生产的TMS320 C5402芯片。该芯片采用先进的修正哈佛结构,片内共有8条总线、CPU、在片存储器、在片外围电路等硬件和高度专业化的指令系统,使它的处理速度和容量大大提高,为数字滤波中的复杂算法的实现提供了良好的保证。

A/D转换器采用TI公司生产的ADS7864芯片,它是一个高速(转换时间2 μs)12位精度,6通道的A/D转换器件。它的最高工作频率可达8 MHz,采样率为500 kHz。根据奈奎斯特定理,信号的最高频率不能高于250 kHz,这样才不会有失真,而这个频率对于语音信号的处理已经足够。

D/A转换芯片采用DAC7625,它是一个4路12位D/A转换器件,每路都有输入寄存器和DAC寄存器,构成双缓冲结构,转换时间为[3]10 μs。

3.2 软件设计

3.2.1 数据组织方式

若输入信号x(n)和滤波器的单位冲激响应h(n)在频域分别为X(ejω)和H(ejω),则其输出信号的频率响应为Y(ejω)=X(ejω)H(ejω)。根据离散傅氏变换的性质,可以得到滤波系统的差分方程:

y(n)=x(n)h(n)=m=0Ν-1h(m)x(n-m)(5)

从上文Matlab的仿真过程可得到滤波器的级数N和滤波器系数h(n)。从上述可知数字滤波器实现时,主要是进行乘和加运算以及数据存取操作。

在定点DSP上实现FIR滤波有两种方式:一种是用线性缓冲区实现z-1,该方式能保证新老数据在存储器中的存放位置直接明了,新的数据存放在缓冲区的固定位置;另一种方式是循环缓冲区实现z-1,该方式新老数据在缓冲区的位置不直接明了,新的数据没有固定位置,但可以方便地完成滤波器窗口的自动更新。考虑到本方案中使用的是汇编语言编程,还有N的阶数较大,为提高速率,因此在选择FIR滤波器的方式时选择循环缓冲区实现z-1的方式。

对于N级的FIR滤波器,在数据存储器中开辟一个称之为滑窗的N个单元的缓冲区,滑窗中存放最新的N个输入样本。每次输入新的样本时,一新样本改滑窗中的最老数据,而滑窗中的其他数据不需要移动。利用片内BK(循环缓冲区长度)寄存器对滑窗进行间接寻址,环缓冲区地址首位相邻。

3.2.2 程序设计思路

程序设计的总体思路是:启动ADS7864对输入的模拟信号进行A/D转换,每采集到一个数据就送入DSP进行滤波运算,运算结果送DAC7625转换为模拟量。不断地重复上述过程,在DAC7625的输出端就得到滤波后的模拟信号。

为了精确地控制ADS7864的采样率,使用TMS320C5402内部的定时器控制采样时间间隔T。设置定时器的定时时间等于采样时间间隔T,并让它工作在中断方式,则定时器每过T时间间隔就向CPU发出中断请求,CPU响应中断请求,转去执行中断服务程序。在中断服务程序中读取A/D转换结果,对转换结果进行滤波运算,并将运算结果送D/A转换器转换为模拟量。因此,程序分为主程序和定时器中断服务程序两部分,流程图如图4,图5所示[3]。

3.2.3 FIR滤波源程序

FIR滤波器指令,使用MAC指令执行FIR滤波,将滤波输出放在累加器A中:

3.2.4 结果分析

利用已做好的TMS320C5402开发平台,下载在CCS中已经通过编译的数字带通滤波器的程序,该程序的实验结果波形由CCS提供的显示时频图来显示。由于实际需求只涉及数字滤波器的幅频特性,所以结果分析没有对数字滤波器的相频特性进行讨论。图6和图7分别为输入信号与输出信号的频域图。

输入信号的频率为f1=600 Hz,f2=1 000 Hz,f3=2 000 Hz,f4=3 500 Hz和f5=3 900 Hz的混合正弦信号,通过FIR数字带通滤波器后,频率为f1,f2,f4和f5的信号明显削弱,甚至几乎被滤去,而f3信号只有很少的衰减。说明这个数字带通滤波器有效地削弱了其他频率的干扰信号,提高了f3信号的质量,达到了数字滤波的目的,能实现对语音信号的去噪。

4结论

实践证明,用Matlab软件可方便地设计出FIR数字滤波器,并且修改系数方便。采用DSP实现FIR数字滤波器具有很强的适应性和可移植性,是解决数字滤波器从设计到实现的有效办法,具有一定的实际应用价值。

参考文献

[1]王永山,石晓梅,赵立臻,等.FIR数字带通滤波器的Matlab设计与DSP实现[J].车辆与动力技术,2010(3):45-48.

[2]肖蓉.FIR数字带通滤波器语音去噪的DSP实现研究[J].硅谷,2010(20):169-183.

[3]戴育良.用DSP实现FIR数字滤波器[J].台州学院学报,2006,28(6):43-46.

[4]程佩青.数字信号处理教程[M].3版.北京:清华大学出版社,2007.

[5]戴明桢,周建江.TMS320C54xDSP结构、原理及应用[M].2版.北京:北京航空航天大学出版社,2007.

FIR高阶带通滤波器 篇4

目前,Altera和Xilinx公司都提供了可塑性很强的FIR滤波器IP核,只要改动相应的参数设置,就可以应用于不同产品中。然而,在某些对性能和实时性要求较高的场合下,FIR滤波器阶数和FPGA系统工作时钟频率均较高,上述FIR滤波器IP核无法直接使用,甚至无法应用。文中以Xilinx公司Virtex IV芯片为硬件平台,针对整数倍FIR抽取滤波器的多相结构特点,提出一种高效FPGA实现结构。该结构能使用很少的乘法器资源完成高阶FIR抽取滤波器,并且工作时钟为输入数据速率,有着良好的稳定性。

1 FIR抽取滤波器的多相结构

整数D倍抽取滤波器框图如图1所示[8],对应的输入输出关系为

v(n1Τ1)=r=0Ν-1h(rΤ1)x[(n1-r1)Τ1](1)

y(n2T2)=v(n2DT1) (2)

其中,滤波器h(n1T1)的长度为N;T1和T2分别对应输入序列和输出序列时间间隔,且满足T2=DT1。根据式(1)和式(2)可以得到输出数据速率f2=1/T2为输入数据速率f1=1/T1的1/D,即f2=f1/D

利用多相分解第I型式可以将H(z1)分解为

Η(z1)=k=0D-1z1-kEk(z1D)(3)

其中,Ek(z1D)=r=0Ν/D-1h[(rD+k)Τ1](z1D)-r。图2(a)给出了式(3)所示的抽取滤波器多相结构。

为进一步利用网络结构等效性,可以将抽取与各支路滤波器进行等效变换,从而得到如图2(b)所示更为有效的多相抽取滤波结构图,其中

Ek(z2)=r=0Ν/D-1hk(rΤ2)z2-r=r=0Ν/D-1h[(rD+k)Τ1]z2-r(4)

hk(rT2)=h[(rD+k)T1]称为滤波器H(z1)的第k个多相分量。

相对图1所示的直接实现结构,图2(b)所示的高效实现结构具有如下两个特点:(1)各支路滤波器输入信号速率为原输入信号速率的1/D,从而可以使得各支路滤波器工作在较低的速率上。(2)各支路滤波器系数个数为原滤波器系数个数的1/D。因此,相比图1,图2(b)所示的滤波器结构具有更高的运算效率。

2 FIR抽取滤波器的多相结构实现

采用多相结构实现抽取滤波器的基本思想是将输入信号进行相应延迟和降采样后,分别送至D个通道进行滤波,然后将每一支路滤波后的数据相加,得到最终输出结果。如2(b)所示,降采样后进行第一个滤波通道的信号数据为…,x(0T1),x(DT1),x(2DT1),…,进入第二个滤波通道的信号数据为…,x(-1T1),x((D-1)T1),x((2D-1)T1)…,进入最后一个通道的数据为…,x((-D+1)T1),x(1T1),x((2D+1)T1),…,等等。结合上述特点,在FPGA进行实现时,可以将延迟和降采样结合在一起,采用图3(a)所示的实现结构进行抽取滤波。该结构中包括3个模块:(1)串并转换,将输入数据转换成D路并行信号。(2)多相滤波模块,将得到的D路并行信号分别进行滤波,每一路所采用的滤波器为原滤波器相应的多相分量。(3)加法模块,该模块将上述得到D路滤波后的数据相加得到最终的一路输出信号。

但随着降采样率D的增加,相应的所需要的FPGA资源也急剧增加。例如,当D=512时,图3(a)对应的实现结构需要至少512个乘法器,这在实际中难以满足要求。由于D较大时,各路滤波器工作时钟频率却很低。为了更少地使用乘法器资源,同时提高系统的工作效率,在图3(a)的基础上可以进一步优化结构。

改进后的实现结构核心思想:可以将图3(a)中D个通道分成L组,每组包括D/L通道,每一组采用分时复用方法进行实现滤波。同时,针对每一组滤波,进一步提高工作时钟频率,采用更少的乘法器实现抽取滤波器。下面将结合一个具体的设计要求给出更适合FPGA实现的多相滤波结构。该系统指标如下:输入数据速率(或系统时钟)f1=204.8 MHz;降采样率D=512;滤波器阶数N=4 096;FPGA芯片Xilinx 公司的Virtex IV芯片。

如果采用图1所示的直接型结构至少需要4 096个乘法器,采用图2(b)所示的多相滤波结构也至少需要512个乘法器,均无法满足指标要求。为此,可以采用复用方法进行实现。根据技术指标要求,原滤波器的多相分量含有N/D=8个系数,同时,每一路速率为fk=f1/D=0.4 MHz,因此,可以将D路滤波通道分成L=8组,每组D/L=64路信号复用,同时滤波时乘法器进一步复用,则每一个滤波器工作频率为fl=fk×64×8=f1=204.8 MHz。图3(b)给出了优化后的抽取滤波器多相实现结构。由于每组多相滤波模块中同时完成64路的滤波功能,同时滤波器实现过程对成绩和操作也进行复用,每一组多相滤波模块只需1个乘法器,整个系统共需8个乘法器,大幅节约了乘法器资源。实际也可以根据不同的系统指标要求,针对不同的FPGA芯片性能,设置不同的复用路数和滤波器工作频率,使整个系统资源和性能均满足要求。

3 仿真结果

为验证该结构的正确性,可分两步完成:(1)采用Matlab程序进行功能仿真。(2)将FPGA程序运行结果与Matlab定点仿真程序结果进行进一步比较,以验证FPGA程序的正确性。图4给出了系统中采用的原型滤波器的幅频响应曲线。图5给出了采用Matlab分别对图1和图3(b)所对应的直接型结构和改进的多相结构仿真结果(灰色表示图1对应的仿真结果,黑色表示图3(b)对应的仿真结果)。从图5可以看出,两者运行结果相同,从而表明文中提出的FPGA结构正确。图6给出了FPGA程序Modelsim仿真结果。图7为FPGA程序输出数据与Matlab定点仿真程序输出数据对比结果(灰色表示Matlab定点程序对应的仿真结果,黑色表示Modelsim对应的仿真结果)。从图7可以看出设计的FPGA程序正确。

4 结束语

针对高阶FIR抽取滤波器,提出了一种更适合FPGA实现的优化多相结构。相对应直接型和传统的多相结构,设计的结构充分结合FPGA自身特点和多相滤波结构特性,采用分时复用技术,大幅降低了FPGA中乘法器资源的使用,能够采用一片FPGA实现高阶滤波。目前,该FPGA模块已经应用于一个实际的数字分路系统中,程序运行正确。

参考文献

[1]朱明程,董尔令.可编程逻辑器件及应用[M].西安:西安电子科技大学出版社,2004.

[2]张有志.可编程逻辑器件(PLD)原理与应用[M].北京:中国铁道出版社,1996.

[3]ABUALSAUD W A,STUDER G L.Efficient wideband chan-nelized for software radio systems using modulated PR filter-banks[J].IEEE Transcations on Signal Processing,2004,52(10):2807-2820.

[4]任春阳,张文旭,陈强.一种高效动态信道化接收机设计[J].应用科技,2010,37(9):13-16.

[5]邵菲.基于FPGA的高速数字分路算法的研究和实现[D].西安:西安电子科技大学,2010.

[6]陈俊,汪学刚.高效实时的抽取滤波器的FPGA实现[J].电子科技大学学报,2005,34(6):755-758.

[7]刘瀛棋,金力军,陈吉锋.软件无线电中抽取滤波器的研究与FPGA实现[J].电子科技,2006,(7):38-42

FIR高阶带通滤波器 篇5

根据不同的性能需求,滤波器组中采用以FIR滤波器为主,与梳状(CIC)滤波器、半带(HB)滤波器相互搭配来实现数字中频信号的抽取与滤波。梳状滤波器和半带滤波器通常用于前级的抽取滤波,以将信号速度降低到一定程度。整个信道波形的整形则主要依靠FIR滤波器完成。随着对信号处理精度和速度的要求不断提高,设计并实现更高速度和更高阶数的FIR滤波器成为推进数字下变频继续发展所需要克服的难题。目前国内很多论文发表FIR滤波器多为11阶[2]、16阶[3]等低阶FIR滤波器,其滤波效果很难满足实际需要。本文设计一种用于数字下变频的256阶分布式FIR滤波,并针对Cyclone III系列FPGA设计了合理的实现方法。

1 分布式算法分析

FIR滤波器的表达式可以写为:

其中hk为滤波器抽头系数,xk为输入数据。式(1)中K的大小表征了FIR滤波器的阶数。如果采用通常的乘加算法来实现FIR滤波器,K阶滤波器需要使用K个嵌入式乘加单元。即使采用预加的实现方式也至少需要K/2个嵌入式乘加单元[4]。因此采用乘加算法直接实现高阶滤波器会消耗大量的嵌入式乘加单元。Cyclone III系列EP3C40F484C6N芯片上的嵌入式乘法单元仅为126个,直接使用硬件乘法器则FPGA片上资源无法满足要求。

通过改写xk可得到:

其中bkn为输入数据xk的第n位,为0或1;bk0为符号位,bk,N-1为xk的最低位(LSB)。

根据式(2),式(1)可重写为:

交换求和次序,得到:

可将式(4)分解为两个部分:

其中yS是由符号位运算得到的结果,yN是由数值位运算得到的结果。

若将式(6)中内求和部分提取出可得:

因为每个bkn只可能取值0或1,所以式(7)只有可能取2K个值。综合式(6)和式(7)可知yN的结果可以通过N个yB的值移位相加得到。因此将yB的所有取值可能存储在ROM中,通过查表后得到不同的yB值,依次移位相加可以得到yN的值。yS发生在符号位上,它与式yB共用一个ROM,但此时的运算需要用减法器完成。

2 分布式算法的变形与资源消耗推算

从式(7)可知yB可能的取值与滤波器的阶数K有关,因此256阶滤波器至少需要2256个存储单元。从式(6)可知,如果xk的位宽为N,则yN的值需要经过N次移位相加后得到。若取N为24,则计算一个滤波结果需要完成24次移位相加。如果直接在FPGA上实现分布式算法,存储器资源和运算速度均无法满足需求,需要从滤波器阶数和输入数据位宽两方面对式(4)进行变形以减少存储器资源的消耗并提高运算速度。

若N位的xk位宽划分为m段,每段L个比特,则可将式(4)变形为:

从式(8)可以看出求得Zn(n=0,1,2…,m-1)的值仅需要进行L次移位相加运算,其运算时间是未变形前的1/m。但变形后需要同时使用m个查找表来并行完成查表运算。变形后所对应的硬件实现框图如图2所示。

从图2可知式(8)所对应的实现电路主要由串并转换模块、查找表、移位相加模块以及错位相加模块组成。串并转换模块将x0~xK-1对应位串行移出组合后作为查找表的输入。查找表预先把所有可能的运算结果预存,根据输入数据查表直接求得滤波结果。移位相加模块完成查表输出的移位相加,求得表达式(8)中的Zn(n=0,1,2…,m-1)。最后根据Zn(n=0,1,2……,m-1)的权值不同,将其错位相加后可得到最终结果。

查找表的大小由滤波器阶数决定,因此可通过将将式(4)变形为多个子滤波器级联的形式。通过减少各个子滤波器的阶数来减少查找表的大小,最后将各个子滤波器的结果求和可得到最终的滤波输出。可将式(4)改写为:

从式(9)可知,可以将K阶FIR滤波器分解为t个S阶的子滤波器。其实现框图如图3所示。

由此可知每个子滤波器所需查找表的大小为2S,则划分为t个子滤波器后相比于未划分之前的所需的存储单元数量之比M0为:

结合式(8)和式(10)可得综合考虑运算速度和资源消耗后所需的储存单元数量与未做变形之前的M1为:

由此可知若将K阶滤波器划分为多个子滤波器可以让所需的储存单元成指数级降低,而为提高速度所增加存储单元只成线性增长。因此根据FIR速度和FPGA上资源的情况设计合理的实现方案到达速度和资源上的平衡。

3 FPGA实现方案及结果分析

嵌入式存储器块是现代FPGA中常见的资源,嵌入式存储器块可以配置成不同大小和不同位宽存储器。Cyclone III系列的FPGA中嵌入的存储器块为M9K,每一个嵌入式存储器块容量为9 Kbit。M9K存储器可以根据需求被配置为8 192×1、4 096×2、1 024×9、256×32等多种形式。

采用嵌入式存储器块来实现查找表,需要权衡子滤波器的阶数以及输出数据的精度。若考虑S阶滤波器中加法运算精度,则需其位宽扩展S-1位。对于系数为24位FIR滤波器而言,其子滤波器的查找表满足式(12)时可以将M9K的利用率发挥到最大。

根据M9K嵌入式存储器的配置规格可求得S=8时为近似最优解,所以可将嵌入式存储器配置为256×32的模式,则每一个子滤波器为8阶。对于256阶FIR滤波器而言需要32个子滤波器级联而成,则总共需要嵌入式存储器块32个。为提高运算速度减少移位累加次数,根据公式(8)取m=3,则总共需要96个M9K嵌入式存储器,低于EP3C40F484C6N芯片所拥有的126个M9K嵌入式存储器的总数。

根据前面所述设计RTL级代码并仿真,输入采用频率分别为50 kHz、2 MHz、8 MHz正弦混合信号仿真结果如图4。

如图4所示50 kHz和2 MHz正弦信号被保留,而8 MHz正弦信号被滤除。

经过Quartus II软件综合后资源使用和运算速度如表1所示。

由表1可知,在LE的使用率仅为37%时,RAM的使用率已达76%,还有较多的LE未被使用。可在随后的工作中进一步改进设计方案,采用超前进位加法等方法缩短关键路径,进一步提高滤波器的运算速度。

本文对分布式滤波算法进行了详细的分析和推导,通过公式变形阐述了提高电路运算速度和减小存储器资源消耗的方法。通过理论推导和对Cyclone III系列的FPGA中嵌入的存储器块的分析,设计了一种适用于EP3C40F484C6N芯片的高阶分布式FIR滤波器实现方案并进行了仿真和综合。结果表明,采用该方案可以实现高阶的FIR滤波器设计并得到很高的等效乘加运算速度。

摘要:设计了一种用于数字下变频的256阶分布式FIR滤波器。通过分析分布式FIR滤器结构给实现电路所需资源和运算速度带来的影响,确定了适用于Cyclone Ⅲ系列FPGA的实现结构。在Cyclone Ⅲ系列EP3C40F484C6N芯片上实现该算法并分析了资源消耗与电路速度。

关键词:FPGA,FIR滤波器,分布式算法

参考文献

[1]MALKI E S,SHEHATA K A,MADIAN A H.Design oftriple-mode digital down converter for WCDMA CDMA2000and GSM of software defined radio.International Conferenceon Micro electronics(ICM),2009.

[2]赵远鸿,宋学瑞.基于FPGA的数字下变频设计与实现[J].电子技术应用,2009,34(2).

[3]魏灵,杨日杰,崔旭涛.基于分布式算法的数字滤波器设计[J].仪器仪表学报,2008(10).

上一篇:城市建设单位下一篇:商业银行业务