音频信号的FFT分析.docx

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

音频信号的FFT分析.docx

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

音频信号的FFT分析.docx

音频信号的FFT分析

音频信号的FFT分析

 

一、实验目的:

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、主函数:

voidmain(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;//ThisisneededtowritetoEALLOWprotectedregisters

PieVectTable.TXAINT=&SCITXINTA_ISR;

PieVectTable.RXAINT=&SCIRXINTA_ISR;

PieVectTable.TINT2=&ISRTimer2;

PieVectTable.ADCINT=&ad;

EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters

//

/*开中断*/

IER|=M_INT9;//SCI中断

IER|=M_INT1;//ADC中断

EINT;//EnableGlobalinterruptINTM

ERTM;//EnableGlobalrealtimeinterruptDBGM

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

{

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();

/*开中断*/

IER|=M_INT14;

EINT;

InitAdc();

break;

caseADSAMPL96K:

//0x1d//采样率为96k

DINT;

/*设置CPU*/

ConfigCpuTimer(&CpuTimer2,150,10);

StartCpuTimer2();

/*开中断*/

IER|=M_INT14;

EINT;

InitAdc96k();

break;

default:

break;

}

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

当前位置:首页 > 经管营销 > 经济市场

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

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