ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:1.35MB ,
资源ID:3989372      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3989372.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DSP实验报告.docx

1、DSP实验报告 DSP 课程实验报告 利用DSP实现实时信号IIR滤波学 院: 指导教师: 学 生: 班级:DSP课程设计:实现信号IIR滤波-结题报告在信号与信息处理中,提取有用信息需要对信号进行滤波。借助DSP数字信号处理器的高速运算能力,可以实时地对信号进行数字滤波。本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行数字滤波,用DSP实验工具箱实现IIR信号滤波器,调用55xdspx.lib中的IIR滤波程序iircas5(),实现信号IIR滤波仿真。 一、实验目的 掌握DSP集成开发环境CCS的使用和调试方法。掌握DSP片上资源和片外资源访问的基本方法。通

2、过对DSP处理器及CODEC的编程,培养C语言编程能力。学会利用Matlab对信号进行IIR滤波,掌握Matlab的信号仿真方法。掌握利用DSP实现信号实时IIR滤波设计方法。提高使用DSP硬件平台实现数字信号处理算法的能力。二、实验内容(1)用MATLAB软件产生一个两个叠加的正弦信号,并采样生成输入数据;(2)使用MATLAB软件中的工具箱设计一个IIR滤波器,获得相应系数值;(3)在CCStudio v3.3软件中建立仿真工程;(4)在DMA中断程序中,调用DSPLIB中的IIR滤波程序iircas5()实现对输入信号的滤波,观察输入输出波形。发挥部分(1) 比较加不同窗和阶数时滤波器的

3、滤波效果。 (2) 测试所设计滤波器的幅频特性和相频特性,并与MATLIB下的设计结果进行比较。三、实验原理IIR滤波原理IIR数字滤波器差分方程的一般形式为:式中ai、bi为滤波系数。当bi全为零时,该滤波器为FIR数字滤波器;当bi不全为零时,则为IIR滤波器。IIR数字滤波器可用直接型、级联型和并联型三种基本结构实现,其基本组成单元如图1所示。图1.1 IIR滤波器的二阶结构对于二阶IIR数字滤波器,其传递函数为: n时刻IIR数字滤波器输出和输入关系为:其中xk是输入序列,yk是输出序列,ai、bI为滤波器系数。因此滤波器的输出可以用硬件乘法器和加法器实现。 在本实验中将IIR滤波器的

4、系统函数H(z)分解为n个二阶IIR滤波器级联的形式进行运算,这样可以减小量化误差。IIR滤波函数IIR函数调用格式:iircas5(DATA *x,DATA *h,DATA *r,DATA *d, ushort nbiq, ushort nx);iircas5函数用于二阶级联直接II型滤波器,每项含5个系数;调用matlab产生滤波器系数时,由于a0始终为1,所以可以产生二阶级联型系数,每项调用a1,a2,b0,b1,b2五个系数。iircas5用于通过各部分的放缩系数使各部分增益小于1的情况同时防止溢出的情况。在IIR数字滤波器的实现中,直接II型相比直接I型节省了一半的延迟单元,因而成为

5、IIR滤波器实现最常用的形式。综上,我们采用irrcas5()函数实现信号的滤波。调用参数说明:iircas5(DATA *x, DATA *h, DATA *r, DATA *dbuffer, ushort nbiq,ushort nx)其中:xk为输入数组;hk为H(z)系数数组,按照a11 a21 b21 b01 b11 .a1i a2i b2i b0i b1i的顺序输入,其中i为biquad的个数;rnx为输出数组;dbuffer为延迟数据区;nbiq为H(z)分成二阶滤波器的个数;nx为输入长度。将滤波器系数导入程序当中一般有两种方式:一、是将MATLAB产生的系数,生成头文件,在程

