音频信号的FFT分析.docx

上传人:b****1 文档编号:1337849 上传时间:2022-10-20 格式:DOCX 页数:20 大小:92.18KB
下载 相关 举报
音频信号的FFT分析.docx_第1页
第1页 / 共20页
音频信号的FFT分析.docx_第2页
第2页 / 共20页
音频信号的FFT分析.docx_第3页
第3页 / 共20页
音频信号的FFT分析.docx_第4页
第4页 / 共20页
音频信号的FFT分析.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

音频信号的FFT分析.docx

《音频信号的FFT分析.docx》由会员分享,可在线阅读,更多相关《音频信号的FFT分析.docx(20页珍藏版)》请在冰豆网上搜索。

音频信号的FFT分析.docx

音频信号的FFT分析

音频信号的FFT分析

一、实验目的:

ﻩ2

二、实验内容:

三、实验程序功能与结构说明:

3

四、实验流程图:

五、实验步骤:

ﻩ4

1、实验演示:

ﻩ4

六、实验主要程序:

5

1、主函数:

ﻩ5

2、中断程序:

ﻩ12

3、异步串口初始化程序:

13

4、AD初始化:

ﻩ14

七、实验结果:

ﻩ15

1、SEEDDEC2812单元的D3灯由闪烁变成常暗。

ﻩ15

2、可以看到失真比较大的FFT波形,如下图所示:

15

1)、失真信号及频域图:

15

2)、期信号时域和频域曲线图:

16

八、实验心得:

ﻩ16

 

一、实验目的:

1、熟悉CCS集成开发环

2、熟悉SEED-DTK实验环境

3、加深对DFT算法原理和基本性质的理解

4、学习用FFT对连续信号和时域信号地频谱分析的方法

5、熟悉FFT的算法原理和FFT子程序的算法流程和应用

6、了解DSP处理FFT算法的特殊寻址方式

二、实验内容:

1、DSP的初始化

2、A/D采样

3、FFT的位倒序程序

4、FFT的蝶形运算程序

5、求功率谱的程序

6、串口发送与接收

三、实验程序功能与结构说明:

在数字滤波器实验中,主要包含以下文件:

1、DTK_BPD_FFT.c:

这是实验的主程序,包含了包含定时器中断程序、AD中断程序、FFT参数的初始化,完成与SEED-MMI5402的系统的异步通讯、信号采集与FFT计算。

2、DSP28_Sci.c:

包含量了异步串口初始化程序。

3、DSP28_Adc.c:

包含了AD初始化。

4、DSP28_Defaultlsr.c:

包含了异步串口接收中断服务程序。

5、Cfft32c.asm、cfft32i.asm、rfft32br.asm、rfft32m.asm、rfft32s.asm、rfft32w.asm:

TI源代码。

6、SRAM.cmd:

声明了系统的存贮器配置与程序各段的链接关系。

7、DTK_BPD_FFT.out:

DSP上可执行的程序,即实验程序。

四、实验流程图:

五、实验步骤:

1、实验演示:

在脱机(不接CCS)的情况下,可以首先进行实验的演示。

在实验选项的菜单下,选择FFT实验一项。

先择不使用CCS,确定后,LCD显示屏将显示“程序装载中,请稍侯”,并且用状态条显示程序装载进度,等待装载程序后,SEEDDEC2812单元的D3灯由闪烁变暗。

LCD显示屏将显示“FFT实验装载成功”。

一段时间后,可以看到在LCD上显示FFT前的原始信号与实验后的功率谱图,如下图(a与b)所示:

2、实验的调试:

1)、将DSP仿真器与计算机连接好:

2)、将DSP仿真器的JTAG插关与SEED-DEC2812单元的J1相连接

3)、启动计算机,当计算机启动后,打开SEED-DTKBPD的电源。

观察SEEK-DTK_IO单元的+5V、+3.3V、+15V、-15V的电源指示灯是否均亮,若有不亮的,请断开电源,检查电源。

4)、在实验选项的菜单下,选择定时器实验一项,选择使用CCS。

5)、打开CCS,进入CCS的操作环境。

6)、装入DTK_BPD_FFT.wks调试环境。

7)、进行调度,通过ProbePoints来观察FFT的结果。

六、实验主要程序:

1、主函数:

void main(void)

/*初始化系统*/

ﻩInitSysCtrl();

ﻩ/*关中断*/

DINT;

IER=0x0000;

IFR=0x0000;

/*初始化PIE中断*/

InitPieCtrl();

ﻩ/*初始化PIE中断矢量表*/

ﻩInitPieVectTable();

ﻩ/*初始化SCIA寄存器*/

 InitSci();

  //初始化cputimer

InitCpuTimers();

  

for(i= 0;i<0x104;i++)

ﻩuart[i]=0x5555;

ﻩuarts[i] = 0x5555;

ﻩ}

ﻩfor(i=0;i<32;i++)

{

ﻩﻩsys_statbuff[i]=0;//系统标志buff清0

}

 CommandSave=0;

 

/*设置中断服务程序入口地址*/

EALLOW;//Thisisneeded to writeto EALLOWprotectedregisters

PieVectTable.TXAINT= &SCITXINTA_ISR;

PieVectTable.RXAINT =&SCIRXINTA_ISR;

ﻩPieVectTable.TINT2=&ISRTimer2;

ﻩPieVectTable.ADCINT=&ad;

ﻩEDIS; //Thisisneededtodisable writetoEALLOWprotectedregisters

//

/*开中断*/

ﻩIER|=M_INT9;//SCI中断

IER|= M_INT1;//ADC中断

EINT;//EnableGlobalinterruptINTM

