




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DSP课程设计实 验 报 告FIR与IIR滤波的DSP 实现以及二者的比较成绩:工程设计50报告20答辩30总分评语:指导教师签字:日期:目 录一、设计任务书2二、设计内容2三、设计方案、算法原理说明2四、程序设计、调试与结果分析11五、设计(安装)与调试的体会32六、参考文献34一、设计任务书在信号与信息处理中,提取有用信息就要对信号进行滤波。利用DSP可以实时地对信号进行数字滤波。本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行数字滤波。在滤波时同时用fir与iir滤波器进行滤波,并比较二者的区别。二、设计内容(1) 对DMA进行初始化;(2) 对A/D、D
2、/A进行初始化;(3) 编写DMA中断服务程序,实现信号的实时滤波;(4) 利用CCS信号分析工具分析信号的频谱成分,确定滤波器的参数,利用MATLAB设计数字滤波器,提取滤波器参数;(5) 设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的fir滤波。(6) 比较加不同窗和阶数时fir滤波器的滤波效果;(7) 设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的iir滤波。(8) 比较fir数字滤波器与iir数字滤波器的效果三、设计方案、算法原理说明(一)硬件原理:McBSP是多通道缓冲串行口,他支持全双工通信,双缓冲数据寄存器,允许连续的数据流。支持传输的数据字长可以
3、是8位、12位、16位、20位、24位或32位。并且内置u律和A律压扩硬件。 McBSP在结构上可以分为一个数据通道和一个控制通道。数据通道完成数据的发送和接受。控制通道完成的任务包括内部时钟的产生、帧同步信号产生、对这些信号的控制及多通道的选择等。控制通道还负责产生接口信号送往CPU,产生同步事件通知DMA控制器。在CCS集成开发环境中,与McBSP相关的头文件有:regs54xx.h、mcbsp54.h。在这两个头文件中,定义了McBSP串行口的寄存器资源及使用方法。 TLC320AD50C是TI公司生产的SIGMA-DELTA型的16位A/D、D/A转换电路,他的采样速率最高可达22.0
4、5kb/s,内涵抗混叠滤波器和重构滤波器,属于模拟接口芯片(AIC),它有一个能与多种昂DSP芯片相连的同步串行通信接口,其采样速率课通过DSP编程来设置。在DAC之前有一个插值滤波器一保证输出信号平滑,在ADC之后有一个抽取滤波器以提高输入信号的信噪比。AD50C片内还包括一个定时器(调整采样率和帧同步延时)和控制器(可编程的增益放大器,锁相环PLL,通信协议等)。AD50有28脚的塑料SOP封装(带DW后缀)和48脚的塑料扁平QFP封装(带PT后缀),体积较小,适用于便携设备。AD50C的工作温度范围是0-70摄氏度,单一5V电源供电或5V模拟电源和3.3V数字电源供电,最大功耗为120m
5、W。在CCS集成开发环境中,与TLC320AD50C CODEC相关的头文件是codec.h。在这个头文件中,定义了与ad50CODEC相关的枚举变量和库函数。除了可以调用codec.h中提供的库函数之外,还可以利用这些枚举变量自己重新编写codec函数,使用枚举变量相互产生所需要的ad50寄存器的初始化值。Codec.h中的库函数位于函数库dsk5402.lib和drv5402.lib中。(二)滤波器的理论设计分析1.直接存储器访问DMA:直接存储器访问(Direct Memory Access,简称DMA)是C54x DSP非常重要的片上外设,DMA控制器可以完成数据传输而不影响CPU,因
6、此数据传输速度快。在要求信号实时采集和处理的系统中常采用DMA方式进行信号采集与传输。本实验利用DMA通道2与McBSP1通道结合来读取AD转换数据,利用DMA通道3与McBSP1通道结合来将处理后的数据发送至DA。 当一组数据处理完后,将数据存放在存储区out_buffer+frame*0x100中,选择out_buffer+frame*0x100为DMA通道3传送数据首地址,并选择源地址工作在不调整模式。2.IIR滤波原理:IIR数字滤波器差分方程的一般形式为:式中ai、bi为滤波系数。当bi全为零时,该滤波器为FIR数字滤波器;当bi不全为零时,则为IIR滤波器。IIR数字滤波器可用直接
7、型、级联型和并联型三种基本结构实现,其基本组成单元如图1所示。对于二阶IIR数字滤波器,其传递函数为: n时刻IIR数字滤波器输出和输入关系为:其中x(n)是输入序列,y(n)是输出序列,ai、bI为滤波器系数。因此滤波器的输出可以用硬件乘法器和加法器实现。在本实验中将IIR滤波器的系统函数H(z)分解为n个二阶IIR滤波器级联的形式进行运算,这样可以减小量化误差。3.IIR滤波函数本实验信号滤波算法是直接从TMS320c54XDSPLIB库中调用IIR函数。IIR函数调用格式:iircas4(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, usho
8、rt nx);iircas5(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, ushort nx);iircas51(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, ushort nx);iir32(DATA *x,LDATA *h,DATA *r,LDATA *d, ushort nbiq, ushort nx);其中,iircas32函数用于双精度IIR滤波器;iircas4函数用于二阶级联直接II型滤波器,每项含4个系数;iircas5函数用于二阶级联直接II型滤波器,每项含5个系数; iircas5
9、1二阶级联直接I型滤波器,每项含五个系数。调用matlab产生滤波器系数时,由于a0始终为1,所以可以产生二阶级联型系数,每项调用a1,a2,b0,b1,b2五个系数。iircas5用于通过各部分的放缩系数使各部分增益小于1的情况同时防止溢出的情况。在IIR数字滤波器的实现中,直接II型相比直接I型节省了一半的延迟单元,因而成为IIR滤波器实现最常用的形式。综上所述,我们采用irrcas5函数实现信号的滤波。调用参数说明:iircas5(DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nbiq,ushort nx)xk为输入数组,hk为H(s)
10、系数数组,按照a11 a21 b21 b01 b11 .a1i a2i b2i b0i b1i的顺序输入,其中i为biquad的个数;rnx为输出数组,dbuffer为延迟数据区,nbiq为H(s)分成二阶滤波器的个数nx为输入长度.相比较与其他几种调用函数,4.Fir滤波原理: 假设FIR滤波器的单位脉冲响应为h0、h1、.、hN-1,xk为待滤波的输入信号,则滤波器输出为yk=hk*xk= 进行信号滤波实际上师计算序列的线性卷积。在实验中滤波器单位脉冲响应hk是有限长N,而xk一般是外部输入的长序列,因而采用重叠像假发计算卷积。重叠相加法是求解段序列与长序列卷积的一种方法。首先将输入长序列
11、分解为短序列,这些短序列分别于hk卷积,将每段计算结果中后N-1个数据保留在一个缓冲区中,以便于下一段卷积结果进行重叠相加。5.FIR滤波函数本实验信号滤波算法是直接从TMS320c54XDSPLIB库中调用FIR函数。FIR函数调用格式:oflag = short fir(DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nh, ushort nx)功能 用FIR滤波器对信号滤波 调用参数说明:xnx 表示含有nx个实数的实输入信号向量;hnh 表示含有nh个实数的系数向量,按自然顺序 排列,即滤波器的单位脉冲响应。rnx 表示含有nx个实数的
12、输出向量; 允许原位运算,即r=x。 dbuffernh 延迟缓冲区;对存储器的要求同hnh。 nx 向量x中实数的个数; nh 向量h中系数的个数; oflag=1 有溢出 ; oflag=0 无溢出(三)设计流程图:分配各数据段,并且给个数据段赋值A/D、D/A初始化DMA通道的初始化DMA方式接收A/D数据,将数据存储等待DMA接收中断MATLAB中FDATOOL设计滤波器IIRFIRIIR系数的量化、调整与变换信号的滤波函数调用波形的产生经DMA输出利用硬件实现滤波器的信号滤波,就是将MATLAB所产生的系数,与被取样的实时信号进行运算。将滤波器系数导入程序当中一般有两种方式:一、是将
13、MATLAB产生的系数,生成头文件,在程序中进行调用。二、将MATLAB产生的系数写入数据段中,在程序中调用,此过程涉及到IIR滤波器的系数被截取,量化,调整和量化误差的产生。信号与滤波器系数的运算也有两种方法:一、调用DSPLIB中的IIR、FIR调用函数。二、利用C语言,编辑一段程序进行运算。(四)系数的导入与量化1. 头文件方式导入 在MATLAB中利用FDATOOL产生所需滤波器,选择菜单Targets一>Export to Code Composer StudioIDE打开Export to C Header File对话框,选择C header file,指定变量名(滤波器阶
14、数和系数向量),输出数据类型可选浮点型或32b、16b整型等。根据自己安装选择目标板板号和处理器号。单击OK。保存该头文件,需指定文件名和路径,打开IIR工程文件夹,该滤波器系数头文件已含在工程中。该头文件用到MatLab中的tmwpytes.h,需把该文件也包含在工程中还要在原文件中声明包含滤波器参数头文件即:#include"头文件名称"#include"tmwpytes.h"然后编译、链接工程添加的头文件自动在工程目录中显示目标DSP自动为滤波器系数分配相应的存储空间。打开系数文件查看生成的滤波器系数,可看到系数是对称的,这由所选滤波器类型而定。由
15、于本次的设计的拓展部分主要以设计IIR滤波器为主要目标,IIR滤波器系数存在着格式转换和量化的问题,不能够直接导入到CCS中直接去进行硬件实现,这样会导致滤波器系数的信息被截断,信息丢失,导致滤波器无法实现。所以我采用第二种方法。2.直接写入存储器滤波器的系数可以用FDATOOL进行计算出来,也可以导出到MATLAB的workspace中去计算量化。我们所使用的DSK5402实验板是16位定点运算,而MATLAB所产生的系数,并不是定点数而是浮点数。所以需要将MATLAB所产生的浮点数进行转化,使其转换为浮点数,浮点数格式的导出:一般在FIR滤波器中这种定点的转化都是使用MATLAB中FDAT
16、OOL的Export to C Header File方式来进行转化。但是与FIR不同的是IIR不一定是稳定的系统,即使稳定,也未必能够达到硬件实现。MATLAB提供的转化方法并没有对于越界的系数进行量化。例如:Sos=1,2,1,1,-1.19,0.45本是一个稳定的高阶IIR滤波器的系数矩阵中的一维向量,表示直接II型级联形式的一部分。经过MATLAB的16位定点量化后成为了Sos=32767,32767,32767,32767,-32768,14715成为了一个不稳定的系统,从而硬件实现就不可能了。A系数的转化MATLAB的带符号定点16位转化是,将所有大于1,小于-1的数值全部归一化,
17、造成了巨大的量化误差,众所周知,IIR滤波器的实现过程中存在着反馈,于是累进量化误差越来越大造成了系统的不稳定。量化问题中不得不提的还有一个标准格式问题。由于MATLAB所产生的浮点系数并没有依照CCS中DSPLIB的IIR能够调用的数据格式。经过查阅资料以及多次的失败尝试积累出的经验,了解到我所要设计的IIR滤波器所需使用的IIRCAS5调用命令使用的是Q15数据格式,而MATLAB所产生的浮点值是Q14数据格式,而在进行定点转换时,MATLAB没有将Q14的数据格式量化,进行大误差归一化直接转化为Q15的定点形式所以造成硬件实现的失败。MATLAB产生的系数一般已经是满足ccs调用函数的s
18、econd-order形式了。一次滤波器为例,产生的系数为:· - · Section #1 · - · Numerator: · 1 · 2 · 1 · Denominator: · 1 · 0.69059892324149696 · Gain: · - · Section #2 · - · Numerator: · 1 · 2 · 1 · Denominator: · 1 · -0.
19、94280904158206336 · 0.33333333333333343 · Gain: · - · Section #3 · - · Numerator: · 1 · 2 · 1 · Denominator: · 1 · -0.84028692165132679 · Gain: · - · Output Gain: · 1 其中Numerator就是分子部分,也就是b,其中Deneminator就是分母部分也就是a,Gain就是
20、增益,一般计算系数,只需将分子部分乘以各部分增益,在转化为定点数。分母部分只需将其转化为定点部分就可以了。但是,这个系数中,存在着一项a1<-1,就是第二部分的a1,所以直接转化,就会出现巨大的错误,就需要先对其进行量化,防止这个系数所造成的溢出情况。Q14,Q15数据格式Q后的数字分别表示小数的位数,Q15表示的是15位小数,由于16位的系统,所以只有一位是标志位,其余的15位全部表示的是小数,所以Q15表示的数值范围近似于是(-1,1)。同理可见,Q14所表示的位数为14位,其数值范围近似为(-2,2)。于是MATLAB产生的浮点数的大小是不确定的,这要根据所设计的滤波器的系数产生。
21、Q14浮点数向Q15定点数的转化,往往采取以下公式,B=A/2*32767;其中B为Q15格式,A位Q14格式。B.系数的量化由上面的IIR滤波器的理论分析可知其原理,D(n)作为中间变量,如果系数中出现了比1大或是比-1小的情况,如若存在在分子上面可以通过调整各部分增益来减少溢出的产生,就会造成IIR滤波器的溢出,而这大于1的系数往往存在在a1的系数上,无法类似于采用级联方式改变增益和衰减来调整,这对于DSP的影响是毁灭性的,所以IIR滤波器的系数量化是非常重要的。经过查阅资料,对于滤波器的量化,一般采取将系数向量除以一个数,使他满足Q15数据格式的要求,一般这个数值要大于最大的系数,往往是
22、2的幂,这样在进行转化的时候,能够减小因四舍五入截断时的误差。对于a1>1的情况,我才用了如下的公式来进行量化和数据格式转换:a=;b=;a=a/2*32767*g;b=b/2*32767其中,a为分母,b为分子;g为各项增益这个公式所形成的矩阵就可以应用到IIRCAS5的数据格式要求中,减小了溢出的可能性。C.误差分析(1)对IIR数字滤波器的系数,采用定点Q0格式进行数据的处理,将引入系数量化误差;(2)对输入的测试信号,采用定点Q0格式进行数据的处理,将引入输入信号的量化误差;(3)由于使用的AD,DA转换器件为有限字长,如DA转换器的字长仅10 b或12 b。在软件程序中事先要把
23、数据化为相同的字长位数,再送到DA 转换器,也将引入量化误差。(4)对数字滤波的运算过程编制相应的程序,其中滤波器选用直接型、级联型还是并联型,将产生不同的运算量化误差。四、程序设计、调试与结果分析本次试验使用的FIR与IIR滤波器程序主体大致相同,所以只是对fir_dma.c中的与IIR与FIR两种不同的滤波器的相关系数进行了修改,下面列出的是IIR滤波器的设计程序。(一)准备工作:需要将头文件等库函数都装入到指定位置:1、drv5402.lib是软件仿真所用的仿真器所必需的库文件;2、dsk5402.lib是驱动DSK板所必需的库文件;3、rts.lib,这个库提供目标DSP运行时间支持(
24、runtime-support)。由于程序没有#include ,因此本程序不需要头文件。上图是编译成功的结果显示:无错误和警告!这是最终调试成功的结果,首次运行时有11个错误,主要是_cosx和_COSX的混淆,分号的误写等。 因此,本程序所使用的配置文件有:(1)、-c,即源程序文件;(2)、-o,ifr_dma.out即输出文件(默认在Debug目录);(3)、-l rts.lib等库文件。(二)程序清单:通过理解iir的基本原理,也可以通过c语言或是汇编语言进行编写,同样可以达到滤波的效果。因为有调用函数,使用起来比此程序方便,所以只是用了函数来实现。1主程序:/*声明头文件*/#in
25、clude <type.h>#include <board.h>#include <codec.h>#include <firlab.h>#include <string.h>#include <dsplib.h>/*/* Function Prototypes */*/void delay(s16 period);extern void DMAC2ISR();/*声明DMAC2ISR为外部函数*/*/*全局变量的定义*/*/HANDLE hHandset;unsigned int dmsefc, dmmcr, dmctr
26、, src_addr, dst_addr;unsigned int dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr;/*给输入缓冲区建立字段 */#pragma DATA_SECTION(inp_buffer,"audio_buffer");int inp_buffer0x200;/*给输出缓冲区建立字段 */#pragma DATA_SECTION(out_buffer,"outt_buffer");int out_buffer0x200
27、;/*为系数建立字段 */#pragma DATA_SECTION(coeffs,"coefficients");/* iir,butterworth低通滤波器fs=16000 fc=2000Hz*/ int coeffs15= -13765, 3085, 1425, 1425, 2851, -19585, 11314, 1756, 1756, 3513, -15446, 5461, 1846, 1846, 3693 ;/*fir hann低通fs=16000,fc=2000*/int coeff16= -43, -178, -407, -353, 671, 2968, 5
28、860, 7903, 7903, 5860, 2968, 671, -353, -407, -178, -43;#pragma DATA_SECTION(delaybuff,"delayb");int delaybuff6=0; /int delaybuff16=0/* 给中断服务寄存器定义变量 */int frame=0; int flag=0;int temp; int currbuff = 0;/* delayptr指针变量指向延迟缓冲区的首地址*/int *delayptr1 = &(delaybuff0); interrupt void DMAC2ISR(
29、);/*/*主程序*/*/void main() s16 cnt=2;/* 需要用到的bois的部分定义 */ BSCR = 0x8806; XPC = 0; PMST = 0xA0; brd_set_cpu_freq(100); TIMER_HALT(0); brd_set_wait_states(7, 7, 9); TIMER_RESET(0); IMR=0;/禁止所有中断if(brd_init_bios() return;while(cnt-)brd_led_toggle(BRD_LED0);/切换LED指示灯0的显示状态delay(1000);brd_led_toggle(BRD_LE
30、D1);/切换LED指示灯1的显示状态delay(1000);brd_led_toggle(BRD_LED2);/切换LED指示灯2的显示状态delay(1000); /* 初始化codec */ hHandset = codec_open(HANDSET_CODEC); /* 给一个句柄*/*设置codec变量*/ codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC 15位模式*/ codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC 15位模式 */ codec_ain_gain(hHandset
31、, CODEC_AIN_6dB); /* 6dB的输入增益ADC */ codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB); /* -6dB的输出衰减 DAC */ codec_sample_rate(hHandset,SR_16000); /* 设置抽样频率为16000Hz */ /* 清除DMAC2的中断标志*/ INTR_CLR_FLAG(DMAC2);/* 重置DMA通道*/ dma_reset_all();/* 初始化DMA通道2 */ dmsefc = (DSYNC_REVT1 <<12);/与McBSP1接收事件同步 dmm
32、cr = (AUTOINIT_ENABLE << 15) | (DINM_ENABLE << 14) | (IMOD_HALFBLOCK <<13) | (CTMOD_DEC <<12) | (INDEXMODE_NOMOD << 8) | (SPACE_DATA << 6) | (INDEXMODE_INC << 2) | (SPACE_DATA);/设置传输控制模式寄存器DMMCR,帧结束DMA中断;/15bit AUTOINIT_ENABLE=1 使能自动初始化/14bit DINM_ENABLE=1 根
33、据IMOD位产生中断/13bit IMOD_HALFBLOCK=1 帧和块结束时都产生中断/12bit CTMOD_DEC=0 减量计数模式(多帧模式)/10-8bit INDEXMODE_NOMOD=000 源地址模式No modify /7-6bit SPACE_DATA=01 源地址空间为数据空间/4-2bit INDEXMODE_INC=01 目的地址模式, 传输之后加1/1-0bit SPACE_DATA=01 目的地址空间为数据空间 dmctr = 0xFF;/单元记数 src_addr = DRR1_ADDR(HANDSET_CODEC);/设置源地址 dst_addr = (u
34、nsigned int) &inp_buffer;/设置目的地址 dma_init(DMA_CH2, dmsefc, dmmcr, dmctr, SPACE_DATA, src_addr, SPACE_DATA, dst_addr);/* 设置通道2帧数*/ DMA_FRAMECOUNT(DMA_CH2, 1);/*为通道2输入设置全局自动初始化寄存器*/ dmgsa = src_addr; dmgda = dst_addr; dmgcr = 0xFF; dmgfr = 1;/* 设置全局优先级和使能控制寄存器 */ dmpre = (HIGH_PRIORITY << 10
35、) | (INTSEL_01 << 6);dmsrcp = SPACE_DATA; dmdstp = SPACE_DATA; dmidx0 = 0; dmidx1 = 0; dmfri0 = 0; dmfri1 = 0; dma_global_init(dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr);/* 通道 2使能 */ DMA_ENABLE(DMA_CH2); /* 开始前端串行端口接收数据流*/ temp = *(volatile u16*)DRR1_ADD
36、R(HANDSET_CODEC); /* 通道2中断使能 */ INTR_ENABLE(DMAC2);/* 全局中断使能 */ INTR_GLOBAL_ENABLE;/* 等待中断 */for(;);/*/*延迟 */*/void delay(s16 period) int i, j; for(i=0; i<period; i+) for(j=0; j<period; j+); 2.终端服务程序dma2isr.c代码及分析#include <codec.h>#include <firlab.h>extern void delay(s16 period);ex
37、ternunsigned int channel; /*DMA通道数*/externunsigned int dmsefc; /*设置同步时间和帧计数寄存器值*/externunsigned int dmmcr; /*设置模式控制寄存器值*/externunsigned int dmctr; /*设置单元计数寄存器值 */externunsigned int src_page; /*设置源页寄存器值 */externunsigned int src_addr; /*设置源地址寄存器值 */externunsigned int dst_page; /*设置目的页寄存器值 */externunsi
38、gned int dst_addr; /*设置目的地址寄存器值*/extern int inp_buffer0x200;extern int out_buffer0x200;extern int coeffs16;/*若是iir滤波器,需要改为coeffs15*/extern int delaybuff16; /*若是iir滤波器,需要改为delaybuff6*/extern int frame; extern int flag;extern int currbuff;extern int *delayptr1;int L=0;voidinit_dma3(void) while(DMPREC&
39、amp;0x0008) ;/DMA3的传送是否结束 /* 初始化通道3 */dmsefc = (DSYNC_REVT1 <<12); dmmcr = 0x4141; dmctr = 0xFF;/256 单元/帧 src_addr = (unsigned int) &out_buffer+(unsigned int)frame*0x100); dst_addr = DXR1_ADDR(HANDSET_CODEC); dma_init(DMA_CH3, dmsefc, dmmcr, dmctr, SPACE_DATA, src_addr, SPACE_DATA, dst_add
40、r);/* 设置通道3的帧数 */ DMA_FRAMECOUNT(DMA_CH3, 0);/2 frame/block /* 使能通道3 */ DMA_ENABLE(DMA_CH3);interrupt void DMAC2ISR(void)int *p_inp,*p_out; p_inp=inp_buffer+frame*0x100;p_out=out_buffer+frame*0x100;/iircas5(p_inp,coeffs,p_out,&delayptr1,3,256);/*调用IIR滤波函数*/fir(p_inp,coeffs,p_out,&delayptr1,1
41、6,256);/*调用FIR滤波函数*/ init_dma3();frame=1;3.中断向量C5402vec.asm代码及其分析 .title "5402 DSK Interrupt Vector Table Initialization" .ref _c_int00, _DMAC2ISR .sect ".vecs"RESET: BD _c_int00 ; 初始化CPU寄存器,分支指向_c_int00,BD占2个字节 NOP NOPNMI: BD NMI ; NMI NOP NOP*软件S/W中断*SINT17 BD SINT17NOPNOPSINT1
42、8 BD SINT18 NOP NOPSINT19 BD SINT19 NOP NOPSINT20 BD SINT20 NOP NOPSINT21 BD SINT21 NOP NOPSINT22 BD SINT22 NOP NOPSINT23 BD SINT23 NOP NOPSINT24 BD SINT24 NOP NOPSINT25 BD SINT25 NOP NOPSINT26 BD SINT26 NOP NOPSINT27 BD SINT27 NOP NOPSINT28 BD SINT28 NOP NOPSINT29 BD SINT29 NOP NOPSINT30 BD SINT30
43、NOP NOP*其他中断*INT0: BD INT0 NOP NOPINT1: BD INT1 NOP NOPINT2: BD INT2 NOP NOPTINT0: BD TINT0 NOP NOPBRINT0: BD BRINT0 NOP NOPBXINT0: BD BXINT0 NOP NOPDMAC0: BD DMAC0 NOP NOPTINT1: BD TINT1 NOP NOPINT3: BD INT3 NOP NOPHPINT: BD HPINT NOP NOPDMAC2: BD _DMAC2ISR ;BRINT1/DMAC2 NOP NOPDMAC3: BD DMAC3 NOP
44、NOPDMAC4: BD DMAC4 NOP NOPDMAC5: BD DMAC5 NOP NOP(三)程序调试:首先测试IIR滤波器与FIR滤波器是不是都能够使用并且能够正常滤波,首先利用matlab的sptool进行仿真实验,看是不是存在溢出或是不稳定。产生的1000Hz和4500Hz的混频信号。Fs=16000Hz利用16阶fir滤波器滤出来的效果,可见fir滤波器参数可以正常使用。滤波器的幅度相应:6阶iir低通butterworth滤波器的滤波效果,不存在溢出IIR滤波器的幅度相应接下来用DSK5402来试验了一下,进行了对比。利用ccs中的graph工具就可以对这些信号的频谱和时域
45、波形就行观察。声源软件使用goldwave。并通过其中的“表达式计算器”的方法产生混频信号:在打开工程后,对工程进行加载同文件、库文件,并成功编译之后,通过View>Graph功能观察输入输出信号:FIR的输入信号,输出信号和频谱。时域波形:频域滤出前后对比IIR的输入信号,输出信号和频谱。可见现实中,fir与iir的滤波效果都可以非常的接近理想中的情况。只是在IIR的滤波器的量化是还是存在的增益的改变,无法满足理想的情况,尝试增大音量来调整增益情况,就会发生如下的情况:系统的输出出现了溢出,是dsp无法实现IIR滤波器,并且发现,由于使用的是goldwave产生的信号,所以,计算机的声
46、道设置必须是一端输出。关于音量多次试验以及失败的经验,由于板子的存储位数的原因,音量不能太大。音量过大导致了系统的不稳定,导致dsp的无法实现。(四)滤波器的性能对比:Fir:6阶 输入:sin(2000*pi*t)+sin(16000*pi*t)Hamming窗:系数:const int16_T B7 = 278, 2286, 8029, 11582, 8029, 2286, 278;Han窗:系数:const int16_T B7 = 0, 1954, 8291, 12278, 8291, 1954, 0;Blachman窗:系数:const int16_T B7 = 0, 1179, 8
47、081, 14247, 8081, 1179, 0;Iir:6阶:同样的输入信号int coeffs15=-13767,3086,1425,1425,2851,-19585,11314,1756,1756,3513,-15446,5461,1846,1846,3693;这些对比可见在较低阶数的时候IIR的滤波器的性能明显强于FIR的效果,但是再设计过程中唯一的缺陷就在系数的量化时存在很大的误差,并且增益不是很好控制,并且有可能存在着溢出现象。对于高阶数的比较,由之前的16阶FIR滤波器已经很明显的看出来,FIR滤波器的滤波效果非常的完美。在进行较高阶数的比较的时候,阶数过高导致IIR的滤波器变
48、得不稳定,已经不能够在DSP进行硬件实现,就并没有进行截图比较。(五)IIR的采样率对于自身滤波效果的影响分析Iir 8000采样率0,566,8333,8333,16665,0,19293,1272,1272,22544,0,5623,11082,11082,22164,Iir 3阶 7500采样率 Iir 4阶 12000采样率滤波效果明显不如之前取样率为16000的时候,并且观察其幅度相应,其衰减的增加趋势已经放缓了许多,其他两幅是在不同阶数和在不同采样率时的幅度相应,可见,采样频率对于IIR的影响是非常大的。可以知道,IIR比较适合在采样率较高,且阶数较小的时候使用。(六)实验结论:一
49、、IIR数字滤波器是针对采样率固定的系统设计的,更改系统或系统采样率改变时应重新设计。二、用到的数据存储单元,程序开始时应对这些单元进行初始化。如果要进行连续滤波,应保存上一次滤波的结果。三、IIR数字滤波器的滤波结果会引起相位的延迟,故对相位严格要求的场合,需加全通网络进行较正,或选用FIR滤波器实现滤波功能。四、对于IIR系数的溢出问题,可以采取一下几种措施:A、采用级联型,对增益进行调整。B、对系数进行量化。C、对CCS库函数的源程序进行修改,使其满足FDATOOL中产生的系数,就可直接调用。五、设计IIR的时候,不能够使IIR得取样频率过低,否则硬件无法实现,一般要保证Fc/Fs>0.01,并且在这个比值比较靠近1的时候,DSP也是无法实现的。六、在IIR滤波器的设计思路中,与FIR的不同一点是,一定要在量化过后通过MATLAB来观察其是否稳定。七、由于IIR得误差问题,一般不采用较高的阶数来实现,一是不稳定的可能性增加,二是误差会不断的积累和扩大,已造成不稳定。八、对于FIR,IIR,较小阶数时候滤波器的效果来说,IIR要好于FIR,且运算速度是非常快的,对于较大阶数还是要使用FIR滤波器,稳定且效果是非常好的。九、对于频率较为接近的两个信号,一般采用F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高品质研磨碳酸钙浆料项目建议书
- 2025年煤炭采掘机械设备项目合作计划书
- 2025年医学信息技术产品项目发展计划
- 2025年湖州市教育局直属学校招聘教师考试试题【答案】
- 2025年仁怀市外县市选调小学教师考试试题【答案】
- 消费系统设计方案解析
- 项目操作管理制度
- 2025疫情期间的心得体会高分作文
- 5篇有用垃圾运输合同书范本
- 2025年收费的生产服务及修理项目发展计划
- 2025年广东省高考生物真题(解析版)
- 中医骨伤科优势病种诊疗方案
- 降低烟支表面黄斑缺陷率
- 基础2000词汇-英语
- New包装结构设计基础知识课件
- 新员工三级安全教育课件(公司级)
- 广西南宁市青秀区总工会招考聘用聘用人员(必考题)模拟卷及答案
- 术中压力性损伤风险评估量表解读
- 剑桥少儿英语一级下册Unit2PPT课件
- ASMEB16.5标准法兰尺寸表
- GB∕T 21437.2-2021 道路车辆 电气电子部件对传导和耦合引起的电骚扰试验方法 第2部分:沿电源线的电瞬态传导发射和抗扰性
评论
0/150
提交评论