




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DSP原理及应用课程小论文 学 院: 专业班级: 学生姓名: 学 号: 论文题目:_基于TMS320DSP的FIR滤波器的设计与实现 完成日期: 2014 年 6 月 10 日 指导教师评语: _ _ _ _ 成绩(五级记分制):_ _ 指导教师(签字):_ _ 一、引言二、 设计目的三、设计要求四、 总体设计4.1 CCS环境下FIR滤波器的设计及软件仿真4.1.1 程序流程图4.1.2 在CCS集成开发环境下新建FIR滤波器工程4.1.3观察滤波前后的信号的时域波形及FFT Magnitude波形4.1.4 程序清单4.2 对实时采样信号进行滤波的FIR滤波器的实现4.2.1 程序清单4.2.2 测试效果4.2.3 SCI串行数据传输五、 总结六、参考文献一、引言随着信息和数字技术的发展,数字信号处理已成为当今极其重要的学科和技术领域之一。在数字信号处理的基本方法中,通常会涉及到变换、滤波、频谱分析、调制解调和编码解码等处理。其中,滤波是应用非常广泛的一个环节,数字滤波器的理论与相关设计也一直都是人们研究的重点之一。FIR滤波器的是非递归的,稳定性好,精度高;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特征。因此,它在高保真的信号处理,如数字音频、图像处理、数据传输和生物医学等领域得到广泛应用。数字滤波器根据其冲激响应函数的时域特性,可分为无限长冲激响应(I-IR)滤波器和有限长冲激响应(FIR )滤波器。FIR滤波器具有严格的相位特性,同时系统函数的极点固定在原点上,因而该类型的滤波器是稳定的。在数字信号处理中,滤波占有极其重要的地位。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点2、 设计目的 (1)掌握用窗函数法设计FIR滤波器的原理及方法。(2) 掌握TMS320F2812 DSP处理器开发的程序框架结构,学习驱动TMS320F2812 DSP处理器程序编写并能使其正常工作。(3) 掌握使用TMS320F2812 DSP处理器实现FIR数字低通滤波器的设计方法。三、设计要求1、在CCS集成开发环境下,利用第1步得到的滤波器参数,利用窗函数法设计FIR滤波器程序,观察输入信号及滤波后得到的输出信号的时域波形;2、利用TMS320F2812的ADC片内外设的外围电路实时采集的混频信号数据,使用1个51阶的FIR低通滤波器,在CCS中设计FIR滤波器程序实现滤波,观察相关波形及滤波效果,通过SCI接口将数据传送到计算机上;4、 总体设计4.1 CCS环境下FIR滤波器的设计及软件仿真4.1.1 程序流程图 初始化 输入低通滤波器各频率参数 构建滤波器频域特性波形参数 使用FDATool提取滤波器参数或用FIR滤波器计算程序计算得到滤波器参数 构建FIR滤波器进行滤波 无限循环4.1.2 在CCS集成开发环境下新建FIR滤波器工程()实验准备 设置软件仿真模式,启动CCS。()建立工程 建立一个文件夹,存放在D:FIR,将D:课程设计FIR滤波器Fir源程序文件夹下的工程全部复制到D:FIR,在CCS中打开D:FIRfirfir.pjt工程,就会得到如图6所示的工程界面。FIR工程示例()编译生成fir.out文件,通过File-Load Program装载该文件。4.1.3观察滤波前后的信号的时域波形及FFT Magnitude波形 (4)设置时域观察窗口选择菜单ViewGraphTime/Frequency,进行如图所示设置。输入数据时域波形和滤波后输出波形观察()设置频域观察窗口,选择菜ViewGraphTime/Frequency , (6)运行并观察结果。 选择Debug菜单的Run项,或按F5键运行程序。观察到的图形如图所示。4.1.4 程序清单 /#include DSP281x_Device.h / DSP281x Headerfile Include File/#include DSP281x_Examples.h / DSP281x Examples Include File/#include f2812a.h#includemath.h#define FIRNUMBER 25/#define SIGNAL1F 1000/#define SIGNAL2F 4500/#define SAMPLEF 10000#define PI 3.1415926float InputWave();float FIR();float fHnFIRNUMBER= 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,-0.018,0.049,-0.02,-0.11,0.28,0.64,0.28,-0.11,-0.02,0.049,-0.018,-0.009,0.01,-0.002,-0.002,0.001,0.0,0.0 ;float fXnFIRNUMBER= 0.0 ;float fInput,fOutput;float fSignal1,fSignal2;float fStepSignal1,fStepSignal2;float f2PI;int i;float fIn256,fOut256;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.4;while ( 1 )fInput=InputWave();fInnIn=fInput;nIn+; nIn%=256;fOutput=FIR();fOutnOut=fOutput;nOut+;if ( nOut=256 )nOut=0; float InputWave()for ( i=FIRNUMBER-1;i0;i- )fXni=fXni-1;fXn0=sin(fSignal1)+cos(fSignal2)/6.0;fSignal1+=fStepSignal1; if ( fSignal1=f2PI )fSignal1-=f2PI;fSignal2+=fStepSignal2;if ( fSignal2=f2PI )fSignal2-=f2PI;return(fXn0);float FIR()float fSum;fSum=0;for ( i=0;iFIRNUMBER;i+ )fSum+=(fXni*fHni);return(fSum);4.2 对实时采样信号进行滤波的FIR滤波器的实现4.2.1 程序清单#include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include File#include #define pi 3.1415927int px256;int py256;double npass,h51, x, y, xmid51;int m=50;int n=256;/ Prototype statements for functions found within this errupt void adc_isr(void);/ Global variables used in this example:Uint16 LoopCount;Uint16 ConversionCount;void firdes(int m, double npass) int t; for (t=0; t=m; t+) ht = sin(t-m/2.0)*npass*pi)/(pi*(t-m/2.0); if (t=m/2) ht=npass; void main(void) int xm,ym; double fs,fstop,r,rm; int i,j,p,k;/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl();/ For this example, set HSPCLK to SYSCLKOUT / 6 (25Mhz assuming 150Mhz SYSCLKOUT) EALLOW; SysCtrlRegs.HISPCP.all = 0x3; / HSPCLK = SYSCLKOUT/6 EDIS; / Disable CPU interrupts DINT;/ Initialize the PIE control registers to their default state. InitPieCtrl();/ Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt / Service Routines (ISR). InitPieVectTable();/ 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 registersInitAdc(); / For this example, init the 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.ADCTRL1.bit.SEQ_CASC = 1; AdcRegs.ADCMAXCONV.all = 0x0000; / Setup 2 convs on SEQ1 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x4; / Setup ADCINA0 as 1st 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 = 0x0380; / Setup T1 compare value EvaRegs.T1PR = 0x07FF; / Setup period register EvaRegs.GPTCONA.bit.T1TOADC = 1; / Enable EVASOC in EVA EvaRegs.T1CON.all = 0x1042; / Enable timer 1 compare (upcount mode)/ Wait for ADC interrupt k=0; fs = 250000; fstop = 20000; npass = fstop/fs; for (i=0; i=m; i+) xmidi=0; for(;) firdes(m, npass);for (i=0; i=n-1; i+) xm = pxi; x = xm/1023.0; for (p=0; p=m; p+) xmidm-p = xmidm-p-1; xmid0 = x; r = 0; rm= 0; for (j=0; j4; if(ConversionCount = 256) ConversionCount = 0; else ConversionCount+; / Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; / Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / ClearINT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; / Acknowledge interrupt to PIE return;4.2.2 测试效果如上图所示,可以发现使用DSP芯片实现的的FIR滤波器已经成功的将设定的混合频率信号中的高频部分滤除。4.2.3 SCI串行数据传输对实时采样信号进行滤波并通过SCI串口数据传输到计算机的程序如下: #include DSP281x_Device.h / DSP281x Headerfile Include File#include DSP281x_Examples.h / DSP281x Examples Include File#include #define pi 3.1415927int px256;int py256;double npass,h51, x, y, xmid51;int m=50;int n=256;long int delays; / Prototype statements for functions found within this errupt void adc_isr(void);void scia_init(void);void scia_xmit(char a);/ Global variables used in this example:Uint16 LoopCount;Uint16 ConversionCount;void firdes(int m, double npass) int t; for (t=0; t=m; t+) ht = sin(t-m/2.0)*npass*pi)/(pi*(t-m/2.0); if (t=m/2) ht=npass; void main(void) int xm,ym; double fs,fstop,r,rm; int i,j,p,k;/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl();/ For this example, set HSPCLK to SYSCLKOUT / 6 (25Mhz assuming 150Mhz SYSCLKOUT) EALLOW; SysCtrlRegs.HISPCP.all = 0x3; / HSPCLK = SYSCLKOUT/6 EDIS; / Disable CPU interrupts DINT;/ Initialize the PIE control registers to their default state. InitPieCtrl();/ Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt / Service Routines (ISR). InitPieVectTable();/ 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 InitAdc(); / For this example, init the ADC scia_init(); EALLOW; GpioMuxRegs.GPFMUX.all = 0x0030; /配置IO口为专用引脚 EDIS;/ 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.ADCTRL1.bit.SEQ_CASC = 1; AdcRegs.ADCMAXCONV.all = 0x0000; / Setup 2 convs on SEQ1 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x4; / Setup ADCINA0 as 1st 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 = 0x0380; / Setup T1 compare value EvaRegs.T1PR = 0x07FF; / Setup period register EvaRegs.GPTCONA.bit.T1TOADC = 1; / Enable EVASOC in EVA EvaRegs.T1CON.all = 0x1042; / Enable timer 1 compare (upcount mode)/ Wait for ADC interrupt k=0; fs = 250000; fstop = 20000; npass = fstop/fs; for (i=0; i=m; i+) xmidi=0; for(;) SciaRegs.SCITXBUF=0x55; SciaRegs.SCITXBUF=0x55; SciaRegs.SCITXBUF=0x55; SciaRegs.SCITXBUF=0x55; SciaRegs.SCITXBUF=0x55; SciaRegs.SCITXBUF=0x55; SciaRegs.SCITXBUF=0x55; SciaRegs.SCITXBUF=0x55;/帧首分隔符 firdes(m, npass);for (i=0; i=n-1; i+) xm = pxi; x = xm/1023.0; for (p=0; p=m; p+) xmidm-p = xmidm-p-1; xmid0 = x; r = 0; rm= 0; for (j=0; j=m; j+) r = xmidj * hj;rm = rm + r; y = rm; ym = (int)(1023.0 * y); pyi = ym; for(i=0;i256;i+) SciaRegs.SCITXBUF=pyi; for(delays=0;delays4; if(ConversionCount = 256) ConversionCount = 0; else ConversionCount+; / Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; / Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人人贷放款合同(标准版)
- 出租拆迁合同(标准版)
- 施工包合同(标准版)
- 教师招聘之《幼儿教师招聘》强化训练题型汇编及参考答案详解(综合题)
- 2025税收学自考试题及答案
- 全国数学竞赛试题及答案
- 教师招聘之《幼儿教师招聘》模拟考试高能附参考答案详解(综合题)
- 2025-2030中国压缩空气泡沫灭火装置行业应用状况与需求规模预测报告
- 项目六 任务六 酒吧服务(教案)《餐饮服务与管理》(高教版第二版)同步课堂
- 浙江中烟工业有限责任公司招聘考试真题2024
- 离子反应(优秀课件)
- 实变函数课件讲义
- DB15T 2416-2021蒙餐 风干羊背子
- 弹簧设计基础知识概要课件
- 中国文化概论 第1章 中国文化的历史地理环境课件
- 危险源登记检查及记录表
- 科研诚信课件
- 汽车维修常用工量具使用ppt课件(完整版)
- 1.1地球和地球仪-2022-2023学年新人教版地理七年级上册一课一练(Word版含答案)
- 产褥期保健PPTPPT课件
- 代理记账电话销售技巧PPT课件
评论
0/150
提交评论