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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

北京信息科技大学DSP实验二.docx

1、北京信息科技大学DSP实验二实 验 报 告课程名称 DSP原理与应用 实验项目 FIR算法的DSP实现 指导教师 学 院 信息与通信工程 _专 业 电子信息工程 班级/学号 学生姓名 实验日期 成 绩_ 实验2 FIR算法的DSP实现一、实验目的1. 掌握汇编语言的编程方法。2. 掌握C语言和汇编语言的混合编程。3. 利用MATLAB设计FIR滤波器。4. 编写以浮点和Q15格式产生混合波形数据的函数。5. 编写C语言浮点实现FIR滤波算法函数。6. 编写C可调用汇编语言定点实现FIR滤波器算法函数。7. 使用CCS图形显示窗口观察和分析信号波形及其频谱。8. 进行代码性能测评。二、实验仪器及

2、工具计算机,安装Windows XP 操作系统、MATLAB 7.0.1、TI 的TMS320C5000 DSP 的开发软件 CCS2.21;ICETEK-VC5509教学实验箱。三、实验内容1 利用MATLAB设计FIR滤波器,以浮点和Q15格式导出滤波器系数。2 FIR算法的TMS320C55x DSP的C语言浮点及汇编语言定点实现。四、实验步骤1. 编写MATLAB程序,利用MATLAB设计FIR低通或高通滤波器,以浮点和Q15格式导出滤波器系数。例:利用kaiser窗设计一个低通FIR数字滤波器,通带的范围是0Hz到1100Hz, 阻带的范围是1600 Hz到4000 Hz,通带的波纹

3、最大为0.03,阻带的波纹最大为0.03 。信号的抽样频率为8000 Hz。可根据信号的频率更改滤波器的频率。2. 设置CCS为“C55x Cycle Accurate Simulator”软件仿真模式,打开CCS,创建工程,编写.cmd文件,编写主程序文件。编写以浮点和Q15格式产生混合波形数据的函数。如产生抽样频率为8000 Hz,600Hz、2000 Hz、2800 Hz的三种频率的混合波形数据,其中混合频率可以自行确定。添加文件到工程中。编译、调试、链接、加载、运行程序,使用观测窗查看波形数据;选择菜单ViewGraphTime/Frequency,在弹出的“Graph Propert

4、y Dialog”对话框中进行相应的配置显示产生波形的时域和频域图。3. 编写C语言浮点实现FIR滤波算法函数。在主程序文件中增添C语言浮点实现FIR滤波算法的模块,这其中包括导入MATLAB设计的滤波器浮点系数。编译、调试、链接、加载、运行程序,选择菜单ViewGraphTime/Frequency,在弹出的“Graph Property Dialog”对话框中进行相应的配置显示滤波系数和输出信号的时域图和频域的幅度和相位图。并利用Profiler工具测试函数大小及滤波时间。4. 编写C可调用汇编语言定点实现FIR滤波器算法函数。利用单乘法单元(MAC)定点实现块FIR滤波器算法。编译、链接

5、、加载、运行程序,选择菜单ViewGraphTime/Frequency,在弹出的“Graph Property Dialog”对话框中进行相应的配置显示滤波系数和输出信号的时域图和频域的幅度和相位图。利用Profiler工具测试函数大小及滤波时间,并与C语言的浮点实现进行比较。5. 设置CCS为“C5510 Device Simulator”,利用Profiler工具测试函数大小及滤波时间。观察程序运行状况,与以上结果对比分析。6. 再次将设置CCS为“C55x Cycle Accurate Simulator”软件仿真模式,并保存退出,打开CCS 2(C5000)集成开发环境,打开工程,将

