DSP课程设计-FIR高通滤波器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FIR高通滤波器设计南京师范大学物科院
从实现方法方面考虑,将滤波器分为两种,一种是IIR滤波器,另一种是FIR 滤波器.
FIRDF的最大优点是可以实现线性相位滤波。

而IIRDF主要对幅频特性进行逼近,相频特性会存在不同程度的非线性。

我们知道,无失真传输与滤波处理的条件是,在信号的有效频谱范围内系统幅频响应应为常数,相频响应为频率的线性函数。

另外,FIR是全零点滤波器,硬件和软件实现结构简单,不用考虑稳定性问题。

所以,FIRDF是一种很重要的滤波器,在数字信号处理领域得到广泛应用。

FIRDF设计方法主要分为两类:第一类是基于逼近理想滤波器特性的方法,包括窗函数法、频率采样法和等波纹最佳逼近法;第二类是最优设计法。

其中窗函数计法的基本思想是用FIRDF逼近希望的滤波特性。

本次设计主要采用窗函数设计法,对理想滤波器进行逼近,从而实现高通滤波器的设计。

在MATLAB软件中,有一系列函数用于设计滤波器,应用时十分方便。

因此,在本次设计中,滤波器的设计主要采用MATLAB软件,编写适当的程序,得到滤波器的单位脉冲响应。

本设计对滤波器的硬件仿真主要使用CCS软件,通过对滤波器的硬件仿真,可以较为真实的看出滤波器的滤波效果。

关键字:高通、FIRDF、线性相位、Hanning窗、MATLAB、CCS
1.设计目标
产生一个多频信号,设计一个高通滤波器消除其中的低频成分,通过CCS的graph view 波形和频谱显示,并和MATLAB计算结果比较
2.设计原理
2.1数字滤波器
数字滤波器(digital filter)是由数字乘法器、加法器和延时单元组成的一种装置。

其功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。

由于电子计算机技术和大规模集成电路的发展,数字滤波器已可用计算机软件实现,也可用大规模集成数字硬件实时实现。

数字滤波器广泛用于数字信号处理中,如电视、VCD、音响等。

按照滤波电路的工作频带为其命名:设截止频率为fp,频率低于fp的信号可以通过,高于fp的信号被衰减的电路称为低通滤波器,频率高于fp的信号可以通过,低于fp的信号被衰减的电路称为高通滤波器;而带通吗,就是频率介于低频段截止频率和高频段截止频率的信号可以通过的电路。

2.2高通滤波器
高通滤波器是容许高频信号通过、但减弱(或减少)频率低于截止频率信号通过的滤波器。

对于不同滤波器而言,每个频率的信号的减弱程度不同。

它有时被称为低频剪切滤波器;在音频应用中也使用低音消除滤波器或者噪声滤波器。

高通滤波器与低通滤波器特性恰恰相反.这样的滤波器能够把高频率的声音引导至专用高音喇叭(tweeter),并阻止可能干擾或者损害喇叭的低音信号。

使用线圈而不是电容的低通滤波器也可以同时把低频信号引导至低音喇叭(woofer).高通和低通滤波器也用于数字图像处理中在频域中进行变换。

2.3高通滤波器的分析
2.3.1高通滤波器的时域分析
在时域,信号经过系统的响应y (n)体现为激励x(n)跟系统单位抽样响应h(n)的卷积和y(n)=(n)×h(n)=ΣN–1m=0h(m)x(n-m)[223]。

对于长度
为N 的FIR系统, h(n)可以看成一个长度为N 点的固定窗口,而x(n)则看
成一个队列以齐步走的方式穿过h(n)窗口,每走一步,位于窗口中的x(n)部
分的点跟h(n)的对应点的值相乘(即加权)再求和,所得结果构成此时系统的响应
值y(n),x(n)队列每走一步就得到一个响应值y(n),即y(n)是h(n)对位
于其窗口中的x(n)的加权求和。

