基于DSP的无限冲击响应滤波器IIR系统设计.docx
《基于DSP的无限冲击响应滤波器IIR系统设计.docx》由会员分享,可在线阅读,更多相关《基于DSP的无限冲击响应滤波器IIR系统设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于DSP的无限冲击响应滤波器IIR系统设计
《现代信号处理》
课程设计
基于DSP的无限冲击响应滤波器(IIR)系统设计
第1章绪论
1.1设计背景
在信号处理中,滤波占有十分重要的地位。
数字滤波是数字信号处理的基本方法。
数字滤波与模拟滤波相比有很多优点,它除了可避免模拟滤波器固有的电压漂移、温度漂移和噪声等问题外,还能满足滤波器对幅度和相位的严格要求。
DSP(数字信号处理器)与一般的微处理器相比有很大的区别,它所特有的系统结构、指令集合、数据流程方式为解决复杂的数字信号处理问题提供了便利,本设计选用TMS320C54X作为DSP处理芯片,通过对其编程来实现FIR滤波器。
对数字滤波器而言,从实现方法上,有IIR滤波器和有限冲激响应(FIR)滤波器之分。
IIR系统的优点是实现的阶数低,对于实现相同要求的数字滤波器,FIR滤波器的阶数要比IIR滤波器的阶数高5~10倍,IIR滤波器的设计相对简单,可以由对应的模拟滤波器转换而来。
FIR系统的优点是采用递归结构,可以得到严格的线性相位,运算的误差也较小,FIR的设计比IIR要灵活。
结合IIR滤波器和FIR滤波器的优缺点,由于在APF谐波检测中的低通数字滤波器是用于通过直流,滤掉交流,对相位的要求不高,而且希望运算尽量小,因此选用IIR滤波器。
1.2设计要求
利用C语言在CCS环境中编写一个IIR滤波器程序,并能利用已设计好的滤波器对常用信号进行滤波处理。
1.3设计思路简介
在TMS320C54x系统开发环境CCS(CodeComposerStudio)下对IIR滤波器的DSP实现原理进行讨论。
利用C语言设计相应的滤波器,通过实验仿真,从输入信号和输出信号的时域和频域曲线可看出在DSP上实现的IIR滤波器能完成预定的滤波任务。
第2章系统开发平台与环境
1.1CCS开发环境
CCS提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。
CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。
CCS支持如下图1.1所示的开发周期的所有阶段。
图1.1
2.2SEED-DEC2812开发实验箱
SEED-DECxxxx系列嵌入式DSP开发板本着模块化、总线型、开放式、系列化的设计思想,采用统一的系统结构、模块结构和机械结构,以多种典型DSP处理器构成具有标准总线和相同物理尺寸的高性能嵌入式DSP开发板。
SEED-DEC2812嵌入式DSP开发板原理框图如图1.2所示:
图1.2
第3章IIR滤波器设计过程
3.1IIR滤波器设计总框图
IIR滤波器设计总框图如图3.1所示
图3.1IIR滤波器设计总框图
3.2IIR滤波器设计的原理
IIR滤波器差分方程一般形式为
IIR滤波器具有无限长的单位脉冲响应,在结构上存在反馈回路,是递归型的。
也就是说,IIR滤波器的输出不仅与输入有关,而且与过去的输出有关,滤波器的输出y(n)不仅依赖于当前输入x(n)和过去输入x(n-1)、x(n-2)、⋯、x(n-N+1),而且依赖于过去输出y(n-1)、y(n-2)、⋯、y(n-N+1)。
相对于FIR滤波器,设计一个满足幅度响应条件的IIR滤波器需要的滤波器阶数较少。
IIR滤波器的基本结构有三种,即直接型、级联型和并联型。
在设计IIR滤波器时,经常借助于模拟滤波器成熟的理论和方法进行。
设计过程为:
按照要求设计一个模拟低通滤波器,得到模拟低通滤波器的传输函数Ha(s),再按照一定的转换关系将Ha(s)转换成数字低通滤波器的系统函数H(z)。
这种设计要求用H(z)的频率响应逼近Ha(s),且保留Ha(s)的稳定性和因果性,故该设计方法实际上是从s平面到z平面的变换。
实际中实现s平面到z平面变换的常用方法是双线性变换法,即1
其中,C为常数。
设Ω代表模拟角频率,f是模拟频率,ω代表数字角频率,同时,将s=jΩ,z=ejω代入上式,可分析出Ω和ω之间的关系为
即Ω与ω之间成非线性的正切关系。
正是这种非线性关系,消除了频率混叠现象,同样,也是由于这种非线性关系,直接影响数字滤波器的频率响应和模拟滤波器频率响应的逼近程度。
如果模拟滤波器的频谱具有片断常数特性,则转换到z平面数字滤波器仍具有片断常数特性,主要是特性转折点频率值与模拟滤波器特性转折点的频率值呈非线性关系。
故双线性变换法适合片断常数特性的滤波器的设计。
实际中,一般设计滤波器通带和阻带均要求是片断常数,相应地,双线性变换法得到了广泛的应用。
3.3 IIR滤波器的设计方法
利用双线性变换法设计IIR的数字低通滤波器的步骤为:
(1)确定数字滤波器的技术指标,包括通带截止频率、通带最大衰减、阻带截止频率、阻带最小衰减。
(2)将数字低通滤波器的技术指标转换为模拟低通滤波器的技术指标,主要是利用双线性变换将边界频率(通带/阻带截止频率)变换为模拟边界频率。
(3)设计模拟低通滤波器,通常可查现成的表格。
(4)将模拟低通滤波器从s平面转换到z平面,得到数字低通滤波器系统函数。
(5)在DSP上用语言实现滤波器功能。
第4章系统软件设计
4.1程序流程图
程序流程图如图4.1所示
图4.1主程序流程图
图4.2AD采样子程序
图4.2IIR滤波子程序
4.2程序源代码
4.2.1MY_IIR.c代码:
#include"DSP281x_Device.h"//DSP281xHeaderfileIncludeFile
#include"DSP281x_Examples.h"//DSP281xExamplesIncludeFile
#include"DSP281x_Device.h"//DSP281xHeaderfileIncludeFile
#include"DSP281x_Examples.h"//DSP281xExamplesIncludeFile
#include"f2812a.h"
#include"math.h"
#defineIIRNUMBER2
#defineSIGNAL1F1000
#defineSIGNAL2F4500
#defineSAMPLEF10000
//Prototypestatementsforfunctionsfoundwithinthisfile.
interruptvoidadc_isr(void);
//Globalvariablesusedinthisexample:
Uint16LoopCount;
Uint16ConversionCount;
Uint16Voltage1[1024];
Uint16Voltage2[1024];
floatInputWave();
floatIIR();
floatfBn[IIRNUMBER]={0.0,0.7757};
floatfAn[IIRNUMBER]={0.1122,0.1122};
floatfXn[IIRNUMBER]={0.0};
floatfYn[IIRNUMBER]={0.0};
floatfInput,fOutput;
//floatfSignal1,fSignal2;
//floatfStepSignal1,fStepSignal2;
//floatf2PI;
inti;
floatfIn[256],fOut[256];
intnIn,nOut;
main()
{
nIn=0;nOut=0;
InitSysCtrl();//初始化cpu
DINT;//关中断
InitPieCtrl();//初始化pie寄存器
IER=0x0000;//禁止所有的中断
IFR=0x0000;
InitPieVectTable();//初始化pie中断向量表
//Interruptsthatareusedinthisexamplearere-mappedto
//ISRfunctionsfoundwithinthisfile.
EALLOW;//ThisisneededtowritetoEALLOWprotectedregister
PieVectTable.ADCINT=&adc_isr;
EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters
AdcRegs.ADCTRL1.bit.RESET=1;//ResettheADCmodule
asm("RPT#10||NOP");//Mustwait12-cycles(worst-case)forADCresettotakeeffect
AdcRegs.ADCTRL3.all=0x00C8;//firstpower-uprefandbandgapcircuits
AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3;//Powerupbandgap/referencecircuitry
AdcRegs.ADCTRL3.bit.ADCPWDN=1;//PoweruprestofADC
//EnableADCINTinPIE
PieCtrlRegs.PIEIER1.bit.INTx6=1;
IER|=M_INT1;//EnableCPUInterrupt1
EINT;//EnableGlobalinterruptINTM
ERTM;//EnableGlobalrealtimeinterruptDBGM
LoopCount=0;
ConversionCount=0;
//ConfigureADC
AdcRegs.ADCMAXCONV.all=0x0001;//Setup2conv'sonSEQ1
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;//SetupADCINA3as1stSEQ1conv.
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;//SetupADCINA2as2ndSEQ1conv.
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;//EnableEVASOCtostartSEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;//EnableSEQ1interrupt(everyEOS)
//ConfigureEVA
//AssumesEVAClockisalreadyenabledinInitSysCtrl();
EvaRegs.T1CMPR=0x0080;//SetupT1comparevalue
EvaRegs.T1PR=0x10;//Setupperiodregister
EvaRegs.GPTCONA.bit.T1TOADC=1;//EnableEVASOCinEVA
EvaRegs.T1CON.all=0x1042;//Enabletimer1compare(upcountmode)
//WaitforADCinterrupt
while
(1)
{
LoopCount++;
}
}
interruptvoidadc_isr(void)
{
Voltage1[ConversionCount]=AdcRegs.ADCRESULT0>>4;
Voltage2[ConversionCount]=AdcRegs.ADCRESULT1>>4;
//If40conversionshavebeenlogged,startover
if(ConversionCount==1023)
{
ConversionCount=0;
}
elsefInput=InputWave();
fIn[nIn]=fInput;
nIn++;nIn%=512;
fOutput=IIR();
fOut[nOut]=fOutput;
nOut++;
if(nOut>=512)
{
nOut=0;
}
elseConversionCount++;
//ReinitializefornextADCsequence
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//ResetSEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;//ClearINTSEQ1bit
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;//AcknowledgeinterrupttoPIE
return;
}
floatInputWave()
{
for(i=IIRNUMBER-1;i>0;i--)
{
fXn[i]=fXn[i-1];
fYn[i]=fYn[i-1];
}
fXn[0]=Voltage1[ConversionCount]+Voltage2[ConversionCount]/6.0;
fYn[0]=0.0;
//fSignal1+=fStepSignal1;
//if(fSignal1>=f2PI)fSignal1-=f2PI;
//fSignal2+=fStepSignal2;
//if(fSignal2>=f2PI)fSignal2-=f2PI;
return(fXn[0]);
}
floatIIR()
{
floatfSum;
fSum=0.0;
for(i=0;i{
fSum+=(fXn[i]*fAn[i]);
fSum+=(fYn[i]*fBn[i]);
}
return(fSum);
}
第5章系统仿真
5.1仿真设置
1.在程序my_iir.c中有注释“/*请在此句上设置软件断点*/”的语句上设置软件断点。
2.在GraphPropertyDialog中设置StartAddress和DisplayType如图5.1、图5.2
图5.1
图5.2
同样的设置频域观察窗口
3.设置实验板输入信号的参数,再运行程序得到仿真图。
5.2仿真图
输入为标准正弦波与高频干扰余弦波混叠信号,标准正弦波的频率为6400Hz,干扰余弦波频率为10kHz。
滤波前的波形和频谱如图5.3,滤波后的波形和频谱如图5.4
图5.3
图5.4
第6章总结
IIR滤波器的设计是数字信号处理技术的基础,也是DSP芯片的重要组成部分。
IIR滤波器性能的好坏直接影响着DSP的运行速度和精度,对现代电子技术的发展起决定性作用,IIR滤波器的设计在以后的一段相当长的时间里将持续主导DSP,而DSP随着电子技术的不断发展,应用领域愈来愈广泛。
课程设计为我们提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼我们的分析解决实际问题的能力。
提高我们适应实际环境和实践编程的能力。
经过这次的课程设计我对这门课有了更深的了解。
也更深刻知道了实践是很重要的,我们应该掌握更多的知识,也让掌握知识更加坚固,在理论的基础上多实践。
参考文献
[1]程佩青.数字信号处理教程[M].北京:
清华大学出版社,1999年
[2]孙宗瀛,谢鸿林.TMS320C5xDSP原理设计与应用[M].北京:
清华大学出版社,2002年
[3]乔瑞萍,崔涛,张芳娟.TMS320C54xDSP原理及应用[M].西安:
西安电子科技大学出版社,2005年
[4]张雄伟.DSP芯片的原理与开发应用(第三版)[M].北京:
电子工业出版社,2003年
[5]郑红.TMS320C54XDSP应用系统设计[M].北京:
北京航空航天大学出版社,2002年