DSP大作业.docx_第1页
DSP大作业.docx_第2页
DSP大作业.docx_第3页
DSP大作业.docx_第4页
DSP大作业.docx_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

无限冲激响应滤波器(IIR)算法及实现姓名:徐旭日学号:20130700332专业班级:电子信息工程(2)班指导老师:王忠勇日期:2016/6/2摘要:21世纪是数字化的时代,随着信息处理技术的飞速发展,数字信号处理技术逐渐发展成为一门主流技术。相对于模拟滤波器,数字滤波器没有漂移,能够处理低频信号,频率特性可做成非常接近于理想的特性,且精度可以达到很高,容易集成等。这些优势决定数字滤波器的应用越来越广泛。数字滤波器是数字信号处理中最重要的组成部分之一,被广泛应用于语音图像处理、数字通信、谱分析、模式识别、自动控制等领域。本课题通过软件设计IIR数字滤波器,并对所设计的滤波器进行仿真:应用DSP集成开发环境CCS调试程序,用TMS320F2812实现IIR数字滤波。具体工作包括:对IIR数字滤波器的基本理论进行分析和探讨。应用DSP集成开发环境调试程序,用TMS320F2812来实现IIR数字滤波。通过硬件液晶显示模块验证试验结果,并对相关问题进行分析。关键词:数字滤波器;DSP;TMS320F2812;无限冲激响应滤波器(IIR)。引言: 随着数字化飞速发展,数字信号处理技术受到了人们的广泛关注,其理论及算法随着计算机技术和微电子技术的发展得到飞速发展,被广泛应用于语音图像处理、数字通信、谱分析、模式识别、自动控制等领域。数字信号处理由于运算速度快,具有可编程的特性和接口灵活的特点,使得它在许多电子产品的研制、开发和应用中,发挥着重要的作用。采用DSP芯片来实现数字信号处理系统是当前发展的趋势。 在数字信号处理中,数字滤波占有极其重要的地位。滤波是信号处理中的一个重要概念。滤波分经典滤波和现代滤波。经典滤波的概念,是根据傅里叶分析和变换提出的一个工程概念。根据高等数学理论,任何一个满足一定条件的信号,都可以被看成是由无限个正弦波叠加而成。换句话说,就是工程信号是不同频率的正弦波线性叠加而成的,组成信号的不同频率的正弦波叫做信号的频率成分或叫做谐波成分。只允许一定频率范围内的信号成分正常通过,而阻止另一部分频率成分通过的电路,叫做经典滤波器或滤波电路。数字滤波是语音和图像处理、模式识别、谱分析等应用中的一个基本处理算法。在许多信号处理应用中用数字滤波器替代模拟滤波器具有许多优势。数字滤波器容易实现不同幅度和相位频率特性指标。用DSP芯片实现数字滤波除具有稳定性好、精度高、不受环境影响外,还具有灵活性好的特点。用可编程DSP芯片实现数字滤波可通过修改滤波器的参数十分方便的改变滤波器的特性。原理:1 无限冲激响应数字滤波器的基础理论。利用模拟滤波器成熟的理论及其设计方法来设计IIR数字低通滤波器是常用的方法。设计过程是:按照数字滤波器技术指标要求一个过渡模拟低通滤波器,再按照一定的转换关系将转换成数字低通滤波器函数H(z)。由此可见,设计的关键问题就是要找到这种关系,将s平面的转换成z平面上的H(z)。 将系统函数从s平面转换到z平面的方法有多种,但工程上常用的是脉冲响应不变法和双线性变换法。在课题中我们采用双线性变换法设计IIR数字低通滤波器。 通过采用非线性频率压缩的方法,将整个模拟频率轴压缩到/T之间,再用Z=转换到z平面上。设,s=j,经过非线性频率压缩后用,=j表示,这里用正切变换实现频率压缩: 实现了s平面上整个虚轴完全压缩到平面上虚轴的/T之间的转换。由上式得到: j=代人s=j,=j,得到:再通过z=从平面转换到Z平面得到 ; 上面两式即称为双线性变换。2模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。3数字滤波器系数的确定方法。4根据要求设计低通 IIR 滤波器要求:低通巴特沃斯滤波器在其通带边缘 1kHz 处的增益为-3dB,12kHz 处的阻带衰减为 30dB,采样频率 25kHz。设计: 确定数字低通滤波器的技术指标:通带边缘频率 fp1Hz、待求阻带边缘频率 fs1Hz 和待求阻带衰减-20logsdB。模拟边缘频率为:fp1=1000Hz,fs1=12000Hz阻带边缘衰减为:-20logs=30dB将数字低通滤波器的技术指标转换成响应的模拟低通滤波器的技术指标。 用=2f/fs 把由 Hz 表示的待求边缘频率转换成弧度表示的数字频率,得到p1 和 s1。p1=2fp1/fs=21000/25000=0.08弧度 s1=2fs1/fs=212000/25000=0.96弧度-计算预扭曲模拟频率以避免双线性变换带来的失真。 由 w=2fs tan(/2)求得 wp1 和 ws1,单位为弧度/秒。wp1=2fs tan(p1/2)=6316.5 弧度/秒ws1=2fs tan (s1/2)=794727.2 弧度/秒-由已给定的阻带衰减-20logs 确定阻带边缘增益s。 因为-20logs=30,所以logs=-30/20,s=0.03162计算所需滤波器的阶数:n=0.714因此,一阶巴特沃斯滤波器的传输函数为:H(s)=wp1/(s+wp1)=6316.5/(s+6316.5)由双线性变换定义s=2fs(z-1)/(z+1)得到数字滤波器的传输函数为:H(z)=因此差分方程为:yn=0.7757yn-1+0.1122xn+0.1122xn-1软件流程图:一、软件实现1、 实验准备设置软件仿真模式启动CCS2、 打开工程、浏览程序。3、 编译并下载程序4、 打开窗口:*选择菜单ViewGraph-Time/Frequency,进行如下设置出现窗口如下: 选择菜单View-Graph-Time/Frequency,进行如下设置:出现窗口:5、清除显示:在以上打开的窗口中单击鼠标右键,选择弹出菜单中“Clear Display”功能。6、设置断点:在程序iir.c中有注释“/*请在此句上设置软件断点*/”的语句上设置软件断点7、运行并观察结果 (1)选择“Debug”菜单中的“RUN”项,或按F5键运行程序。 (2)观察“IIR”窗口中时域图形:观察滤波效果。实验结果: 本次调试过程中出现了不少问题,但在辅导老师的指导下顺利完成IIR数字滤波实验。软件调试结果如下图示:输入波形为一个低频率的正弦波与一个高频率的余弦波叠加而成。如图:通过观察频域和时域图,得知:输入信号为低频和高频叠加的信号,输入波形中的低频波形通过了滤波器,而高频部分则被衰减,从而达到了滤波的效果。但是可以看出滤波后还是存在微弱的高频部分,也就是高频部分没有完全虑去,这从时域图中也可以看出。二、IIR算法硬件实现原理:1、AD原理(上面已论述)2、模数转换工作过程 模数转换模块接到启动转换信号后,按照设置进行相应通道的数据采样转换。 经过一个采样时间的延迟后,将采样结果放入AD数据寄存器中保存。 等待下一个启动信号。3、模数转换的程序控制 模数转换相对于计算机来说是一个比较缓慢的过程。一般采用中断方式启动转换或保存结果,这样在CPU忙于其他工作时可以少占用处理时间。设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择合适的触发转换的手段,也要能及时的保存结果。4、 混频波形的产生将接收到的两路AD采样信号进行相加,并对结果的幅度进行限制,从而产生混合后的输出波形。实验中采用了同相位混频的方法,也可修改程序完成异相混频法。5、IIR滤波器工作原理及参数的计算参见实验七6、说明:本程序在AD中断中对AD进行连续采样。由于需要进行实时混频,所以交替转换通道0(ADCIN0)和通道1(ADCIN1)。混频的波形通过IIR滤波器,得到输出波形。DSP开发板框图:硬件框图:一个DSP系统可分为最小系统设计和外围接口设计,DSP在必要的工作环境下才能正常工作。DSP最小系统包括复位、时钟和电源电路。程序流程图:实验准备: (1)连接实验设备 (2)准备信号源进行AD输入用信号线连接实验箱左侧信号源的波形输出A端口和“A/D输入”模块的“ADCINO”插座注意插头要插牢、到底。这样,信号源波形输出A的输出波形即可送到ICETEKF2812A板的AD输入通道0。用同样方法连接实验箱左侧信号源的输出B端口和“A/D输入”的“ADCIN1”相连。设置波形输出A: 向内侧按波形频率选择按钮,直到标有正弦波的指示灯亮。 上下调节波形频率选择按钮,直到标有1001KHZ的指示灯亮。 调节幅值调整旋钮,将波形输出A的幅值调到适当位置。设置波形输出B: 向内侧按波形频率选择按钮,直到标有正弦波的指示灯亮。 上下调节波形频率选择按钮,直到标有1K-10KHZ的指示灯亮。 调节幅值调整旋钮,将波形输出A的幅值调到适当位置。注意:由于模数输入信号未经任何转换就进入 DSP,所以必须保证输入的模拟信号的幅度在 0-3V 之间。必须用示波器检测信号范围,保证最小值 0V 最大值 3 V,否则容易损坏DSP 芯片的模数采集模块。2、设置 Code Composer Studio 2.21 在硬件仿真(Emulator)方式下运行 请参看本书第三部分、第一章、四、2。3、启动 Code Composer Studio 2.21选择菜单 Debug-Reset CPU。4、打开工程文件5、编译、下载程序,选择菜单 Debug-Go Main,使程序运行到 main 函数入口位置。6、观察窗口-打开源程序 IIR.c,查看源代码。7、运行程序观察结果按 CTR 控制板的 K6 键,实现滤波显示,K7 键实现混频显示,按 K8 实现键 A、B 两信号源分屏显示。8、观察动态效果,调节信号源输出,观察滤波器输出改变信号源输入的波形、频率参数,观察动态效果。9、退出 CCS。程序算法分析:低通滤波器系数可滤掉1k以上的波形,保留1k一下的波形Float HnIIRNUMBER= 0.126,0.085,0.000,-0.103,-0.189,-0.216,-0.155,-0.000,0.233,0.504,0.756,0.935,1.000,0.935,0.756,0.504,0.233,-0.000,-0.155,-0.216,-0.189,-0.103, 0.000, 0.085, 0.126这里是滤波器窗函数的参数,窗函数的长度为25,所以这是25个参数。另外这里以1KHz作为分界点,如果需要滤出别的频率,就需要再计算参数了。float IIR() float fSum;fSum=0;for ( j=0;jFIRNUMBER;j+ )fSum+=(fXnj*fHnj);return(fSum);这个是构造的IIR滤波器函数使用for循环输入波形与窗函数频域相乘,达到滤波效果。硬件调试结果如下图(手机拍照):按K8键:A、B两信号源分别显示按K7键:混频显示 按K6键:滤波显示根据实验要求,改变信号源的频率:这里高频信号为2KHz以上,所以需要选择相应的窗函数及滤波器。按K8键:A、B两信号源分别显示按K7键:混频显示按K6键:滤波显示结果分析:K8图显示的是高频和低频两个信号的波形,K7是他们叠加在一起的波形,K6则是通过低通滤波器后的波形。通过无限冲激响应滤波器(IIR)算法的硬件实现与软件实现IIR算法相对比,所设计的IIR滤波器收到较好的效果,完成了设计要求。这是用手机拍的图片,不是很清晰,但大致可以看得出来效果。另外如果将软件实现结果与硬件实现结果相比较,基本是差不多的。 其实看起来实现起来简单,但还是费了些功夫的,首先是对信号发生器的调试,接着是对程序的修改,程序里面配有各种滤波器,所以需要找出我们需要的那个滤出1KHz以上的滤波器,由于我们对程序设计不是很专业,所以经过了多次修改调试,才对程序的大致框架有了一定的了解,最终才好不容易把程序调出来了。学完DSP原理与应用课程的理论和实验后,自己的心得体会: 不觉间DSP原理与应用这门课程已经结束了,连实验也都上完了。授课老师给了我很深的印象还有影响。感觉老是上课很负责,也很会讲课,总能带着我们把握课程的主题框架,很多抽象难懂的知识老是都是很生动的给我们讲解,老是真的是用心良苦还记得第一节课老是就讲了DSP这门课是我们专业的中心,把很多的课程都联系在了一起,现在觉得特别的有道理。正是因为DSP涉及多门课程的相关知识,这就需要我们在课程的学习过程中,需要经常回顾一些基础理论知识,经过认真思考与分析,达到解决问题的目的。在这个过程中,老是不断地给我们布置了很多课外作业,这些作业难度很大,所以我们花费了很多心思来做这些题目,我们不仅复习了以前的一些知识,并通过理论联系实际,对相关知识点有了更深层次的认识。从课前复习相关实验内容、原理到课题论文的完成,此过程我收获特别多。比如老师让我们用中断设计一个定时器,本来我们之前在微机原理和单片机都学过中断产生定时,但这一次才是应用,一到应用我们就发现很难了,在这期间对中断定时有了更加深刻的理解,还有C语言设计FFT算法的题目,本来学过了FFT算法,但要自己编程就很困难了。老师这是在教我们要钻研知识,将知识学的活起来。另外,在实验过程中,我们也深有体会。带实验课的老师也很负责,每次都是按座位点名,确保每个人都按时到。DSP开发板比单片机开发板复杂多了,用起来相对难些,实验过程中遇到很多问题老师都给我们耐心的解决了。要感谢指导老师们,这些实验是在他们认真负责的态度下完成的。他们在我们实验过程中给我们在软件操作和相关理论、算法上给了我们耐心的指导。这门课结束了,确是我觉得大学所有课程中最精彩最重要的一门课程的,无论从课本还是从老师身上都学到了很多。课本交给我许多DSP的理论知识,实验交给我如何简单的使用DSP开发板进行实验,而老师教给了我做事严谨认真、勤于实践的工作态度,做什么事情都是开头难,坚持学习的认真态度,这是非常重要的。 程序附录:/*本实验可以滤掉650hz以后的信号,根据提供的滤波器参数,可以设置滤掉其他频率的波形*/#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include File#include f2812a.h#include LCD.h#include math.h#include filter.h#define ADCNUMBER 256 / 定义指示灯寄存器地址和寄存器类型#define LBDS (*(unsigned int *)0xc0000)/ Prototype statements for functions found within this errupt void adc_isr(void);void Delay(unsigned int nDelay);struct struLCDGraph struGraph,struGraph1;unsigned int nScreenBuffer30*128;/ Global variables used in this example:Uint16 LoopCount;Uint16 ConversionCount;/Uint16 Voltage11024;/Uint16 Voltage21024;Uint16 Voltage_1,Voltage_2,flage=0;Uint16 nGraphBuf1ADCNUMBER,nGraphBuf2ADCNUMBER;int nGraphBuf3ADCNUMBER;int ci=0,keyflage,nAD;Uint16 nMixing1024;/ 液晶 -#define CTRLED (*(unsigned int *)0x108004) / port8004#define MCTRKEY (*(unsigned int *)0x108005) / port8005#define CTRCLKEY (*(unsigned int *)0x108006) / port8006#define CTRSTATUS (*(unsigned int *)0x108000) /port8000#define pi 3.1415926int nModeAD;Uint16 ad1,ad2;/*fir参数*/#define PI 3.1415926/#define FIRNUMBER 25/*低通滤波器系数可滤掉1k以上的波形,保留1k一下的波形*/*float fHnFIRNUMBER= 0.126,0.085,0.000,-0.103,-0.189,-0.216,-0.155,-0.000,0.233,0.504,0.756,0.935,1.000,0.935,0.756, 0.504,0.233,-0.000,-0.155,-0.216,-0.189,-0.103, 0.000, 0.085, 0.126;*/*高通滤波器系数可滤掉1k以下的波形,保留1k以上的波形*/*float fLnFIRNUMBER=-0.031,-0.021,-0.000,0.025, 0.047, 0.054, 0.038, 0.000,-0.058,-0.126,-0.189,-0.233, 1.000,-0.233,-0.189,-0.126,-0.058, 0.000, 0.038, 0.054, 0.047, 0.025,-0.000,-0.021,-0.031;*/*float fXnFIRNUMBER= 0.0 ;float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;float f2PI;float fInADCNUMBER,fOutADCNUMBER;int nIn,nOut;float FIR();float FIR1();float InputWave();*/int j=0,a=0;/*低通滤波器系数,大约在2k以上的声音被彻低率率调*/#define FIRNUMBER 64long fHnFIRNUMBER= -26, -26, -24, -18, -8, 9, 33, 61, 91, 117, 132, 129, 99, 41, -48, -160, -284, -404, -496, -538, -507, -382, -154, 180, 610, 1115, 1662, 2212, 2723, 3151, 3459, 3620, 3620, 3459, 3151, 2723, 2212, 1662, 1115, 610, 180, -154, -382, -507, -538, -496, -404, -284, -160, -48, 41, 99, 129, 132, 117, 91, 61, 33, 9, -8, -18, -24, -26, -26;/int fXnFIRNUMBER= 0 ;int fInput,fOutput;int fIn256;/,fOut256;#define FIR_ORDER 50 /* Filter Order */* Create an Instance of FIRFILT_GEN module and place the object in firfilt section */#pragma DATA_SECTION(fir, firfilt);FIR16 fir= FIR16_DEFAULTS;/* Define the Delay buffer for the 50th order filterfilter and place it in firldb section */#pragma DATA_SECTION(dbuffer,firldb);long dbuffer(FIR_ORDER+2)/2;/* Define Constant Co-efficient Array and place the .econst/.const section innon-volatile memory */const long coeff(FIR_ORDER+2)/2= FIR16_LPF50;void init(FIR16_handle);void calc(FIR16_handle);FIR16 lpf, hpf;FIR16 lpf = FIR16_DEFAULTS;FIR16 hpf = FIR16_DEFAULTS;main() int j,uWork,uWork1; unsigned int * pWork; InitSysCtrl();/初始化cpu /InitPll(0x5); DINT;/关中断 LCDTurnOff(); LCDSetScreenBuffer(nScreenBuffer); for ( uWork=0,pWork=nScreenBuffer;uWork30*128;uWork+,pWork+ )(*pWork)=0; LCDSetDelay(0); LCDTurnOn();/ 打开显示 LCDCLS();/ 清除显示内存 InitXintf(); InitPieCtrl();/初始化pie寄存器 IER = 0x0000;/禁止所有的中断 IFR = 0x0000; InitPieVectTable();/初始化pie中断向量表 / Interrupts that are used in this example are re-mapped to/ ISR functions found within this file. EALLOW; / This is needed to write to EALLOW protected register PieVectTable.ADCINT = &adc_isr; EDIS; / This is needed to disable write to EALLOW protected registers AdcRegs.ADCTRL1.bit.RESET = 1;/ Reset the ADC moduleasm( RPT #10 | NOP);/ Must wait 12-cycles (worst-case) for ADC reset to take effect AdcRegs.ADCTRL3.all = 0x00C8;/ first power-up ref and bandgap circuits AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;/ Power up bandgap/reference circuitry AdcRegs.ADCTRL3.bit.ADCPWDN = 1;/ Power up rest of ADC/ Enable ADCINT in PIE PieCtrlRegs.PIEIER1.bit.INTx6 = 1; IER |= M_INT1; / Enable CPU Interrupt 1 EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM LoopCount = 0; ConversionCount = 0; / Configure ADC AdcRegs.ADCMAXCONV.all = 0x0001; / Setup 2 convs on SEQ1 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; / Setup ADCINA3 as 1st SEQ1 conv. AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; / Setup ADCINA2 as 2nd SEQ1 conv. AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; / Enable EVASOC to start SEQ1 AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; / Enable SEQ1 interrupt (every EOS)/ Configure EVA/ Assumes EVA Clock is already enabled in InitSysCtrl(); EvaRegs.T1CMPR = 0x0080; / Setup T1 compare value EvaRegs.T1PR = 0x5000; / Setup period register EvaRegs.GPTCONA.bit.T1TOADC = 1; / Enable EVASOC in EVA EvaRegs.T1CON.all = 0x1042; / Enable timer 1 compare (upcount mode) /struGraph.uLineMode=LINEMODE; /LCDDrawGraph(struGraph); keyflage=0; lpf.dbuffer_ptr=dbuffer; /lpf.coeff_ptr=fHn; lpf.coeff_ptr=(long *)coeff; lpf.order=FIR_ORDER; lpf.init(&lpf); /* fir.dbuffer_ptr=dbuffer; fir.coeff_ptr=fHn; fir.order=FIR_ORDER; fir.init(&fir);*/ Wait for ADC interrupt for(;) if(flage=1) flage=0; LCDSetScreenBuffer(nScreenBuffer); LCDCLS();/ 清除显示内存*/ if(keyflage=0) struGraph.pData=nGraphBuf2; struGraph.uDataMode=DATAUINTMODE; struGraph.uDataLength=256; struGraph.uMaxValue=2048; struGraph.uWindowX0=0; struGraph.uWindowY0=0; struGraph.uWindowX1=240; struGraph.uWindowY1=128; struGraph.nOriginX=0; struGraph.nOriginY=0; struGraph.uLineMode=LINEMODE; LCDGraph(&struGraph); / struGraph.uLineMode=LINEMODE; struGraph.pData=nGraphBuf1; struGraph.uDataMode=DATAUINTMODE; struGraph.uDataLength=256; struGraph.uMaxValue=1024; struGraph.uWindowX0=0; struGraph.uWindowY0=0; struGraph.uWindowX1=240; struGraph.uWindowY1=128; struGraph.nOriginX=0; struGraph.nOriginY=64; struGraph.uLineMode=LINEMODE; LCDGraph(&struGraph); for ( j=0;j20;j+ )_Delay(414); LCDSetScreenBuffer(nScreenBuffer); LCDCLS();/ 清除显示内存 if(keyflage=1) struGraph.pData=nMixing; struGraph.uDataMode=DATAUINTMODE; struGraph.uDataLength=256; struGraph.uMaxValue=2500; struGraph.uWindowX0=0; struGraph.uWindowY0=0; struGraph.uWindowX1=240; struGraph.uWindowY1=128; struGraph.nOriginX=0; struGraph.nOriginY=0; struGraph.uLineMode=LINEMODE; LCDGraph(&struGraph); for ( j=0;j20;j+ )_Delay(414); LCDSetScreenBuffer(nScreenBuffer); LCDCLS(); if(keyflage=2) struGraph.pData=nGraphBuf3; struGraph.uDataMode=DATAUINTMODE; struGraph.uDataLength=220; struGraph.uMaxValue=2500; struGraph.uWindowX0=0; st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论