6、序中进行调用。二、将MATLAB产生的系数写入数据段中,在程序中调用,此过程涉及到IIR滤波器的系数被截取,量化,调整和量化误差的产生。信号与滤波器系数的运算也有两种方法:一、调用DSPLIB中的IIR、调用函数。二、利用C语言,编辑一段程序进行运算。系数的导入与量化滤波器的系数可以用FDATOOL进行计算出来,也可以导出到MATLAB的workspace中去计算量化。系数的转化经过查阅资料,对于滤波器的量化,一般采取将系数向量除以一个数,使他满足Q15数据格式的要求,一般这个数值要大于最大的系数,往往是2的幂,这样在进行转化的时候,能够减小因四舍五入截断时的误差。对于a11的情况,我才用了如

7、下的公式来进行量化和数据格式转换:a=;b=;a=a/2*32767*g;b=b/2*32767其中,a为分母,b为分子;g为各项增益这个公式所形成的矩阵就可以应用到IIRCAS5的数据格式要求中,减小了溢出的可能性。四、实验步骤本设计可以分为两部分:(1) 信号仿真(a)首先利用Matlab的fdatool工具箱设计滤波器,在sptool工具箱进行信号分析与滤波。 (b)利用CCS进行信号滤波算法的仿真,即利用simulator进行仿真。调用DSPLIB库中的iir()滤波函数实现信号FIR滤波,或自行编写IIR滤波程序实现信号IIR滤波。(2) 利用Emulator在DSP实验板上采用DM