高通滤波要求h(n)窗口具有波形锐化作用,即
利用h(n)窗口加权和使得变化快的(即高频)正弦分量保留(理想高通)或衰减幅度
小(实际高通),而变化缓慢(即低频)的正弦分量正负抵消(理想高通)或衰减幅
度大(实际高通)。


其中N 必须取奇数, )/10002sin(2.0)/1002sin(8.0)()()(21s s f n f n n x n x n x ⨯⨯+⨯⨯=+=ππ
其中: fs = 11kHz, n 为整数,即x ( n )由100Hz 的
x1(n)和1kHz 的x2(n)两种频率的信号组成。

高通滤波的目的就是要尽可能
地去掉x(n )中的低频分量x1(n) ,同时尽可能地保留x (n)中的高频分量x2(n )。

2.3.2 高通滤波器的频域分析
在频域,信号经过系统的响应y (n )的频谱Y(ej ω)体现为激励x (n )的频
谱X (ej ω)跟系统单位抽样响应h(n )的频谱H (ej ω)(即系统的频谱)的乘积Y (ej ω)=|H (ej ω)|×|X(ej ω)|×ej φH+φx ,即响应的频谱Y(ej ω)的幅值由系统频谱H (ej ω)的幅值对激励频谱X (ej ω)的幅值相乘(加权)得到,响应的频谱Y(ej ω)的幅角由系统的频谱H (ej ω)的幅角跟激励频谱X (ej ω)的幅角相加(移相)得到[122 ]。

高通滤波要求系统幅度函数|H (jf)|对需要保留的高频信号频谱加权权重较大(理想时为1) ,对需要滤除的低频信号频谱加权权重较小(理想时为0) 。

其中L 为x(n)的长度(L=100), 0≤k ≤L — 1,N 为h (n )的有值长度,m 、k
均为整数,跟数字频率k 相对应的模拟频率为f=fs ×k/L (Hz )。

h (n )在不同N 值时的频谱如图2所示(横轴单位为kHz ),当N=11时,在f=m (kHz )即f=1kHz 、2kHz 、3kHz 等处为1,而在f=(2m —0.5)(kHz )即f=1。

5kHz 、3。

5kHz 等处幅度最大。

而在f=(2m+0。

5)(kHz )即f=2.5kHz 、4。

5kHz 等处幅度最小,如图2(b );当N=5时, 在f=mfs/5处为1,即f=2.2kHz 、3。

3kHz 等处为1,在f=(4m-1)fs/10即f=3.3kHz 处幅度最大。

而在f=(4m+1)fs/10即f=5。

5kHz 处幅度最小,如图2(c );当N=21时,在f=mfs/21即f=524Hz 、1047Hz 等处为1, 在f=(4m-1)fs/42处幅度最大,而在f=(4m+1)fs/42处幅度最小,如图1
图1
用不同宽度的h(n)对x(n)的滤波在频域上表现如图2.2。

1所示,图2.2.1(a)为x(n)的频谱|X(jf)| ,从图2中可以看出x(n)中含有100Hz和1kHz两种频率
的信号,图1(b)~(d)为不同长度的h(n)对同一x(n)的滤波情况,这跟在时域中
分析的结论是一致的。

2.4FIR滤波器
从实现方法方面考虑,将滤波器分为两种,一种是IIR滤波器,另一种是FIR滤波器。

IIR滤波器保留了模拟滤波器较好的幅度特性,设计简单有效。

但这些特性是以牺牲相位特性为代价而获得的,然而现在许多数据传输,图像处理系统都越来越多的要求系统具有线性相位特性.
FIRDF的最大优点是可以实现线性相位滤波。

而IIRDF主要对幅频特性进行逼近,相频特性会存在不同程度的非线性。

我们知道,无失真传输与滤波处理的条件是,在信号的有效频谱范围内系统幅频响应应为常数,相频响应为频率的线性函数。

另外,FIR是全零点滤波器,硬件和软件实现结构简单,不用考虑稳定性问题.所以,FIRDF是一种很重要的滤波器,在数字信号处理领域得到广泛应用。

FIRDF设计方法主要分为两类:第一类是基于逼近理想滤波器特性的方法,包括窗函数法、频率采样法和等波纹最佳逼近法;第二类是最优设计法.其中窗函数计法的基本思想是用FIRDF逼近希望的滤波特性。

本次设计主要采用窗函数设计法,对理想滤波器进行逼近,从而实现高通滤波器的设计.
2.5各种窗函数参数
⎥⎦⎤⎢⎣
⎡--=⎥⎦⎤⎢⎣⎡--=)12cos()()(5.0)()12cos(15.0)(N n n R n R n R N n n N N N hn ππω
图2 汉宁窗
3. 设计流程
3.1 应用MATLAB 设计滤波器:
为了满足高通滤波的效果,设置线性相位高通FIR 的参数为:通带截止频率
rad p 2/πω=,阻带截止频率rad s 4/πω=,通带最大衰减dB p 1=α,
阻带最小衰减dB s 40=α.
由以上参数,通过查表可得,hanning 窗和haming 窗都满足条件,我们选择hanning 窗。

过渡带宽4/πωω=-=∆p s B ,hanning 窗的精确过渡带宽为B ∆=6.2π/N ,所以要求/4/N 6.2ππ≤=∆B ,解之得N=25。

输入程序:
从而得到满足条件的高通FIRDF :
h(n )=[—0。

0004,—0.0006,0。

0028,0.0071,-0.0000,-0.0185,—0.0210,0.0165,0.0624,
0。

0355,—0.1061,-0。

2898,0。

6249,—0.2898,—0.1061,0.0355,0。

0624,0。

0165,
—0.0210,0。

0185,—0。

0000,0.0071,0。

0028,—0.0006,-0.0004] 其波形如图3所示,频谱如图4,其幅频特性和相频特性如图5. 0102030-0.3-0.2
-0.1
0.1
0.2
0.3
0.4
0.5
0.6
0.7
010203000.2
0.4
0.60.811.2
1.4
图3 图4
00.10.20.30.40.50.60.70.80.91
-1500-1000
-500
0500
ωp i P h a s e (d e g r e e s )00.10.20.30.40.50.60.70.80.91
-100-50
50
ωp i
|H (e j ω|d B )
图5
3.2 用CCS 对高通滤波器进行仿真
设置输入信号fIn=sin(2πn/30)/2+cos (2πn*1。

6),使用MATLAB 运算得到
的高通FIR 滤波器进行滤波,滤去低频分量。

选择“Debug”菜单的“RUN”项,或按F12 键运行程序。

观察“fin”、“fout”窗口中时域图形;观察滤波效果。

鼠标右键单击“Input"和“Output”窗口,选择“Properties…”项,设置“Display Type”为“FFT Magitude",再单击“OK”按钮结束设置。

观察“Input”、“Output”窗口中频域图形;理解滤波效果。

4. 仿真波形
4.1 MATLAB 对高通FIRDF 的设计 0510152025-0.3-0.2-0.100.10.20.30.40.50.60.70510152025
-1-0.8
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
1
4.2 CCS 对高通FIRDF 的应用仿真
5.设计结果
由MATLAB和CCS的仿真结果可以看出,此高通FIRDF可以实现高通滤波的功能,在输入为fIn=sin(2πn/30)/2+cos(2πn*1。

6)时,输出波形中已不含w=1/30的低频分量,滤波效果良好,输出频谱中低频部分基本没有信号。

6.心得
通过这次课程设计,使我掌握了课程设计的基本思路和方法,掌握了课程设计说明书的基本撰写方法,了解了基本的设计思想和设计方法。

同时此次课程设计使我课程的基础知识和基本理论有了更深的理解和掌握,锻炼了我们综合运用所学知识的能力,并在理论分析设计、计算制图运用标准和规范查阅设计手册与资料以及计算机应用能了等方面得到了初步的训练和提高,培养了我们严谨求实的科学态度。

这次课程设计使我进一步熟悉了计算工具软件——-MATLAB.并进一步掌握了MATLAB的使用方法.对MATLAB语言的发展和特点有了更深的了解,熟悉其工作环境,在其应用方面也有了更深的了解,了解了MATLAB程序书写的一般思路及一般步骤,学会了用MATLAB解决复杂信号处理等问题的方法.
在课程设计的这段时间里,我认为收获还是很多的,不但进一步掌握了数字信号处理的基础知识及一门专业仿真软件的基本操作,还提高了自己的设计能力及动手能力,同时对于模拟滤波器来了个系统的总结。

更多的是让我看清了自己,明白了凡事需要耐心,实践是检验学习的唯一标准。

理论知识的不足在这次课设中表现的很明显。

这将有助于我今后的学习,端正自己的学习态度,从而更加努力的学习.
参考文献
1刘泉阙大顺主编. 数字信号处理原理与实现。

北京:电子工业出版社,2005
2程佩青。

数字信号处理教程(第二版). 北京:清华大学出版社,2001
3 高西全数字信号处理-原理、实现及应用. 北京:电子工业出版社,2010
附录
MATLAB程序———---生成高通FIRDF
wp=pi/2;ws=pi/4;
DB=wp-ws;
N0=ceil(6.2*pi/DB);
N=N0+mod(N0+1,2);
m=1:N;
wc=(wp+ws)/2/pi;
hn=fir1(N—1,wc,'high',hanning(N));
fw=abs(fft(hn));
figure(1)
subplot(1,2,1)
plot(m,hn);grid;
subplot(1,2,2)
plot(m,fw);grid;
figure(2)
freqz(hn)
xlabel(’\omega^pi’)
ylabel(’|H(e^j\omega|dB)')
subplot(2,1,2)
xlabel(’\omega^pi')
CCS程序
#include "DSP281x_Device。

h” // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include "f2812a.h”
#include”mat h.h"
#define FIRNUMBER 25
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF 10000
#define PI 3.1415926
float InputWave();
float FIR();
float fHn[FIRNUMBER]={-0。

0004,-0。

0006,0。

0028,0。

0071,-0。

0000,-0.0185,—0.0210,0.0165,0.0624,
0。

0355,-0.1061,-0。

2898,0.6249,—0。

2898,-0.1061,0。

0355,0。

0624,0.0165,
—0.0210,0。

0185,—0.0000,0.0071,0。

0028,—0。

0006,-0.0004
};
float fXn[FIRNUMBER]={ 0。

0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;
main(void)
{
nIn=0; nOut=0;
f2PI=2*PI;
fSignal1=0.0;
fSignal2=PI*0。

1;
fStepSignal1=2*PI/30;
fStepSignal2=2*PI*1.6;
while (1 )
{
fInput=InputWave();
fIn[nIn]=fInput;
nIn++;nIn%=256;
fOutput=FIR();
fOut[nOut]=fOutput;
nOut++;
if ( nOut〉=256 )

nOut=0; /* 请在此句上设置软件断点*/
}
}

float InputWave()

for (i=FIRNUMBER-1;i〉0;i-- )
fXn[i]=fXn[i—1];
fXn[0]=sin(fSignal1)/2.0+cos(fSignal2);
fSignal1+=fStepSignal1;
if (fSignal1〉=f2PI )fSignal1—=f2PI;
fSignal2+=fStepSignal2;
if ( fSignal2>=f2PI ) fSignal2-=f2PI;
return(fXn[0]);
}
float FIR()

float fSum;
fSum=0;
for (i=0;i〈FIRNUMBER;i++ ){
fSum+=(fXn[i]*fHn[i]);

return(fSum);
}。

相关文档
最新文档