cbrev(x,x,Nx/2); //将导入的数据按一定方式,打乱排序,即码位倒序运算
rfft(x,Nx,scale); //调用傅里叶变化函数,进行256点归一化FFT运算 y[0]=x[0]; j=1;
for(i=2;i y[j]=sqrt(pow(x[i],2)+pow(x[i+1],2)); //将相邻两点的数据求算术平方后赋值给y j++; //j自加1 } return; } static void dataIO(void) //定义函数 { return; } 2、中断函数: .ref _c_int00 ;Rest .sect \ rs: BD _c_int00 nop nop ;Rest nmi: .space 4*16 ;NMI,SINT16 sint17:.space 4*16 ;SINT17 sint18: .space 4*16 ;SINT18 sint19: .space 4*16 ;SINT19 sint20: .space 4*16 ;SINT20 sint21: .space 4*16 ;SINT21 sint22: .space 4*16 ;SINT22 sint23: .space 4*16 ;SINT23 sint24: .space 4*16 ;SINT24 sint25: .space 4*16 ;SINT25 sint26: .space 4*16 ;SINT26 sint27: .space 4*16 ;SINT27 sint28: .space 4*16 ;SINT28 sint29: .space 4*16 ;SINT29 sint30: .space 4*16 ;SINT30 int0: .space 4*16 ;INT0,SINT0 int1: .space 4*16 ;INT1,SINT1 int2: .space 4*16 ;INT2,SINT2 tint0: .space 4*16 ;INT0,SINT3 10 brint0: .space 4*16 bxint0: .space 4*16 dmac0: .space 4*16 dmac1: .space 4*16 int3: .space 4*16 hpint: .space 4*16 brint1: .space 4*16 bxint1: .space 4*16 ;BXINT0,SINT4 ;BXINT0,SINT5 ;DMAC0,brint2,SINT6 ;DMAC0,brint2,SINT7 ;INT3,SINT8 ;HPINT1,SINT9 ;BRINT1 or DMAC2,SINT10 ;BRINT1 or DMAC3,SINT11 dmac4: .space 4*16 ;DMAC4,SINT12 dmac5: .space 4*16 ;DMAC5,SINT13 rsvd1: .space 4*16 ;reserved rsvd2: .space 4*16 ;reserved .end 3、链接文件: MEMORY { PAGE 0: RESERVER: origin = 0x00, FFT_VECT: origin = 0x80, PROG: origin = 0x100, PAGE 1: DATA_1: origin = 0x1100, DATA_2: origin = 0x2000, } SECTIONS { .vectors: {} > FFT_VECT PAGE 0 .text: {} > PROG PAGE 0 .data: {} > PROG PAGE 0 .bss: {} >DATA_2 PAGE 1 .cinit: {} >PROG PAGE 0 .stack: {} > DATA_2 PAGE 1 .input:{} > DATA_2 PAGE 1 ,align(512) .input_tempt:{} > DATA_2 PAGE 1 .output: {} > DATA_2 PAGE 1 .sintab:{} > DATA_1 PAGE 1 .const: {} > PROG PAGE 0 } 11 len = 0x80 len = 0x80 len = 0x1000 len = 0x0e00 len = 0x2000 七、实验结果及体会 实验结果: 实验体会: 傅里叶变换是将信号从时域的一种变换形式,是信号处理领域中的一种重要的分析工具,所以学好FFT变换在DSP技术中很重要。 在这次实验中,进一步熟悉了CCS软件的使用,实验过程中感觉自己的基础知识很不牢固,需要多加强对CCS软件的操作,对编译环境的熟悉对实验的完成和理解则有更加的帮助。感觉要想学好DSP这门课程,必须脚踏实地的一步步努力的学好基础知识,才能更加顺利的完成实验。 12 三、基于DSPLib的滤波器程序设计 一、实验目的 1、了解FIR、IIR数字滤波器的原理; 2、掌握FIR、IIR数字滤波器的设计方法。 3、熟悉对DSPLib的调用方法以及数字滤波器在DSP系统中的实现; 二、实验内容(要求) 现有连续时间信号x(t)?2000cos(2000?t)?4000cos(4000?t),已基于采样频率fs?16000Hz对x(t)采样,获得离散数据x(n)。设计一个FIR(或IIR)数字低通滤波器,对数据x(n)滤波,滤除x(n)中2000Hz频率分量,保留1000Hz频率分量。 要求: 1、设计FIR(或IIR)数字低通滤波器,得到滤波器的有关参数; 2、基于DSPLib编制DSP的C语言程序,实现上述低通滤波,并对数据x(n)滤波。 3、利用CCS中VIEW菜单中的Graph调试工具观察信号时域波形及其频谱。 三、背景知识 1、FIR、IIR数字滤波器的基本原理。(参阅《数字信号处理》教材)。 2、MATLAB的数字滤波器设计工具FDAtool。(详细请参阅MATLAB帮助文档。)2.1 启动滤波器设计分析器 在MATLAB的start菜单中选择Toolboxes->Filter Design->Filter Design & Analysis Tools(fdatool),或者在命令行中输入fdatool来启动滤波器设计分析器。启动后界面如图2.1所示: 13 图2.1 2.2 滤波器设计 在选项中选择或输入滤波器参数,然后点击”Design Filter”按钮完成滤波器设计。设计成功后的结果如图2.2所示。 图2.2 2.3 导出FIR滤波器系数。 ? 在fdatool中,选择Targets->Code Composer Studio?IDE。 ? 在出现的对话框中选择输出文件类型为C.header file,输出系数类型为 signed 16-bit integer,如图2.3所示。 ? 点击OK按钮,选择路径,即可输出前一步设计出的FIR滤波器系数表。 图2.3 3、DSPLib的应用 CCS提供DSPLib,其中包含了基本的数学计算和数字信号处理常用算法模块的函数,可直接调用这些函数实现一些数字信号处理算法。本实验主要使用了fir、firs、firs2、iircas4、iircas5、iircas5I等函数实现数字滤波。有关这些函数的说明请参阅《dsplib中文版__TMS32054X_函数库中文用户指南.pdf》 实验程序流程图为: 14