ﻩERTM;ﻩ//EnableGlobalrealtimeinterrupt DBGM

ﻩLED1_ON;

*LED3=0;

ﻩ/*实验主控程序*/

psend = (PuartForDec5416)(&uarts[0]);

precieve = (PuartForDec5416)(&uart[0]);

ﻩpadset=(PAdConfig)(&adset[0]);

/*通知主机,系统准备好*/

ﻩpsend->Length =FRAMLONGTH;

psend->Type=UARTCOMMAND;

ﻩpsend->Data[0]=INITOVER;

ﻩpsend->Mutul=UARTCONT;

uart_send();

for(;;)

ﻩ{ﻩ

if(CommandSave==FFTDATASEND)

ﻩ{

ﻩCommandSave=0;

/*不满buffer的数据*/

ﻩﻩif(datasendlength<= 256)

ﻩ{

ﻩfor(i=0;i<datasendlength;i++)

ﻩﻩ{

ﻩﻩpsend->Data[i] =Ad_data[i+sendcount*256];ﻩﻩ

ﻩﻩ}

ﻩpsend->Length=datasendlength;

ﻩﻩpsend->Type=UARTDATA;

ﻩﻩpsend->Mutul=UARTCONT;

ﻩuart_send();ﻩﻩ

ﻩ}

ﻩelse

ﻩﻩ{

ﻩﻩ/*满buffer数据*/

ﻩfor(k=0; k<256;k++)

ﻩ  {

ﻩﻩ  ﻩpsend->Data[k] = Ad_data[k+sendcount*256];ﻩ

}

ﻩﻩ psend->Length = 256;

ﻩﻩﻩpsend->Type=UARTDATA;

ﻩﻩﻩﻩpsend->Mutul= UARTMUTL;

uart_send();

datasendlength=datasendlength-256;

ﻩﻩﻩ sendcount++; 

ﻩ}

   

ﻩ}

ﻩuart_s=uart_recive();

ﻩ/*返回值  0:

接受完成  ﻩﻩ */

ﻩ/*   1:

数据未准备好        */

ﻩ/*      3:

 较验出错          */

if(uart_s==1)

ﻩﻩ{

ﻩﻩcontinue;

ﻩ}ﻩﻩ

ﻩ/*数据较验出错*/

ﻩﻩif(uart_s==3)

ﻩ{

ﻩfor(i=0;i<0x104;i++)

ﻩﻩ{

ﻩﻩuart[i] = 0x5555;ﻩﻩﻩ

ﻩ}

ﻩﻩ/*通知主机程序通讯出错,准备重发*/

ﻩﻩpsend->Length = FRAMLONGTH;

ﻩpsend->Type=UARTCOMMAND;

ﻩpsend->Data[0]=RECIEVEERROR;

ﻩﻩpsend->Mutul = UARTCONT;

ﻩuart_send();

ﻩﻩ

ﻩﻩcontinue;ﻩ

}

ﻩ/*接收完成*/

ﻩﻩif(uart_s==0)

ﻩ{

ﻩ/*不是命令帧*/

ﻩif(precieve->Type!

=UARTCOMMAND)

ﻩﻩ{

ﻩﻩ/*无效命令*/

ﻩﻩpsend->Length=FRAMLONGTH;

ﻩpsend->Type =UARTCOMMAND;

ﻩﻩﻩpsend->Data[0]= COMMANDNODO;

ﻩpsend->Mutul=UARTCONT;

ﻩﻩuart_send();

ﻩﻩﻩprecieve->Type =UARTCOMMAND;ﻩ

ﻩﻩcontinue;

ﻩ}

}

ﻩﻩ

ﻩﻩﻩ

   /*接收从主机的数据*/

ﻩﻩprecieve =(PuartForDec5416)(&uart[0]);

switch(precieve->Data[0])

ﻩ{

ﻩﻩ/*FFT设置*/

ﻩﻩcaseFFTSET:

ﻩﻩﻩfor(i=0;i<3;i++)

ﻩ{

ﻩadset[i]=precieve->Data[i+1];

ﻩﻩ}

ﻩﻩﻩﻩ/*设置数据发送长度*/

ﻩdatasendlong = padset->SampleLong;

ﻩﻩdatasendlength=3*datasendlong/2;ﻩﻩﻩ

ﻩﻩprecieve->Data[0]= 0;

ﻩﻩbreak;

/*启动AD采样和fft计算*/

ﻩﻩﻩcaseFFTSTART:

ﻩﻩﻩconvcount=0;

ﻩadconvover=0;

ﻩsendcount=0;

ﻩconvfirstN=1000;ﻩﻩﻩ

ﻩ/*AD采样率*/

ﻩﻩswitch(padset->SampleRate)

ﻩﻩ{

ﻩcaseADSAMPL8K:

//0xdﻩ//采样率为8k

ﻩDINT;

ﻩﻩﻩﻩ/*设置CPU*/

ﻩﻩﻩﻩConfigCpuTimer(&CpuTimer2, 150, 125);ﻩ

ﻩﻩﻩﻩﻩStartCpuTimer2();

ﻩﻩ/*开中断*/

ﻩIER|= M_INT14;

ﻩﻩﻩEINT;

ﻩﻩInitAdc();

ﻩﻩﻩﻩbreak;

ﻩcaseADSAMPL44K:

// 0x23ﻩﻩ//采样率为44k

ﻩDINT;

ﻩﻩﻩ/*设置CPU*/

ﻩﻩﻩConfigCpuTimer(&CpuTimer2,150,22);ﻩ

 ﻩﻩﻩStartCpuTimer2();

 ﻩﻩ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

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

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