原创 基于FPGA的数字滤波设计—FIR设计1

2013-10-18 09:51 3073 20 21 分类: FPGA/CPLD 文集: 基于FPGA的数字滤波设计

基于FPGA的数字滤波设计—FIR设计1

3.1 FIR阶数和系数的确定

       按照1.3节给出的滤波器指标,利用MATLABFDATOOL工具,采用窗函数法设计出的FIR滤波器需要700多阶,如图3.1所示。评估FPGA资源,不能够完成滤波的主要原因是无法保存输入的历史数据。即使参数做微调也只能将阶数降到300阶。究其FIR阶数居高不下的原因主要在于,60Hz-64Hz的过渡带相对于采用频率1KHz来说太窄,即滤波器的滚降过快。Fstop=64Hz就是由此20131011224548734001.png公式计算得来。从1024序列中抽取出128的序列,那么M=8,计算得fc<64Hz。所以为了保证不出现混叠,Fstop=64Hz

       经过多次评估得出,在2C8器件基础上对72个通道进行FIR滤波,最多只能运算85阶,为了便于计算采用64FIR滤波。

20131011224552476002.jpg

3.1 按照指标设计的FIR滤波器模型

考虑到脑电信号一般低于30Hz,那么我们将通带频率定为20Hz。同时我们考虑到,混叠只要对带内信号不产生影响,混叠也可以产生,那么我们可以计算出Fstop=128-60=68。这样优化的方向就是,使得滤波器的过渡带趋于平坦,我们知道,过渡带直接影响到FIR的阶数。

形成了新的指标如下:

       原采样率       Fs=1024Hz

通带              Fpass=20Hz              保证30Hz衰减不低于3dB

截止频率       Fstop=68Hz

利用MATLABFADTool工具生成FIR模型如3.2图所示。37Hz左右才衰减3dB,保证率30Hz不衰减3dB

20131011224558510003.jpg

3.2设计的64FIR滤波器模型

具体设置参数如下:

选择:低通(lowpass)、FIR、基于窗口设计(window)、kaiser窗口设计。

设置:采样频率Fs=1024,通带Fpass=20,阻带Fstop=68

              通带衰减Apass=0.2,阻带衰减Astop=50dB

这些参数中,FpassFstopAstop等都可以修改,主要目的就是为了使得FIR的阶数为64阶(由于FPGA硬件资源限制,本系统中只能设计64阶的FIR)。当然在保证系统需求的前提下,可以尽量降低FIR的阶数。

       FIR阶数确定后,就可以生成FIR系数了,利用FDATOOL如图3.3的系数生成工具,可以生成各种不同类型的系数。

20131011224604838004.jpg20131011224608350005.jpg

3.3 FDATOOL系数生成工具

此系统中FPGA采用了16位有符号乘法器结构,所以在此生成了Signed 16-bit integer类型的系数。

3.2 基于FPGA72通道FIR滤波器设计

3.2.1  FIR参数和FPGA资源之间的对应关系

1、  FIR的阶数决定了FPGA乘法单元使用次数,阶数的高低影响滤波的效果(频响)。

2、  FIR计算的位宽选择:8bits 16bits32bits。影响精度,即滤波效果(小信号)。

3、  运算速度,决定了FPGA的主时钟,即影响功耗。

4、  通道数量,每个ADC器件采集的24路信号轮流滤波,那么滤波过程中需要保存每个通道的阶数个历史数据,影响的存储单元容量的大小。

3.2.2 FIR实现结构:1MAC对应一个ADC器件

利用Quartus II软件中的MegaWizard Plug-In Manager工具生成的MAC单元结构如图3.4所示。设置datab为有符号输入(输入FIR系数),dataa为无符号输入(输入信号序列)。aclr0为异步清零。

20131011224613371006.jpg

3.4 MAC 乘累加单元   

       利用此MAC单元设计出的64FIR滤波器结构如图3.5所示。ADC器件对24路通道进行采样,并将采集到的16bits位宽的数据存入RAM中。在RAM中划分24个通道对应的不同的地址范围。RAM中保存的每个通道输入的历史数据个数有FIR阶数决定,即为64个。在ADC完成当前通道当前采样值后,MAC单元开始从RAM中调入数据、从ROM中调入FIR系数,进行FIR最基本的乘累加运算,运算次数由阶数决定。系数采用16bis无符号整型表示,所以在计算完成后需要做归一化处理。

20131011224618634007.png

3.5  64FIR滤波器结构
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1605975 2013-11-10 22:00

才发现这么好的一个专栏,谢谢博主分享
相关推荐阅读
用户442508 2013-10-18 09:56
[博客大赛]Verilog-FPGA硬件电路设计之二——if语句和case语句的区别
Verilog-FPGA硬件电路设计之二——if语句和case语句的区别 一个if语句中嵌套了case语句的例子,可以很好的看出if语句和case语句的区别。 module case_in...
用户442508 2013-10-18 09:56
[博客大赛]Verilog-FPGA硬件电路设计之三——关于迟滞信号
  Verilog-FPGA硬件电路设计之三——关于迟滞信号 在条件选择语句中,由于信号的处理存在时间上的差异,从前级传递到下级的数据就存在到达时间先后的问题,因此为了提高电路的速度,对迟...
用户442508 2013-10-18 09:56
[博客大赛]Verilog-FPGA硬件电路设计四——最大公约数功能仿真和时序仿真区别
综合软件:QuartusII 12.1 仿真软件:Modelsim-Altera   1、输出done无寄存器,直接从组合逻辑电路输出 1.1功能仿真   1.2时序...
用户442508 2013-10-18 09:55
Verilog-FPGA硬件电路设计之五——脉动矩阵计算FIR
脉动阵列(Systolic Array)计算有限冲激响应(FIR) 综合软件:QuartusII 12.1 仿真软件:Modelsim-Altera FIR:有限脉冲响应滤波器。有限说...
用户442508 2013-10-18 09:55
Verilog FPGA硬件电路设计之六——脉动矩阵计算矩阵乘法
脉动阵列(Systolic Array)计算矩阵乘法(Array Multiplication) 下一个目标是实现流水线输出,提升硬件资源的利用率。 脉动阵列(Systoli...
用户442508 2013-10-18 09:54
Verilog-FPGA硬件电路设计之七——矩阵乘法流水线结构
二维流水线结构矩阵乘法(Array Multiplication) 上一篇文中建立了矩阵乘法运算的数据路径,从仿真结构中可以看出整个计算方案的可行性,但是存在一个问题,就是硬件运算单...
我要评论
1
20
关闭 站长推荐上一条 /3 下一条