8、A方式实现信号采集与传输。(3) 在DSP实验板上,结合IIR滤波算法,实现信号的实时IIR滤波。4.1MATLAB部分4.11信号叠加与其参数产生两个正弦信号相加的波形,得到一个混合有1000Hz和4500Hz频率的正弦信号。f1=1000;f2=4500;fs=16000;/采样率为16000HzN=256; /采样点为256个A=1000; /幅值1000t=(0:N-1)/fs;x=A*sin(2*pi*f1*t)+A*sin(2*pi*f2*t); /采集信号plot(t,x);图形如下:m(find(m0)=m(find(m0)+65536;/将采样数值中的负值取反y=fix(x)

9、;/将采样值去整a=dec2hex(y);/把采样值转变成16进制的数值采样取整后转化为16进制输出为:数据为:val =0000000553001440005C006AB005C70FF27000BB003E80FDBE0F9A10FE8F0FEDB等一系列值4.1.2IIR滤波器的生成,并且提取参数利用fdatool工具设计如图所示的滤波器:IIRBW型,6阶,Fs=16000Hz,Fc=2000Hz选中analysis 中的filter coefficients,可以看到滤波器的具体参数,参数无法复制,选择export,生成两个workspace,“SOS”存放分子分母系数,“G”存放增

10、益值。Sos参数为:SOS = 1.0000 2.0000 1.0000 1.0000 -1.2734 0.8008 1.0000 2.0000 1.0000 1.0000 -1.0705 0.5140 1.0000 2.0000 1.0000 1.0000 -0.9428 0.3333 1.0000 2.0000 1.0000 1.0000 -0.8676 0.22701.0000 2.0000 1.0000 1.0000 -0.8327 0.1776G的参数为:G = 0.1319 0.1109 0.0976 0.0898 0.0862 1.0000将滤波器参数量化取整,程序为:for i

11、=1:3 for j=1:3 a1(i,j)=SOS(i,j)/2*32767*G(i,1); endend/量化分母,并存放在a1数组中for i=1:3 for j=4:6 b1(i,j-3)=SOS(i,j)/2*32767; endend/量化分子,并存放在b1数组中a2=fix(a1);b2=fix(b1);取整量化以后的分子分母如下所示:分母:a2 = 2160 4320 2160 1816 3632 1816 1599 3199 1599分子:b2 = 16383 -20862 13119 16383 -17539 8420 16383 -15446 5461最后,按照a11 a

12、21 b21 b01 b11 .a1i a2i b2i b0i b1i的顺序得到滤波器的系数向量是:-13767,3086,1425,1425,2851,-19585,11314,1756,1756,3513,-15446,5461,1846,1846,3693;将数据转化为16进制:分母:q=dec2hex(a2)q =08700718063F10E00E300C7F08700718063F分子:m=b2; m(find(m0)=m(find(m0)+65536;p=dec2hex(m)p =3FFF3FFF3FFFAE82BB7DC3AA333F20E415554.1.3利用滤波器进行滤波

13、采用sptool工具进行,输入信号和滤波器均为上提提到的正弦信号与滤波器输入信号:滤波器特性:滤波输出波形:4.2CCStudio仿真部分:4.2.1IIR仿真部分:建立工程,名为iirtest,将这三个基本文件55x,data.h,IIRfilter.C复制在新建的文件夹中,再进行相应的编译,装载程序,发现仍需要一些必要文件:TMS320.H,rts55x.lib,dsplib.h,55xdspx.lib,发现可以通过编译、装载。原始数据输入图形如下(地址为SINE_TABLE):输入信号频谱如下:输出波形(地址为out_buffer):输出频谱:下面列出simulator中仿真的各阶滤波器

14、的结果:生成虚拟输入测试信号的MATLAB程序如下:f1=1000;f2=4500;fs=16000;%采样率为16000HzN=1024000; %采样点为256个A=1000; %幅值1000t=(0:N-1)/fs;x=A*sin(2*pi*f1*t)+A*sin(2*pi*f2*t); %采集信号 待滤波的测试信号波形如图所示: 图1待滤波信号的为双频信号,f1=1000Hz,f2=4500Hz,如图所示: 图2(1) 使用6阶Fc为1500Hz的BW型iir滤波器,对测试信号进行滤波之后的时域波形如图所示:图3使用6阶Fc为1500Hz的BW型iir滤波器,对测试信号进行滤波之后的频

15、谱如图所示:图4(2) 四阶FC为1500Hz的BW滤波器滤波后时域波形如图所示:图5滤波后的频谱如图所示: 图6(3) 八阶截频为1500Hz的BW型滤波器滤波后输出时域波形如图所示:图7输出信号频谱如图所示: 图8六阶Fc为1500Hz的切比雪夫I型滤波器滤波后输出信号波形和频谱如图所示图9六阶Fc为1500Hz的椭圆型滤波器滤波后输出信号波形和频谱如图所示图10比较图4和图6可知,相同类型的滤波器,阶数小的滤波器滤波性能较差;比较图4和图8,图9,图10可知, CCS中的iircas5()函数对非Butterworth滤波器和高阶的滤波器的实现能耐有限,引入了新的频率分量。4.2DMA-

16、split部分:将dma-split中的程序进行部分修改,将原先的滤波函数fir变为iircas5函数,并且改正其相应的格式,并且将data.h中的滤波函数系数改为matlab中自行设计的参数,我们采用的是用虚拟示波器显示滤波的波形。产生波形并观察:虚拟信号源发生器,分别产生左右声道的信号,这种方法的好处是左右声道信号没有串扰,频谱很干净;缺点是,每一个声道都只能产生一个单频信号。本次测试使用的滤波器系数为6阶BW低通滤波器(fc=2000),程序中对左声道数据不做任何处理,作为参考信号;用虚拟信号源产生输入信号,左声道4000Hz,右声道先为1000Hz,后改为6000Hz;用虚拟示波器观察

17、DSP实验板的滤波效果如图1,图2所示其中下面的频谱为右声道经过滤波器后的信号。图1图24.3 程序分析1) 缓冲区定义 #pragma DATA_SECTION (gBufferXmtPing, buffer_sect);Int16 gBufferXmtPingBUFFSIZE; / Transmit PING buffer #pragma DATA_SECTION (gBufferXmtPong, buffer_sect);Int16 gBufferXmtPongBUFFSIZE; / Transmit PONG buffer#pragma DATA_SECTION (gBufferRcv

18、Ping, buffer_sect);Int16 gBufferRcvPingBUFFSIZE; / Receive PING buffer#pragma DATA_SECTION (gBufferRcvPong, buffer_sect);Int16 gBufferRcvPongBUFFSIZE; / Receive PONG buffer#pragma DATA_SECTION (leftXmtPing, buffer_sect);Int16 leftXmtPingBUFFSIZE; / Transmit PING buffer#pragma DATA_SECTION (leftXmtPo

19、ng, buffer_sect);Int16 leftXmtPongBUFFSIZE; / Transmit PONG buffer#pragma DATA_SECTION (leftRcvPing, buffer_sect);Int16 leftRcvPingBUFFSIZE; / Receive PING buffer#pragma DATA_SECTION (leftRcvPong, buffer_sect);Int16 leftRcvPongBUFFSIZE; / Receive PONG buffer#pragma DATA_SECTION (rightXmtPing, buffer

20、_sect);Int16 rightXmtPingBUFFSIZE; / Transmit PING buffer#pragma DATA_SECTION (rightXmtPong, buffer_sect);Int16 rightXmtPongBUFFSIZE; / Transmit PONG buffer#pragma DATA_SECTION (rightRcvPing, buffer_sect);Int16 rightRcvPingBUFFSIZE; / Receive PING buffer#pragma DATA_SECTION (rightRcvPong, buffer_sec

