1、广西师范大学研究生课程设计广西师范大学研究生课程设计摘 要随着信息处理技术的飞速发展,数字信号处理技术逐渐发展成为主流技术,它在电子信息、通信、软件无线电、自动控制、仪表技术、信息家电等高科技领域得到了越来越广泛的应用。相对于模拟滤波器,数字滤波器没有漂移,能够处理低频信号,频率响应特性可做成非常接近于理想的特性,且精度可以达到很高,容易集成等,这些优势决定了数字滤波器的应用越来越广泛。同时DSP(数字信号处理器) 的出现和 FPGA 的迅速发展也促进了数字滤波器的发展,并为数字滤波器的硬件实现提供了更多的选择。本课题主要应用 MATLAB 软件设计 FIR 数字滤波器的系数,用这些系数设计
2、FIR 滤波器并用编程仿真;应用 DSP 集成开发环境 CCS 调试程序,用TMS320C2812 来实现了 FIR 数字滤波。具体工作包括:对 FIR 数字滤波器的基本理论进行了分析和探讨;采用 MATLAB 软件来学习数字滤波器的基本知识,计算数字滤波器的系数,研究算法的可行性,对 FIR 低通数字滤波器进行前期的设计和仿真;系统介绍了 TI 公司数字信号处理器的硬件结构、性能特点和 DSP 的集成开发环境 CCS;应用 DSP 集成开发环境用 CCS 调程序,用TMS320C2812 来实现了 FIR 数字滤波。关键词:数字滤波器,DSP,FIR,MATLAB广西师范大学研究生课程设计目
3、录1 绪论 12 系统开发平台与环境 12.1 CCS 开发环境 12.2 DSP 开发实验箱 23 FIR 滤波器设计过程 23.1 FIR 滤波器设计总框图 23.2 FIR 滤波器设计的原理 33.3 FIR 滤波器的设计方法 34 程序流程图 45 编写程序并仿真 55.1 滤波器计算函数如下 55.2 仿真结果 56 总结 67 参考文献 78 附录 8广西师范大学研究生课程设计11 绪论在信号处理中,滤波占有十分重要的地位。数字滤波是数字信号处理的基本方法。数字滤波与模拟滤波相比有很多优点,它除了可避免模拟滤波器固有的电压漂移、温度漂移和噪声等问题外,还能满足滤波器对幅度和相位的严
4、格要求。低通有限冲激响应滤波器(低通 FIR 滤波器 )有其独特的优点,因为 FIR系统只有零点,因此,系统总是稳定的,而且容易实现线性相位和允许实现多通道滤波器。DSP(数字信号处理器)与一般的微处理器相比有很大的区别,它所特有的系统结构、指令集合、数据流程方式为解决复杂的数字信号处理问题提供了便利,本文选用 TMS320C2812 作为 DSP 处理芯片,通过对其编程来实现 FIR滤波器。对数字滤波器而言,从实现方法上,有 FIR 滤波器和无限冲激响应(IIR) 滤波器之分。由于 FIR 滤波器只有零点 ,因此这一类系统不像 IIR 系统那样易取得比较好的通带与阻带衰减特性。但是 FIR
5、系统有自己突出的优点: 系统总是稳定的;易实现线性相位;允许设计多通带(阻带)滤波器。其中后两项是 IIR 系统不易实现的。利用 C 语言在 CCS 环境中编写一个 FIR 滤波器程序,并能利用已设计好的滤波器对常用信号进行滤波处理。2 系统开发平台与环境2.1 CCS 开发环境CCS 提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。CCS 提供了基本的代码生成工具,它们具有一系列的调试、分析能力。CCS支持如下图 2.1 所示的开发周期的所有阶段。广西师范大学研究生课程设计2图 2.12.2 DSP 开发实验箱DSP
6、 开发箱本着模块化、总线型、开放式、系列化的设计思想,采用统一的系统结构、模块结构和机械结构,以多种典型 DSP 处理器构成具有标准总线和简单发动机相同物理尺寸的高性能嵌入式 DSP 开发板。3 FIR 滤波器设计过程3.1 FIR 滤波器设计总框图开始初始化 D S P产生输入数据读入新数据并存放到栈顶滤波处理保存滤波结果到输出单元待滤波的样本点数处理完成结束否是3.2 FIR 滤波器设计的原理设 a i(i=0,1 ,2,N-1)为滤波器的冲激响应,输入信号为 x(n),则FIR 滤波器的输入输出关系为: 设 计概 念 性 规 划 编 程 和 编 译创 建 工 程 文 件 、 编 写源 代
7、 码 和 配 置 文 件 调 试语 法 检 查 、 探测 点 设 置 和 日志 保 存 等 分 析实 时 调 试 、 统计 和 跟 踪广西师范大学研究生课程设计31z 1z1z1za 0a 1 2Na1NaX ( n ) X ( n - 1 ) X ( n - 2 ) X ( n - N + 1 )y ( n )图 3.23.3 FIR 滤波器的设计方法循环缓冲算法:对于 N 级的 FIR 滤波器,在数据存储器中开辟一个称之为滑窗的 N 个单元的缓冲区,滑窗中存放最新的 N 个输入样本。每次输入新的样本时,一新样本改写滑窗中的最老的数据,而滑窗中的其他数据不需要移动。利用片内 BK(循环缓冲区
8、长度)寄存器对滑窗进行间接寻址,环缓冲区地址首位相邻。下面,以 N=5 的 FIR 滤波器循环缓冲区为例,说明循环缓冲区中数据是如何寻址的。5 级循环缓冲区的结构如图 3.3 所示,顶部为低地址。x ( n )x ( n - 1 )x ( n - 2 )x ( n - 3 )x ( n - 4 )x ( n )x ( n - 1 )x ( n - 2 )x ( n - 3 )x ( n + 1 )x ( n )x ( n - 1 )x ( n - 2 )x ( n - 2 )x ( n - 1 )数据存储器 数据存储器 数据存储器顶部底部图 3.3广西师范大学研究生课程设计44 程序流程图初始
9、化系统关中断初始化 P I E 中断初始化 P I E 中断矢量表初始化 c p u t i m e r设置中断服务程序入口地址开中断设置 C P U开中断f i r 滤波处理结束图 4.1广西师范大学研究生课程设计55 编写程序并仿真5.1 滤波器计算函数如下float FIR()float fSum;fSum=0;for ( i=0;i#define FIRNUMBER 25/ 函数声明interrupt void adc_isr(void);float FIR();float fHnFIRNUMBER= 0.00218610509217333,0.0236189556168884,0.0
10、173400056226900,0.0245021776420168,0.0308889378060406,0.0376418229431873,0.0443551828218174,0.0507147318524124,0.0564451660108467,0.0612310430334062,0.0648493648656627,0.0671115426557053,0.0678704755615346,0.0671115426557053,0.0648493648656627,0.0612310430334062,0.0564451660108467,0.0507147318524124
11、,0.0443551828218174,0.0376418229431873,0.0308889378060406,0.0245021776420168,0.0173400056226900,0.0236189556168884,0.00218610509217333广西师范大学研究生课程设计9;/ 定义全局变量Uint16 Voltage;float shurudeshijiedianya;float ADCLO=0; / ADC 转换的参考电平为 0float fXnFIRNUMBER= 0.0 ; float fOutput;int i;float fOut256,fIn256;int
12、nIn,nOut;main() InitSysCtrl(); / 初始化 cpuDINT; / 关中断InitPieCtrl(); / 初始化 pie 寄存器IER = 0x0000; / 禁止所有的中断IFR = 0x0000;InitPieVectTable(); / 初始化 pie 中断向量表EALLOW; / This is needed to write to EALLOW protected registerPieVectTable.ADCINT = / 将中断入口地址赋给中断向量表中对应的位置EDIS; / This is needed to disable write to E
13、ALLOW protected registersAdcRegs.ADCTRL1.bit.RESET = 1; / Reset the ADC moduleasm(“ RPT #10 | NOP“); / Must wait 12-cycles (worst-case) 广西师范大学研究生课程设计10for ADC reset to take effectAdcRegs.ADCTRL3.all = 0x00C8; / first power-up ref and bandgap circuitsAdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; / Power up ba
14、ndgap/reference circuitryAdcRegs.ADCTRL3.bit.ADCPWDN = 1; / Power up rest of ADC/ 设置 EVA/ Assumes EVA Clock is already enabled in InitSysCtrl();EvaRegs.T1CON.bit.TMODE = 2; / 计数模式为连续增计数EvaRegs.T1CON.bit.TPS = 1; / T1CLK=HSPCLK/2 = 37.5 MHzEvaRegs.T1CON.bit.TENABLE = 0; / 暂时禁止 T1 计数EvaRegs.T1CON.bit.
15、TCLKS10 = 0; / 使用内部时钟EvaRegs.GPTCONA.bit.T1TOADC = 2; / 周期中断启动 ADCEvaRegs.EVAIMRA.bit.T1PINT = 1; / 使能定时器 T1 的周期中断EvaRegs.EVAIFRA.bit.T1PINT = 1; / 清除定时器 T1 的周期中断标志EvaRegs.T1PR = 0x1D4B; / 周期为 0.2 ms,计算公式为 T=(T1PR+1)/(TCLK*106)EvaRegs.T1CNT = 0; / 初始化计数寄存器/ 设置 ADCAdcRegs.ADCTRL3.bit.ADCCLKPS = 15; /
16、 ADCLK=HSPCLK/30AdcRegs.ADCMAXCONV.all = 0x0000; / 最大转换 1 个通道AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; / 选择采样通道 0广西师范大学研究生课程设计11AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; / 允许 EVA 触发启动SEQ1/SEQAdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; / 使能 SEQ1 的中断请求/ Enable ADCINT in PIEPieCtrlRegs.PIEIER1.bit.INTx6 = 1;IER |=
17、M_INT1; / 开 CPU 中断EINT; / 使能全局中断ERTM; / 使能实时中断EvaRegs.T1CON.bit.TENABLE = 1; / 启动 T1 计数/ Wait for ADC interruptwhile(1)interrupt void adc_isr(void)Voltage = AdcRegs.ADCRESULT0 4;/ 将采样得到的数据右移 4 位,如果不移,实际采样值计算公式不同下shurudeshijiedianya = (float)(Voltage)/4095*3+ADCLO;/ 采样for ( i=FIRNUMBER-1;i0;i- )fXni
18、= fXni-1;fXn0 = shurudeshijiedianya;/ 将最新采样得到的实际值放入 fXn0 fInnIn = shurudeshijiedianya;nIn+;if ( nIn=256 )nIn = 0; /* 请在此句上设置软件断点 */fOutput = FIR();广西师范大学研究生课程设计12fOutnOut = fOutput;nOut+;if ( nOut=256 )nOut = 0; /* 请在此句上设置软件断点 */下面的变量在“f2812a.h“已经定义DA_DATA_L = Voltage / 第一通道 da 数据输出量低 8 位DA_DATA_H =
19、 (Voltage8) / 第一通道 da数据输出量高 8 位和通道号 1DA_CTL=0;/ Reinitialize for next ADC sequenceAdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; / 复位序列发生器AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / 清除 ADC 中断PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; / 响应 PIE 同组中断EINT; / 使能全局中断return;float FIR()float fSum;fSum=0;for ( i=0;iFIRNUMBER;i+ )fSum+=(fXni*fHni);return(fSum);