6、滤波系数替换为高通滤波,运行程序,选择菜单ViewGraphTime/Frequency,在弹出的“Graph Property Dialog”对话框中进行相应的配置显示滤波系数、输出信号的时域图和频域的幅度和相位图。五、实验截图: 图(1) MATLAB实现低通滤波器 图(2)混合波形的时域和频域图形 图(3)C语言实现FIR低通滤波后的时域、频域波形 图(4)汇编语言实现FIR低通滤波后的时域、频域波形 图(5)Profiler工具测试函数大小及滤波时间六、实验心得 本次实验考察了fir滤波器在DSP中的实现算法,通过MATLAB导出滤波器的系数,然后再利用DSP中的C语言算法或汇编算法可

7、以实现对于混合信号的滤波作用。通过这样的一次实验,我掌握了一些DSP软件调试中的方法,如利用观测窗验证部分变量的值的变化,就可以判断算法中运行情况,还有就是断点和探针的应用。实验中还用到了波形发生函数,将几个不同的频率的正弦波混合到一起,相信通过这样的一次编程,以后遇到相同的问题就可以顺利解决了。在实验中设计了一个低通滤波器,相类似的可以设计出高通、带通和带阻的。附:程序代码1、MATLAB设计低通滤波器clc,close allfsamp=8000; %采样率fcuts=1100 1600 ; %截止频率 mags=1 0; %低通滤波devs=0.03 0.03; %波纹系数N,Wn,BE

8、TA,TYPE = KAISERORD(fcuts, mags , devs ,fsamp);B = FIR1(N, Wn, TYPE, kaiser( N+1,BETA ) );plot(B),figure,freqz(B) %浮点系数的导出f1=fopen(B.txt,w);fprintf(f1,%9f, B);fclose(f1); %Q15格式系数的导出f2=fopen(BQ15.txt,w);BQ15=round(B.*32768); %朝最近的整数取整fprintf(f2,%6d, BQ15);fclose(f2);2、 -l rts55.lib/*Linker command f

9、ile for Experiment 2(C55x memory map)*/MEMORYMMR : origin = 0000000h, length = 00000c0hSPRAM : origin = 00000c0h, length = 0000040hDARAM0 : origin = 0000100h, length = 0003F00hDARAM1 : origin = 0004000h, length = 0004000hDARAM2 : origin = 0008000h, length = 0004000hDARAM3 : origin = 000c000h, length

10、 = 0004000hSARAM0 : origin = 0010000h, length = 0004000hSARAM1 : origin = 0014000h, length = 0004000hSARAM2 : origin = 0018000h, length = 0004000hSARAM3 : origin = 001c000h, length = 0004000hSARAM4 : origin = 0020000h, length = 0004000hSARAM5 : origin = 0024000h, length = 0004000hSARAM6 : origin = 0

11、028000h, length = 0004000hSARAM7 : origin = 002c000h, length = 0004000hSARAM8 : origin = 0030000h, length = 0004000hSARAM9 : origin = 0034000h, length = 0004000hSARAM10 : origin = 0038000h, length = 0004000hSARAM11 : origin = 003c000h, length = 0004000hSARAM12 : origin = 0040000h, length = 0004000hS

12、ARAM13 : origin = 0044000h, length = 0004000hSARAM14 : origin = 0048000h, length = 0004000hSARAM15 : origin = 004c000h, length = 0004000hVECS : origin = 0ffff00h, length = 00100h /* reset vector */SECTIONSvectors : VECS /* interrupt vector table */.cinit : SARAM0.text : SARAM1.stack : DARAM0.sysstac

13、k: DARAM0.sysmem : DARAM1.data : DARAM1.bss : DARAM1.const : DARAM1fir_coef : SARAM0 /* user defined sections */fir_data : DARAM2input : SARAM0output : SARAM0 align 0x4 /* boundary alignment */fir_code : SARAM13、正弦波产生文件#include #define T 0.000125 /* 8000 Hz sampling frequency */#define f1 600 /* 800

