四川大学锦城学院本科毕业论文 基于FPGA的FIR数字滤波器设计
通常情况下一般数字滤波器的N阶FIR数字滤波器基于输入信号x(n)的表达式为:
n?1i?0y(n)??h(i)x(n?i) (2)
这个公式给我们了一个非常明了的直接型网络结构,该结构表现出N个乘法器,每次采样y(n)的内容是n次乘法和n-1次加法,然后做乘累加之和。如图2-1所示:
图2-1 FIR滤波器直接型网络结构
从DSP的介绍中,第一类线性相位对h(n)的约束条件:
H(e)??h(n)e?j?n?Hg(?)e?j?? (3)
j?n?0N?1?h(n)(cos?n?jsin?n)?Hn?0N?1g(?)(cos???jsin??) (4)
由公式(3),(4)我们可以推出:
?h(n)cos?nsin????h(n)sin?ncos?? (5)
n?0n?0N?1N?1移相并利用三角公式化简得到:
?h(n)sin[?(n??)]?0 (6)
n?0N?1从数字信号处理学科中知道函数h(n)sin?(n??)关于求和区间的中心(N-1)/2奇对称,于是我们要求?和h(n)满足如下条件:
N?1?????(?)????? 其中对应的有? (7) 2??h(n)?h(N?1?n)??0?n?N?15
四川大学锦城学院本科毕业论文 基于FPGA的FIR数字滤波器设计
图2-2 线性相位FIR滤波器结构
若h(n)呈现对称特性,即此具有线性相位的滤波器是FIR数字滤波器。滤波器的基础网络结构可以相互进行转换。
在前面本文已经讨论过, FPGA的实现中将对各种方法进行比较,找出最优设计方式。从而达到减少资源占有和提高系统作业速度的目的,更好的体现实时性的数字滤波器优势。
2.1.3数字滤波器的设计原理
在数字信号处理技术的研究中,一般是使用的三种设计方法:窗函数法,FDATool直接设计法,程序编译法。本文首先使用窗函数和Matlab软件共同进行设计。
随着软件技术的不断发展,Matlab软件能给设计者带来的数字信号处理工作已经非常的完善和多样了,设计者可以利用Matlab软件进行数字滤波器的设计和仿真,而且还可以用这款软件进行设计的优化。数字滤波器的一般设计步骤如下: 1.指标的确定
做任何工程或者设计,设计者都必须要有一个期望的指标用来限制设计范围。在很多的实际应用中,设计者常常都是使用数字滤波器做选频的工作。因此,指标的形式一半在频域中给出相位响应和幅度。相位响应的指标形式,一半是指系统在通频带中药有线性相位。幅度指标:绝对指标,它给出对幅度响应函数的要求,一般用于FIR滤波器的设计。相对指标,以分贝值的形式给出具体限制。 2.逼近目标
设计者做高频的时候大概都有一个模式,就是首先得到技术指标,然后利用我们的技术和工具让我们的产品去逼近这个指标。同理我们首先建立以个目标的数字滤波器模型。一般情况下都是采用理想的数字滤波器模型,然后去逼近我们想要的目标数字滤波器参数。
3.计算机仿真和性能优化分析
6
四川大学锦城学院本科毕业论文 基于FPGA的FIR数字滤波器设计
在工作中我们发现通过(1)、(2)之后本文会得到以差分、系统函数或者冲击响应这三种方式描述的滤波器。这个时候设计者可以利用计算进行仿真,在系统中分析技术指标和滤波结果是否是希望得到的结果。
图2-3各种理想数字滤波器的幅度频率响应
2.1.4 FIR数字滤波器的理论计算方式与参数转换思想
在理论上掌握了FIR数字滤波器的基本原理之后,本文需要对设计思想进行一个多方位的论证和尝试。首先设计者设计滤波器要有一个硬性的指标,这个指标可以是直接给出最基本的数据,也有多重表现形式。于是我例举两种特殊的指标形式然后加以解决设计。然后我们分别用2种方式来设计不同指标的滤波器。接下来我首先用程序的方式来实现滤波器: 1.逼近法转换与思想
使用remez函数设计FIR低通滤波器 设计滤波器,使逼近低通滤波特性|Hd(e)|。 |Hd(ej?j??1)|=??0??0????/4 ???5?/16????要求通带波纹?p?3dB,阻带衰减?s?60dB,并用最小阶数实现。
绘出设计的FIR数字滤波幅频特性曲线,检验设计指标。 这个指标我们可以以如下计算方法来得出详细指标:
7
四川大学锦城学院本科毕业论文 基于FPGA的FIR数字滤波器设计
j?从给出的低通滤波特性|Hd(e)|。我们可以看出设计参数f=[1/4,5/16],m=[1,0]; dev的计算根据公式:Rp=-20log1010于是有Rp=20log[1?dev(1)/1?dev(1)],As??20log(dev(2)) 所以dev(1),dev(2)可以被表示出来。 2.逼近法程序描述与思想
有了这几个参数我们现在就可以根据已经设定好的格式来调用函数remezord和remez函数了,于是可得如下程序。 clear;close all
fc=1/4;fs=5/16; %输入给定指标 Rp=3;As=60;Fs=2;
f=[fc,fs];m=[1,0]; %计算remezord函数所需参数f,m,dev dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)];
[N,fo,mo,W]=remezord(f,m,dev,Fs); %确定remez函数所需参数 hn=remez(N,fo,mo,W); %调用remez函数进行设计 hw=fft(hn,512); %求设计出的滤波器频率特性 w=[0:511] *2/512;
plot(w,20*log10(abs(hw)));grid; %画对数幅频特性图 axis([0,max(w)/2,-90,5]); xlabel('w/pi');ylabel('Magnitude(dB)')
line([0,0.4],[-3,-3]); %画线检验设计结果 line([1/4,1/4],[-90,5]);line([5/16,5/16],[-90,5]); 程序结束。 3.仿真图像与结果
用以上的程序我们可以得到在Matlab中的许多参数和图像,从而进一步分析我们的设计。首先引入程序输出的幅频特性图:(如图2-4)
?1??1/1??2?>0
8
四川大学锦城学院本科毕业论文 基于FPGA的FIR数字滤波器设计
图2-4在Matlab中的程序
图2-5程序输出的幅频特性
9