文档详情

利用DSP实现信号频谱动态分析

ni****g
实名认证
店铺
DOC
77.50KB
约19页
文档ID:459605519
利用DSP实现信号频谱动态分析_第1页
1/19

撰写人:___________日 期:___________电工电子教学基地DSP课程设计实验报告实验名称: 利用DSP实现信号频谱动态分析 指导老师:高海林 实验人员:邱浩然 07214016 电子0701 刘海峰 07214015 电子0701 利用DSP实现信号频谱动态分析一、实验内容 1.使用C语言编写信号实时谱分析程序,从MIC接口输入1KHZ正弦信号,分别利用CCS图形观察工具和虚拟示波器观察信号幅度频谱2.输入不同频率的信号和混合频率信号,观察信号的幅度频谱,分析并比较与实际理论幅度频谱的差别二、实验目的 1、 掌握FFT的算法原理和基本性质2、 掌握利用DSP系统对连续信号进行幅度频谱分析3、 学会设置断点并利用CCS和虚拟仪器观察实时信号的频谱4、 熟练运用C语言进行编程实现实时信号的频谱分析5、 熟练使用CCS5402的操作方法和调试检验方式三、实验器材 DSP5402开发板,CCS软件环境,电源,电脑与板接口连线四、实验原理 1、信号的实时采集与传输 本实验利用DMA通道2与McBSP1通道结合来读取A/D转换的数据,利用DMA通道3 与McBSP1道结合来将处理后的数据发送至D/A。

选择McBSP1通道的接受寄存器DRR11(41H)DMA传送数据的首地址,并选择DMA源地址工作在不调整模式,选择McBSP1接收事件为DMA同步事件,以实现DMA和McBSP的结合A/D转换的数据按McBSP1设置被送到DSP内部接受寄存器DRR11中,再由DMA通道2将DRR11中的数据读到指定数据存储区&p-inp中完成数据的采集DMA在传输外部来的数据时不会影响CPU的运行,当DMA通道2采集完一组数据后产生一个DMA中断事件中断CPU,来通知CPU对其进行处理,CPU通过对数据进行倒序和序列FFT处理并计算频谱,此时DMA通道2可以按照设定继续采集下一组数据,实现数据与CPU的并行处理 当一组数据处理完成后,将数据存放在数据存储区& out_buffer+frame*0x100中,选择& out_buffer+frame*0x100为DMA通道3传送数据的首地址,并选择源地址工作在不调整模式选择McBSP1通道的发送寄存器DRR11(43h)为DMA通道3传送数据的目地地址,并选择DMA源地址工作在不调整模式,选择McBSP1接受事件为DMA同步事件,以实现DMA与McBSP的结合。

   待分析的外部模拟信号首先需经A/D转换成数字信号,然后通过DMA实时传输进入DSP系统,由FFT进行信号的频谱分析输入信号转换成数字信号后利用DMA通道2进行传输,信号的输出利用DMA通道3进行传输,因此需对DMA的通道2和通道3进行初始化2、 FFT算法实现 快速傅里叶变换FFT是DFT的快速算法直接计算一个N点序列x【k】的DFT X[m]需要N次复数运算,而利用基 2-时域抽取算法只需 次复数乘法运算 ,可见FFT算法能有效提高DFT计算速度本实验直接调用DSPLIB库中的RFFT函数,其可以实现基2时域抽取FFT算法由于输入输出的次序不同,所以计算频谱时需要对信号数据进行倒序倒序算法可以调用DSPLIB库中的cbrev函数在利用DSPLIB库是,工程中要添加库文件54xdsp.lib,C源程序重要包含头文件dsplib.h 序列倒序算法函数cbrev()的调用格式是:void cbrev(DATA*x,DATA*r,unshort n) 函数rfft()的调用格式是:void rfft(DATAy,n,short scale)   五、实验程序及注释:1、C语言源程序如下: 主程序:FFTlab。

C /*****************************************************************************//* FIRlab.C AIC,McBSP,DMA initialization for FIR lab Filter */ /* *//* Goal: This code performs the following functions: *//* - toggle the three LEDs on the DSK *//* - setup AIC (CODEC) parameters *//* - initialize DMA Channel (CH2-input) *//* - turn on interrupts *//* - run forever (waiting for DMA interrupts to transfer data) *//* *//* Author: Scott Bland Date: 03/20/2000 *//*****************************************************************************/ /*****************************************************************************//* Include Files *//*****************************************************************************/#include #include #include #include #include #include /*****************************************************************************//* Function Prototypes *//*****************************************************************************/void delay(s16 period);extern void DMAC2ISR();/*****************************************************************************//* Global Variables *//*****************************************************************************/HANDLE hHandset;unsigned int dmsefc, dmmcr, dmctr, src_addr, dst_addr;unsigned int dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr;/* Create specific data section for buffer (symbol, section_name) */#pragma DATA_SECTION(inp_buffer,"audio_buffer");DATA inp_buffer[0x200];/* Create specific data section for buffer (symbol, section_name) */#pragma DATA_SECTION(out_buffer,"outt_buffer");DATA out_buffer[0x200];/* declare and initialize two variables for DMAC ISRs */int frame=0; int flag=0;int temp; int currbuff = 0;/* delayptr holds the address of the start of the delay buffer */ interrupt void DMAC2ISR();/*****************************************************************************//* MAIN *//*****************************************************************************/void main(){ s16 cnt=2; /* These are the items that BIOS will set when we use it */ 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_LED1); //切换LED指示灯1的显示状态 delay(1000); brd_led_toggle(BRD_LED2); //切换LED指示灯2的显示状态 delay(1000); } /* Open Handset Codec */ hHandset = codec_op。

下载提示
相似文档
正为您匹配相似的精品文档