21、t);Int16 rightRcvPongBUFFSIZE; / Receive PONG buffer 由以上语句可知,为了实现实时性和左右声道数据的分别处理,定义了12个缓冲区。其中gBufferXmtPing ,gBufferXmtPong 为数据的回放缓冲区; gBufferRcvPing,gBufferRcvPong为数据的接收缓冲区。发送与接收缓冲区均采用pingpong冗余备份方式,以提高数据处理的实时性:当DMA往接收缓冲区pingpong中一个缓冲区存数据时,cpu不用等待,而利用这段时间去处理pingpong中另一个一个缓冲区存数据,对发送缓冲区而言,道理一样。 对每一个接

22、收发送pingpong缓冲区,均配以左右两个临时缓冲区,以将左右声道数据分开来,分别处理。2) DMA初始化DMA_Config dmaRcvConfig = /* config receiver */ DMA_DMACSDP_RMK( /Config DMACSDP register DMA_DMACSDP_DSTBEN_NOBURST, /DSTBEN=00b, 目的方不突发(bursting disabled) DMA_DMACSDP_DSTPACK_OFF, /DSTPACK=0 ,目的方不打包 DMA_DMACSDP_DST_DARAMPORT1, /*DST=01b, 目的方为DA

23、RAM,通过内部存储器口1 */ DMA_DMACSDP_SRCBEN_NOBURST, /SRCBEN=00b, 目的方不突发(bursting disabled) DMA_DMACSDP_SRCPACK_OFF, /DSTPACK=0, 源方不打包 DMA_DMACSDP_SRC_PERIPH, /SRC=11b, 源方为外设,通过外设总线 DMA_DMACSDP_DATATYPE_16BIT /DATATYPE=10b, 传输数据类型为16bit*/ ), /* DMACSDP */ DMA_DMACCR_RMK( /Config DMACCR register DMA_DMACCR_D

24、STAMODE_POSTINC, /DSTAMODE=01b, 目的方寻址模式,访问后目的地址后增加酱每个元素传输完后,地址将增?如果16bit,则地址增加2*/ DMA_DMACCR_SRCAMODE_CONST, /*SRCAMODE=00b, 源方寻址模式,访问后源地址不变*/ DMA_DMACCR_ENDPROG_ON, /ENDPROG=1, DMA寄存器编程结束 DMA_DMACCR_WP_DEFAULT, /*WP=0, 写记录(write posting)禁止,DMA控制器等待来自存储器接口的完成写数的应答*/ DMA_DMACCR_REPEAT_OFF, /*REPEAT=0

25、, 自动初始化Repeat only if ENDPROG = 1*/ DMA_DMACCR_AUTOINIT_OFF, /*AUTOINIT=0, DMA控制器不进行自动初始化*/ DMA_DMACCR_EN_STOP, /EN=0,通道传输禁止 DMA_DMACCR_PRIO_LOW, /此DMA通道的优先级低 DMA_DMACCR_FS_DISABLE, /元素同步,而不是帧同步 DMA_DMACCR_SYNC_REVT1 /*SYNC=101b, DMA同步事件是McBSP1接收事件*/ ), /* DMACCR */ DMA_DMACICR_RMK( DMA_DMACICR_AERR

26、IE_ON, /*AERRIE=1, 当源或目的端口的地址发生错误,DMA向CPU发送通道中断请求*/ DMA_DMACICR_BLOCKIE_OFF, /*0, 当前所有块已经传输到目的端口时,DMA不向CPU发送通道中断请求。*/ DMA_DMACICR_LASTIE_OFF, /*0, 最后一帧时,DMA控制器如何从? DMA不向CPU发送通道中断请求。*/ DMA_DMACICR_FRAMEIE_ON, /1, 当前所有帧已经传输到目的端口时, DMA向CPU发送通道中断请求。 DMA_DMACICR_FIRSTHALFIE_OFF, /0, 当前帧的前一半已经传输到目的端口时,DMA

27、不向CPU发送通道中断请求。 DMA_DMACICR_DROPIE_OFF, /发生同步事件丢弃时, DMA不向CPU发送通道中断请求。 DMA_DMACICR_TIMEOUTIE_OFF /TIMEOUTIE=0. DMA不向CPU发送超时中断(TIMEOUTIE=1, 传输在512个SYSCLK1周期未完成,产生超时中断) ), /* DMACICR */ (DMA_AdrPtr)(MCBSP_ADDR(DRR11), /* DMACSSAL, 源地址低位(LOW), 为McBSP1接收寄存器DRR11 */ 0, /* DMACSSAU, 源地址高位(HIGH),为0 */ NULL,

28、/* DMACDSAL,目的地址低位(LOW) to be loaded by submit */ 0, /* DMACDSAU */ BUFFSIZE, /* DMACEN, 元素个数 */ 1, /* DMACFN,帧个数 */ /*如果(1)For CHIP_5510PG2_x (x=0, 1, 2), 5509A, 5502需要最后4个0参数;*/ /*如果(2)ForCHIP_5509, CHIP_5510PG1_x (x=0, 2)则只需要最后2个0参数*/ 0, /* dmacsfi for (1);DMACFI for (2); */ /DMA通道源帧索引(for 5502)

29、0, /*dmacsei for (1); DMACEI for (2); */ /DMA通道源元素索引(for 5502) 0, /*dmacdfi only for (1)*/ /DMA通道目的帧索引(for 5502) 0 /*dmacdei only for (1)*/ /DMA通道目的元素索引(for 5502);DMA_Config dmaXmtConfig = DMA_DMACSDP_RMK( DMA_DMACSDP_DSTBEN_NOBURST, DMA_DMACSDP_DSTPACK_OFF, DMA_DMACSDP_DST_PERIPH, /DST=11b, 目的方为外设,

30、通过外设总线 DMA_DMACSDP_SRCBEN_NOBURST, DMA_DMACSDP_SRCPACK_OFF, DMA_DMACSDP_SRC_DARAMPORT0, /SRC=00b, 源方为DARAM,通过内部存储器口0 DMA_DMACSDP_DATATYPE_16BIT ), /* DMACSDP */ DMA_DMACCR_RMK( DMA_DMACCR_DSTAMODE_CONST, /DSTAMODE=00b, 目的寻址模式为恒量,即每个元素传输完后,目的地址不变。 DMA_DMACCR_SRCAMODE_POSTINC, /SRCMODE=01b, 源方寻址模式,访问后源地址后增加方式,即每个元素传输完后,地址将增加.如果16bit,则地址增加2 DMA_DMACCR_ENDPROG_ON, DMA_DMACCR_WP_DEFAULT, DMA_DMACCR_REPEAT_OFF, DMA_DMACCR_AUTOINIT_OFF, DMA_DMACCR_EN_STOP, DMA

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1