FIR有限冲击滤波系统设计.docx
《FIR有限冲击滤波系统设计.docx》由会员分享,可在线阅读,更多相关《FIR有限冲击滤波系统设计.docx(22页珍藏版)》请在冰点文库上搜索。
FIR有限冲击滤波系统设计
《现代信号处理课程设计》
课程设计报告
设计题目:
FIR有限冲击滤波系统设计
目录
第1章绪论..............................................1
1.1设计背景.............................................1
1.2设计内容及目的....................................1
1.3设计思路简介.........................................2
第2章系统开发平台与环境.................................2
1.1CCS开发环境.........................................2
2.2ICETEK-F2812–A评估板..............................2
第3章FIR滤波器设计过程...............................4
3.1FIR滤波器设计总框图.................................4
3.2FIR滤波器设计的原理及其方法..........................5
第4章系统软件设计.......................................8
4.1程序流程图...........................................8
4.2程序源代码...........................................9
第5章系统仿真..........................................13
5.1仿真设置............................................13
5.2启动CCS...........................................14
5.3仿真图..............................................19
第6章总结..............................................19
参考文献.................................................20
第1章绪论
1.1设计背景
从广义上讲,任何对某些频率(相对于其他频率来说)进行修正的系统称为滤波器。
严格地讲,对输入信号通过一定的处理得到输出信号,这个处理通常是提取信号中某频率范围内的信号成分,把这种处理的过程称为滤波。
实现滤波处理的运算电路或设备称为滤波器。
在许多科学技术领域中,广泛应用线性滤波和频谱分析对信号进行加工处理,模拟滤波是处理连续信号,数字滤波则是处理离散信号,而后者是在前者的基础上发展起来的。
我们知道,无源或有源模拟滤波器是分立元件构成的线性网络,他们的性能可以用线性微分方程来描述,而数字滤波器是个离散线性系统,要用差分方程来描述,并以离散变换方法来分析。
这些方程组可以用专用的或通用的数字计算机进行数字运算来实现。
因此,数字滤波器的滤波过程是一个计算过程,它将输入信号的序列数字按照预定的要求转换成输出数列。
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:
无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
由于FIR滤波器的最大优点是可以实现线性相位滤波,信号无失真与滤波处理的条件是在信号的有效频谱范围内系统幅频响应为常数,相频响应为频率的线性函数(即具有线性相位)。
在数字通信和图像传输处理等应用场合都要求滤波器具有线性相位特性。
另外FIR滤波器是全零点滤波器,硬件和软件实现结构简单,不用考虑稳定性问题,在数字信号处理领域得到广泛应用。
FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。
本次设计主要利用窗函数法设计FIR滤波器,并在DSP上实现滤波。
1.2设计内容及目的
设计内容主要是在给定滤波器的性能指标下,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应;然后用自己设计的滤波器对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。
设计的目的为:
1、掌握用窗函数法设计FIR数字滤波器的原理和方法
2、熟悉线性相位FIR数字滤波器特性
3、了解各种窗函数对滤波器特性的影响
1.3设计思路简介
在TMS320C54x系统开发环境CCS(CodeComposerStudio)下对FIR滤波器的DSP实现原理进行讨论。
利用C语言设计相应的滤波器,通过实验仿真,从输入信号和输出信号的时域和频域曲线可看出在DSP上实现的FIR滤波器能完成预定的滤波任务。
第2章系统开发平台与环境
1.1CCS开发环境
CCS提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。
CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。
CCS支持如下图1.1所示的开发周期的所有阶段。
图2.1CSS开发周期阶段
2.2ICETEK-F2812–A评估板
ICETEK–F2812-A评估板的内存映射
ICETEK–F2812-A评估板(以下简称评估板)的内存映射与TMS320F2812A芯片不同的是,所有的寄存器和存储器全部映射在XINTFZONE2译码的空间内,占TMS320F2812A芯片的80000h-0FFFFFh地址单元中。
因此,如果您需要使用DSP芯片的管脚外扩硬件设备的话,请避免使用这部分地址资源。
对于这部分地址单元,基本上分为两个部分,从80000h到0BFFFFh共256K的地址单元分配给片外扩展存储器。
这里有一个声明,一般来说,在出厂时,板上所连接的存储器一般为64K的存储器,因此这部分的实际有效内存是80000h-8FFFFh。
为了特殊的需求,这里最多可以扩展到256K的实际存储器。
从C0000h到FFFFFh是外围其他设备的寄存器接口,这里包含一个12位的模数转换器DAC7528,以及四位的状态显示数码管和四位可读入数字量的开关。
ICETEK–F2812-A评估板实物图和原理框图分别如图1.2、1.3所示。
图2.2ICETEK–F2812-A评估板实物图
图2.3ICETEK–F2812-A评估板原理框图
第3章FIR滤波器设计过程
3.1FIR滤波器设计总框图
FIR滤波器设计总框图如图3.1所示
图3.1FIR滤波器设计总框图
3.2FIR滤波器设计的原理及其方法
FIR数字滤波器设计原理是利用数字的方法,按预定的要求对信号进行变换,把输入的信号变成一定的输出信号,从而达到改变信号频谱的目的。
FIR滤波器(有限冲激响应滤波器)的差分方程是:
在数字滤波中,我们主要讨论离散时间序列。
如图3.2所示。
设输入序列为
,离散或数字滤波器对单位抽样序列
的响应为
。
因
在时域离散信号和系统中所起的作用相当于单位冲激函数在时域连续信号和系统中所起的作用。
图3.2数字滤波器原理
数字滤波器的序列
将是这两个序列的离散卷积,即
(1.4)
同样,两个序列卷积的z变换等于个自z变换的乘积,即
(1.5)
用
代入上式,其中T为抽样周期,则得到
(1.6)
式中
和
分别为数字滤波器输入序列和输出序列的频谱,而
为单位抽样序列响应
的频谱。
由此可见,输入序列的频谱
经过滤波后,变为
,按照
的特点和我们处理信号的目的,选取适当的
使的滤波后的
符合我们的要求。
其直接型结构如图3.3所示:
图3.3数字滤波器结构
本系统主要采用窗函数法设计FIR滤波器,窗函数设计法的基本思想的用FIR滤波器逼近希望的滤波特性。
设希望逼近的滤波器的频率响应函数为H(e),其单位脉冲响应用H(n)表示,为了设计简单方便,通常选择H(e)为具有片段常数特性的理想滤波器。
因此H(n)是无限长非因果序列,不能直接作为FIR滤波器的单位脉冲响应。
窗函数设计法就是截取H(n)为有限长的一段因果序列,并用合适的窗函数进行加权作为FIR滤波器的单位脉冲响应h(n)。
截取的长度和加权函数的类型都直接影响逼近精度(滤波器指标)。
常用的加权函数即窗函数有矩形窗(RectangleWindow)、三角窗(BartlettWindow)、汉宁窗(HanningWindow)、哈明窗(Ham—mingWindow)、布莱克曼窗(BlackmanWindow)和凯塞窗(KaiserWindow)。
其设计步骤如下:
(1)给定所要求的理想频率响应函数Hd(ejw);
(2)对理想频率响应函数进行反傅里叶变换,则得到系统单位脉冲响应为:
hd(n)=IDFTFT[Hd(ejw)];
(3)根据过渡带及阻带衰减最小的要求查表,可选定窗ω(n)的形状及除数,N的大小,一般N的值要做几次试探才能最终确定;
(4)得到所设计的FIR滤波器的单位抽样响应(该响应逼近理想):
h(n)=hd(n)ω(n),n=0,1…,N-1;
(5)求H(ejw)=DTFT[h(n)],检查是否满足设计要求,若不满足,则需重新按照上述步骤设计。
主要设计参数如下:
-过渡带宽度=阻带边缘频率-通带边缘频率=22-10=12kHz
-采样频率:
f1=通带边缘频率+(过渡带宽度)/2=10000+12000/2=16kHz
Ω1=2πf1/fs=0.64π
-理想低通滤波器脉冲响应:
h1[n]=sin(nΩ1)/n/π=sin(0.64πn)/n/π
-根据要求,选择布莱克曼窗,窗函数长度为:
N=5.98fs/过渡带宽度=5.98*50/12=24.9
-选择N=25,窗函数为:
w[n]=0.42+0.5cos(2πn/24)+0.8cos(4πn/24)
-滤波器脉冲响应为:
h[n]=h1[n]w[n]|n|≤12
h[n]=0|n|>12
-根据上面计算,各式计算出h[n],然后将脉冲响应值移位为因果序列。
-完成的滤波器的差分方程为:
y[n]=-0.001x[n-2]-0.002x[n-3]-0.002x[n-4]+0.01x[n-5]
-0.009x[n-6]-0.018x[n-7]-0.049x[n-8]-0.02x[n-9]
+0.11x[n-10]+0.28x[n-11]+0.64x[n-12]
+0.28x[n-13]-0.11x[n-14]-0.02x[n-15]
+0.049x[n-16]-0.018x[n-17]-0.009x[n-18]+0.01x[n-19]
-0.002x[n-20]-0.002x[n-21]+0.001x[n-22]
第4章系统软件设计
4.1程序流程图
图4.1程序流程图
4.2程序源代码
4.2.1FILTER.c代码:
#include"DSP28_Device.h"
#include"filter.h"
#include"ext_inf.h"
unsignedintDataLong=1024;
unsignedinti,j;
unsignedintk=0;
unsignedshortAd_data[2048];
shortAd_data_signed[2048];
shortfilter_result[1024];
unsignedintconvcount=0;
volatileunsignedintadconvover=0;
interruptvoidISRTimer2(void);
interruptvoidad(void);
voidmain(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER=0x0000;
IFR=0x0000;
/*初始化PIE中断*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
//初始化cputimer
InitCpuTimers();
/*设置中断服务程序入口地址*/
EALLOW;
PieVectTable.TINT2=&ISRTimer2;
PieVectTable.ADCINT=&ad;
EDIS;
/*开中断*/
IER|=M_INT1;//ADC中断
EINT;
ERTM;
/*设置CPU*/
DINT;
ConfigCpuTimer(&CpuTimer2,150,22);
StartCpuTimer2();
/*开中断*/
IER|=M_INT14;
EINT;
InitAdc();
for(;;){
if(adconvover==1){
/*fir滤波处理*/
for(i=0;iAd_data_signed[i]=(short)(Ad_data[i]-0x5300);fir_filter(Ad_data_signed,hfir,filter_result,ORDER_FIR,DataLong,ROUND_FIR);
adconvover=0;
}
}
}
interruptvoidad(void)
{
IFR=0x0000;
PieCtrl.PIEACK.all=0xffff;
if(adconvover==0){
Ad_data[convcount]=AdcRegs.RESULT0;
convcount++;
}
if(convcount==DataLong){
convcount=0;
adconvover=1;//接满标志
}
}
interruptvoidISRTimer2(void)
{
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
}
4.2.2FIR_filter.c代码:
//constshortx[]:
输入信号的缓冲数组,short类型
//constshorth[]:
滤波器的系数数组,short类型
//shorty[]:
输出信号的缓冲数组,short类型
//n:
滤波器长度
//m:
输入信号的长度,即x[]的长度
//s:
生成整型的滤波器系数时使用的移位数目
voidfir_filter(constshortx[],constshorth[],shorty[],intn,intm,ints)
{
inti,j;
longy0;
longacc;
_nassert(m>=16);
_nassert(n>=16);
for(j=0;j{
acc=0;
for(i=0;i{
if(i+j>=m)
break;
else
{
y0=(long)x[i+j]*(long)h[i];
acc=acc+y0;
}
}
*y++=(short)(acc>>s);
}
}
第5章系统仿真
5.1仿真设置
1.单击桌面上图标:
进入CCS设置窗口。
2.在出现的窗口中按标号顺序进行如下设置:
图5.1删除掉原有的驱动设置
3.在出现的窗口中按标号顺序进行如下设置:
图5.2选择软件仿真F2812芯片驱动
此时CCS已经被设置成Simulator方式(软件仿真TMS320F2812器件的方式)。
5.2启动CCS
1.启动Simulator方式(请确认已按照上面说明设置为软仿真方式了。
)设置好软仿真驱动后,双击桌面上图标:
2.启动Emulator方式
(1)首先将实验箱电源关闭。
连接实验箱的外接电源线。
(2)检查ICETEK-5100USB仿真器的黑色JTAG插头是否正确连接到ICETEK–F2812-A评估板的P5插头上。
注:
仿真器的插头中有一个孔加入了封针,与P5插头上的缺针位置应重合,保证不会插错。
(3)检查是否已经用电源连接线连接了ICETEK–F2812-A评估板上的POW1插座和实验箱底板上+5V电源插座。
(4)检查其他连线是否符合实验要求。
检查实验箱上三个拨动开关位置是否符合实验要求。
(5)打开实验箱上电源开关(位于实验箱底板左上角),注意开关边上红色指示灯点亮。
ICETEK–F2812-A评估板上指示灯VCC点亮。
如果打开了ICETEK-CTR的电源开关,ICETEK-CTR板上指示灯POWER点亮。
如果打开了信号源电源开关,相应开关边的指示灯点亮。
(6)用实验箱附带的USB信号线连接ICETEK-5100USB仿真器和PC机后面的USB插座,注意ICETEK-5100USB仿真器上指示灯Power和Run灯点亮。
(7)双击桌面上仿真器初始化图标:
如果出现下面提示窗口,表示初始化成功,按一下空格键进入下一步操作。
图5.3仿真器复位
如果窗口中没有出现“按任意键继续…”,请关闭窗口,关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第
(2)步重试。
如果窗口中出现“Theadapterreturnedanerror.”,并提示“按任意键继续…”,表示初始化失败,请关闭窗口重试两三次,如果仍然不能初始化则关闭实验箱电源,再将USB电缆从仿真器上拔出,返回第
(2)步重试。
⑻双击桌面上图标:
启动CCS3.3。
⑼如果进入CCS提示错误,先选“Abort”,然后用“emurst”初始化仿真器,如提示出错,可多做几次。
如仍然出错,拔掉仿真器上USB接头(白色方形),按一下ICETEK–F2812-A评估板上S1复位按钮,连接USB接头,再做“快捷方式xdsrstusb”。
⑽如果遇到反复不能连接或复位仿真器、进入CCS报错,请打开Windows的“任务管理”,在“进程”卡片上的“映像名称”栏中查找是否有“cc_app.exe”,将它结束再试。
⑾与ccs的以前版本(例如ccs2.21版本)不同的是,仅仅进入ccs3.3软件环境后,CCS软件和2812芯片还无法连接在一起,如下图显示:
图5.4未连接到2812芯片显示
⑿此时要按照如下图所示操作,才能把ccs软件和2812芯片连接在一起,然后才能对2812芯片进行控制。
图5.5设置连接2812芯片
⒀如下图所示,我们就可以确认CCS软件和2812芯片连接在一起了。
图5.6成功连接上2812板卡
3.打开工程,浏览程序:
工程目录为C:
\ICETEK\F2812\DSP281x_examples\lab0501-FIR
4.编译并下载程序
5.打开观察窗口
*选择菜单View->Graph->Time/Frequency…,进行如下设置:
图5.7观察窗口1设置
*选择菜单View->Graph->Time/Frequency…,进行如下设置:
图5.8观察窗口2设置
在弹出的图形窗口中单击鼠标右键,选择“ClearDisplay”。
6.在有注释“/*请在此句上设置软件断点*/”的语句设置软件断点。
7.运行并观察结果
⑴选择“Debug”菜单的“RUN”项,或按F12键运行程序。
⑵观察“fin”、“fout”窗口中时域图形;观察滤波效果。
⑶鼠标右键单击“Input”和“Output”窗口,选择“Properties…”项,设置“DisplayType”
为“FFTMagitude”,再单击“OK”按钮结束设置。
⑷观察“Input”、“Output”窗口中频域图形;理解滤波效果。
5.2仿真图
输入波形为一个低频率的正弦波与一个高频的正弦波叠加而成。
通过观察频域和时域图,得知:
输入波形中的低频波形通过了滤波器,而高频部分则大部分被滤除。
图5.9结果显示
第6章总结
FIR滤波器在数字信号处理领域有着广泛的应用,易于移植使用,具有较强的实用性与灵活性。
也是进行数字信号处理分析的通用方法,根据性能指标在Matlab中设计FIR低通滤波器,并在TMS320VC5402上成功实现了FIR滤波,通过实验仿真结果表明FIR滤波器准确度高、稳定性好,设计结果满足性能指标要求。
通过本次课程设计,我不仅加深了对现代信号处理课程的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑的。
这次课程设计不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,因此可以针对性地学习和巩固自己的不懂和已学的知识。
通过本次课设,我学到了更多的关于DSP方面的许多专业知识,其实如何有效和快速的找到资料也是本次课程设计给我的启发,利用好图书馆和网络,是资源的到最好的利用。
与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系,也扩展了自己的思维。
课程设计过程中遇到不懂的难题可以向老师或者是同学请教,这样不仅可以让自己学到更多,同时讨论过程中使得和你讨论的同学双方都能有对DSP更深的认识。
这是一个通过思考、发问、自己解惑并动手、提高的过程。
我会在以后的学习中不断学习,积累经验,完善自己。
参考文献
[1]程佩青.数字信号处理教程[M].北京:
清华大学出版社,1999年
[2]孙宗瀛,谢鸿林.TMS320C5xDSP原理设计与应用[M].北京:
清华大学出版社,2002年
[3]乔瑞萍,崔涛,张芳娟.TMS320C54xDSP原理及应用[M].西安:
西安电子科技大学出版社,2005年
[4]张雄伟.DSP芯片的原理与开发应用(第三版)[M].北京:
电子工业出版社,2003年
[5]郑红.TMS320C54XDSP应用系统设计[M].北京:
北京航空航天大学出版社,2002年