14、 Hz frequency */#define f2 2000 /* 1800 Hz frequency */#define f3 2800 /* 3300 Hz frequency */#define PI 3.1415926#define two_pi_f1_T (2*PI*f1*T) /* 2*pi*f1/Fs */#define two_pi_f2_T (2*PI*f2*T) /* 2*pi*f2/Fs */#define two_pi_f3_T (2*PI*f3*T) /* 2*pi*f3/Fs */#define a1 0.333 /* Magnitude for wave 1 *

15、/#define a2 0.333 /* Magnitude for wave 2 */#define a3 0.333 /* Magnitude for wave 3 */void signal_gen(int *x, float *y, int N) float temp;int i;for (i=0; i=0) xi = (int)(0x8000*temp+0.5);/else xi=(int)(0x8000*temp-0.5);xi=temp=0?(int)(0x8000*temp+0.5):(int)(0x8000*temp-0.5);/浮点转Q15定点并且四舍五入,采用条件运算符/

16、C语言优先级由高到低:算术运算符关系运算符逻辑运算符/条件运算符赋值运算符逗号运算符yi=temp;4、主函数/fircasm.cint input160;float inputfloat160;#define M 128 /* Input sample size */#define L 27 /* Number of FIR filter coefficients */#define SN L /* Signal buffer size */extern void signal_gen(int *x,float *y, int N);extern void firc(float *, int

17、, float *, int, float *, float *);extern unsigned int fir(int *, unsigned int, int *,unsigned int,int *, int *, unsigned int);/* Define DSP system memory map */#pragma DATA_SECTION(LP_h, fir_coef);#pragma DATA_SECTION(x, fir_data);#pragma DATA_SECTION(in, input);#pragma DATA_SECTION(index, fir_data)

18、;#pragma DATA_SECTION(out, output);#pragma DATA_SECTION(LP_hfloat, fir_coef);#pragma DATA_SECTION(xfloat, fir_data);#pragma DATA_SECTION(infloat, input);#pragma DATA_SECTION(outfloat, output);#pragma DATA_SECTION(inputfloat, input);#pragma DATA_SECTION(input, input);#pragma CODE_SECTION(main, fir_co

19、de);/* Low-pass FIR filter coefficients */static int LP_hL= 291, 62, -393, -576, -91, 768, 1066, 115, -1540, -2155, -131, 4368, 9066, 11069, 9066, 4368, -131, -2155, -1540, 115, 1066, 768, -91, -576, -393, 62, 291,;/ 低通,通带的范围是0Hz到1100Hz, 阻带的范围是1600 Hz到4000 Hzstatic float LP_hfloatL=0.008868,0.001896

20、,-0.011995,-0.017569,-0.002763,0.023447, 0.032522, 0.003501,-0.047009,-0.065779,-0.003996,0.133297,0.276677, 0.337806, 0.276677,0.133297,-0.003996,-0.065779,-0.047009, 0.003501,0.032522, 0.023447,-0.002763,-0.017569,-0.011995, 0.001896,0.008868,;/ 低通,通带的范围是0Hz到1100Hz, 阻带的范围是1600 Hz到4000 Hzint input1

21、60;float inputfloat160;int xSN; /* Signal buffer */unsigned int index; /* Signal buffer index */int outM; /* Output buffer */int inM; /* Input buffer */float infloatM;float outfloatM;float xfloatL;void main(void)unsigned int i,j;signal_gen(input,inputfloat, 160);/* Initialize filter signal buffer */

22、for (i=0; iSN;i+)xfloati=0;j=0;for (i=0; iSN;i+)xi=0;index=0;for (;)for (i=0; iM; i+)ini=inputj+; / Get a buffer of samplesif (j = 160)j=0;for (i=0; i VECS /* interrupt vector table */.cinit : SARAM0.text : SARAM1.stack : DARAM0.sysstack: DARAM0.sysmem : DARAM1.data : DARAM1.bss : DARAM1.const : DARAM1fir_coef : SARAM0 /* user defined sections */fir_data : DARAM2input : SARAM0output : SARAM0 align 0x4 /* boundary alignment */fir_code : SARAM1

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

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