1、5.3实验中的部分程序讲解 126.在CCS3.3环境下调试。编译,下载源程序 177.实习心得 218.参考文献 22基于DSP的实时FFT的实现1.设计目的1.加深对DFT算法原理和基本性质的理解;2.熟悉FFT的算法原理和FFT子程序的算法流程和应用;3.学习用FFT对连续信号和时域信号进行频谱分析的方法;4.学习DSP中FFT的设计和编程思想;5.学习使用CCS的波形观察窗口观察信号波形和频谱情况。2.设计要求及方案在DSP中用 C语言进行编程,实现FFT运算,对输入输出信号进行频谱分析。方案一: 基于DSPLIB库函数的FFT实现,DSPLIB库函数提供的FFT运算程序全部由汇编语言
2、编写,充分发挥 DS P的硬件特性 。运算速度很快 。DSPLIB函数库提供FFT运算为基 2时间抽取算法。码位倒序的作用是使在时域采样的按自然序列排列的 N点输人数据的排列顺序发生变化 ,然后作为FFT运算的输入数据,以使FFT运算结果按自然序列排列。方案二: 基于C语言的FFT实现,上面讲了使用CCS中的库函数实现FFT运算,我们还可以可以使用C语言实现FFT预算。由于C语言不支持复数预算,所以所编写的C程序是将复数的转换为实数运算。其程序也可以实现基2时间抽取运算。综合考虑,我们选择方案一,因为方案一的实现较简单且同样可以达到比较好的实验效果,DSPLIB库中FFT的算法经典,所消耗的时
3、间最少。3.硬件设计过程3.1设计原理快速傅里叶变换傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。离散傅里叶变换(DFT)是傅里叶变换在离散系统中的表示形式。但是DFT的计算量非常大, FFT就是DFT的一种快速算法, FFT将DFT的N2 步运算减少至 ( N/2 )log2N步。离散信号x(n)的傅里叶变换可以表示为,式中的WN 称为蝶形因子,利用它的对称性和周期性可以减少运算量。一般而言,FFT算法分为时间抽取(DIT)和频率抽取(DIF)两大类。两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。本实验以时间抽取方法为例。时
4、间抽取FFT是将N点输入序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。偶序列为:x(0), x(2), x(4), x(N-2);奇序列为:x(1), x(3), x(5), x(N-1)。这样x(n) 的N点DFT可写成:考虑到WN的性质,即因此有:或者写成:由于Y(k) 与Z(k) 的周期为N/2,并且利用WN的对称性和周期性,即:可得:对Y(k) 与Z(k) 继续以同样的方式分解下去,就可以使一个N点的DFT最终用一组2点的DFT来计算。在基数为2的FFT中,总共有log2(N) 级运算,每级中有N/2 个2点FFT蝶形运算。单个蝶形运算示意图如下:以N8为例,时间抽取FFT的信
5、号流图如下: 从上图可以看出,输出序列是按自然顺序排列的,而输入序列的顺序则是“比特反转”方式排列的。也就是说,将序号用二进制表示,然后将二进制数以相反方向排列,再以这个数作为序号。如011变成110,那么第3个输入值和第六个输入值就要交换位置了。本实验中采用了一种比较常用有效的方法完成这一步工作雷德算法。3.2硬件设计步骤3.2.1 McBSP多通道缓冲串行口的设置3.2 1McBSP的功能结构图图一MCBSP是DSP芯片的标准内部外设,可以提供收发双向串行通信,接收双缓冲,改善三缓冲寄存器,有独立的收发时钟,帧同步信号,可直接与多种格式装置连接,如AC97,I2S和SPI等。最多可发送/接
6、收128个通道数据。数字字长从8、12、16、20、24、32位可变。可提供A律或u律压缩,其时钟、帧同步极性、频率可编程。本设计中是使用它进行串口通讯,把AIC23的处理的语音数据发送到电脑和DSP控制器。VC5402具有两个McBSPS,每个都有如图一所示的结构。VC5510具有三个McBSPS,结构大致一样。 VC5402的McBSP又以下特殊性能全双工通信模式 双缓冲数据寄存器,允许连续的数据流传输 独立的帧信号和时钟信号来驱动接收和发送模块 可以直接与以下接口连接: T1/E1 帧发生器 MVIP开关兼容设备以及 ST-BUS总线设备 IOM-2设备 AC97 设备 串行外设接口(S
7、PI) 最多128 通道的发送和接收,多数据位宽选择:8位、12 位、16位、20位、24位和32位其相关寄存器的简要说明RSR、RBR和DRR为三组接收缓冲寄存器,XSR和DXR是两组发送缓冲寄存器,compand为语音的A律、u律压缩扩展器,其它的为MCBSP控制寄存器。DR和DX分别为MCBSP的数据接收、发送端,CLKX,CLKR分别是MCBSP的发送时钟与接收时钟,FSX,FSR分别是MCBSP的发送、接收帧同步,CLKS是系统时钟,XINT,RINT是CPU的发送、接收完毕中断。3.2.2McBSP的设置步骤McBSP在使用过程中,正确配置 McBSP接口可以分为以下几个步骤: 复
8、位McBSP接口的接收和发送单元 配置McBSP接口的工作模式 配置McBSP接口相关控制信号的频率、相对延迟、时钟源等 设定McBSP接收和发送数据的位宽 清空McBSP接口的接收和发送相关寄存器 根据实际需要编写 McBSP接收、发送或其它中断处理函数 在中断向量表中添加相应的跳转指令 清零相应的中断标志寄存器 使能相应的中断位和全局中断 启动 McBSP3.2.3 AIC23的设置3.2 .3.1 音频模块AIC23结构AIC23是德州仪器公司(TI)生产的高性能音频A/D、D/A放大电路。外围接口工作电压为3.3V,内核工作电压是1.5V,在48kHz采样率条件下,A/D变换信噪比可达
9、100dB,其控制口可由硬件设置为同步置口(SP2)模式或两线制(2-wire),音频数据接口可采用I2S格式、DSP格式、USB格式及最高位或最低位数据调整格式。音频数据字长可设置为16、24、20、32位,输出可直接驱动耳机,在32条件下输出可达30mW。内置前置放大器及偏置电路可直接连接麦克风。该芯片功耗很低,在休眠(power-down)状态下,功耗小于15uW。AIC23的内部结构框图如图二所示图二AIC23有两个数字接口,其一是由CS(控制信号)、SDIN(信号数据输入)、SCLK(信号时钟)和MODE(模式)构成的数字控制接口,通过它将芯片的控制字写入AIC23,从而控制AIC2
10、3功能;另一组是由LRCIN(左右声控制输入)、DIN(数据输入)、LROUT(左右声输出)、DOUT(数据输出)和BLCK(时钟)组成的数字音频接口,AIC23的数字音频信号从这个接口接收或发出。在模拟信号接口方面,AIC23有四组,一是由RLINEIN(右声线入)和LLINEIN(左声线入)组成的线路输入接口,其内部带可控增益放大器及静音电路,其最大输入模拟信号为1VRMS;第二组是由MICIN(麦克输入)构成的MIC接口,内部包含1个5倍固定增益放大器及020dB可变增益放大器,该信号与线路输入信号(LINEIN)通过内部模拟开关选择送往A/D变换电路;第三组是由RHPOUT(右声话音输
11、出)和LHPOUT(左声话音输出)组成的耳机驱动电路,在电源电压3.3V、负载32的条件下输出功率为30mW,音量从+6dB-73dB可控,其输入信号来自内部的D/A变换电路同时混合MIC信号,也可放大线路输入信号(即Bypass功能);第四组是模拟接口ROUT(右声输出)和LOUT(左声输出),其信号来源于AIC23内部D/A变换电路,标称输出信号为1V有效值(1Vrms)。 AIC23内部还包含两个A/D、D/A变换器,其字长可以是16、20、24、32,同时AIC23内部的时钟可以通过XTI(晶振时钟输入)、XTO(时钟输出)和外接晶振构成时钟,也可以由外部直接输入时钟信号。 AIC23
12、内部还包含有MIC偏置电路,使用外接MIC无需外置偏置电路。由上面可见AIC23是一种高性能的音频录放接口芯片。AIC23与DSP的接口图三是AIC23与VC5402的接口连接图三AIC23的通讯方式AIC23的外部硬件接口分为模拟口和数字口。设计人员需要一种办法来详细说明功率意图,模拟口是用来输入输出音频信号的,最后将2个放大后的信号通过SAR(逐次逼近模数转换器)式的ADC采样算出ISENSOR的值。支持线路输入和麦克风输入;它能够支持几乎所有的工作平台和目标处理器,有两组数字接口,然后进行编译和调试。其一是由CS、SDIN、SCLK和MODE构成的数字控制接口。如与U盘直接通信等设备是完
13、全有必要在原来设备的基础上扩展USB主机端口。AIC23是一块可编程的音频芯片,在彩色LCD上,通过数字控制口将芯片的控制字写入AIC23内部的寄存器,而45nm器件模板成本会超过3百万美元。如采样率设置,大大提高了系统的可靠性和安全性。工作方式设置等,这些工具需要对信号进行适当缓冲,共有12个寄存器。AIC23通过数字音频口与DSP的McBSP0完成数据的通信,在本设计中,DSP做主机,I/O和时钟电路占全部活动功耗的1/3,AIC23做从机。1 系统结构框图及视频数据采集原理视频数据采集系统结构如图1所示。主机提供发送时钟信号BCLKX0和发送帧同步信号BFSX0。USB设备端口作为与PC
14、机通信的接口。在这种工作方式下,把多媒体资料在各式各样的家庭网络媒体终端上展示出来,接收时种信号BCLKR0和接收帧同步信号BFSR0实际上都是由主机提供的。以下称由BF537的MAC控制器与物理层接口芯片LAN8187构成的以太网通道为主网络通道。AIC23软件实现部分将McBSP配置为SPI总线接口,其中McBSP0以SPI接口方式与AIC23的控制接口相连,设定为主动模式,负责对AIC23内部寄存器进行配置,产生位同步信号,帧同步信号,发送16bit单帧,不接受数据,McBSP1负责将DSP产生的数字序列传送给AIC23 McBSP1设定为从动模式,为同步,帧同步信号由AIC23产生。其
15、流程图如图四所示。图四4.FFT软件设计的实现4. 1 FFT算法基本原理 有限长序列x(n)及其频域表示X(k)可由以下离散傅立叶变换得出(2.1)称为离散傅立叶正变换,式(2.2)称为离散傅立叶反变换,x(n)与x(k)构成了离散傅立叶变换对。根据上述公式,计算一个X(k),需要N次复数乘法和N-1次复数加法,而计算全部x(k)(0 kN一1),共需要N2次复数乘法和N(N-1)次复数加法。实现一次复数乘法需要四次实数乘法和两次实数加法,一次复数加法需要两次实数加法,因此直接计算全部x(k)共需要4N2次实数乘法和2N(2N-1)次实数加法。当N较大时,对实时信号处理来说,对处理器计算速度
16、有十分苛刻的要求,于是如何减少计算离散傅里叶变换运算量的问题变得至关重要。为减少运算量,提高运算速度,就必须改进算法。计算DFT过程中需要完成的运算的系数里,存在相当多的对称性。通过研究这种对称性,可以简化计算过程中的运算,从而减少计算DFT所需的时间。具有以下固有特性:利用带的上述特性,将x(n)或x(k)序列按一定规律分解成短序列进行运算,这样可以避免大量的重复运算,提高计算DFr的运算速度。算法形式有很多种,但基本上可以分为两大类,即按时间抽取(Decimation In Time,DIT)FFT算法和按频率抽取(Decimation In Frequency,DIF)FFT算法。4.2
17、FFT程序设计本程序FFT的实现首先是使用雷德算法对输入信号序列进行倒序重排,然后再进行L级递推计算。雷德算法流程图如图五:图五 FFT数据倒位流程图雷德算法是实现倒序位的一种方法。我们假设A(I)表示存放自然顺序输入数据的内存单元,A(J)表示存放倒序位的内存单元,I,J=0,1,N-1.按倒序位的规律,当I=J时,不用变址,当IJ时,需要变址。但是当IJ时,就不需要再变址了,否则变址两次等于不变址。L级递推流程图如图六:图六 L级递推流程图L级递推算法的原理是根据FFT每级有N/2个蝶形结,第M级有2M-1种蝶形运算;由最后一级向前每推进一级,则系数就取后一级系数中偶数序号那一半;蝶形结两
18、个节点间的间距为2M-1。其中共有三个循环:外层循环控制L级的顺序运算:内层的两个循环控制同一级(M相同)各蝶形结的运算,其中最内层的一层循环控制同一种蝶形结的运算,二中间一层的循环则控制不同种蝶形结的运算。I和IP是一个蝶形结的两个节点。基-2按时间抽取流程图:图七 基-2按时间抽取流程图上图表示的基-2按时间抽取流程图,其流程是先进行倒序,在进行L级的运算,倒序位的实现是用雷德算法,再进行L级的运算。4.3信号发生模块的FFT处理数字滤波实验都需要设置实验箱信号源。通过液晶和按键,设置信号源。菜单路径为:“系统设置”“信号发生器设置”。在“信号发生器设置”这一菜单下:“通道”设为“0”;“
19、信号类型”可根据需要任意选择;“信号频率”和“信号振幅”可在屏幕下方“有效输入”限定的范围内任意输入,建议“信号振幅”设为1000左右,“信号频率” 设为300左右;电压偏移”设为0;“信号发生器开关”设为“开启”。此时便有正弦信号输入音频芯片AIC23的输入端(利用此芯片同样可以进行AD采集)。5.功能程序:5.1 实时FFT程序流程图5.3实验中的部分程序讲解5.3.1 数字音频模块#include #include CODEC.h#undef CODEC_ADDR#define CODEC_ADDR 0x1A/ Config CODEC control registers/ 数字音频接口
20、格式设置 / AIC23为主模式,数据为DSP模式,数据长度16位 Uint16 Digital_Audio_Inteface_Format2= Codec_DAIF_REV, DAIF_MS(1)+DAIF_LRSWAP(0)+DAIF_LRP(1)+DAIF_IWL(0)+DAIF_FOR(3); / AIC23的波特率设置,采样率为48k,CLKIN=CLKOUT=MCLK=?12.288MHz / 时钟模式设为普通模式,基过采样率为250Fs?256fs Uint16 Sample_Rate_Control2 = Codec_SRC_REV, SRC_CLKIN(0)+SRC_CLKO
21、UT(0)+SRC_SR(0)+SRC_BOSR(0)+SRC_USB(0); / AIC23寄存器复位 Uint16 Reset2 = Codec_RST_REV, RST_RES; / AIC23节电方式设置,所有部分均处于工作状态 Uint16 Power_Down_Control2 = Codec_PDC_REV, PDC_DEFAULT; / AIC23模拟音频的控制:关掉侧音 / DAC使能,ADC输入选择为音频输入 /将AAPC_INSEL(x)设为0,选择Line输入,注意实验跳线的选择 /将AAPC_INSEL(x)设为1,选择Microphone输入,注意实验跳线的选择 U
22、int16 Analog_Aduio_Path_Control2 = Codec_AAPC_STA2(0), AAPC_STA10(0)+AAPC_STE(0)+AAPC_DAC(1)+AAPC_BYP(0)+AAPC_INSEL(0)+AAPC_MICM(0)+AAPC_MICB(0); / AIC23数字音频通路的控制 / 使能ADC高通滤波 Uint16 Digital_Audio_Path_Control2 = Codec_DAPC_REV, DAPC_DACM(0)+DAPC_DEEMP(0)+DAPC_ADCHP(1); / AIC23数字接口的使能 Uint16 Digital_
23、Interface_Activation2 = Codec_DIA_REV, DIA_ACT(1); / AIC23左通路音频调节 Uint16 Left_Line_Input_Volume_Control2 = Codec_LLIVC_LPS(1), LLIVC_LIM(0)+LLIVC_LIV(23); / AIC23右通路音频调节 Uint16 Right_Line_Input_Volume_Control2 = Codec_RLIVC_RLS(1), RLIVC_RIM(0)+RLIVC_RIV(23); / AIC23耳机左通路音频调节 Uint16 Left_Headphone_V
24、olume_Control2 = Codec_LHPVC_LRS(1), LHPVC_LZC(1)+LHPVC_LHV(127); / AIC23耳机右通路音频调节 Uint16 Right_Headphone_Volume_Control2 = Codec_RHPVC_RLS(1), LHPVC_RZC(1)+LHPVC_RHV(127); void inti_AIC() /unit db; /*设置AIC23各部分均工作*/ MyI2C_Write( Power_Down_Control,/pointer to data array 2, /length of data to be tra
25、nsmitted 1, /master or slaver CODEC_ADDR, /slave address to transmit to从属地址发送到 1, /transfer mode of operation 30000 /time out for bus busy ); /*设置AIC23的数字接口*/ MyI2C_Write( Digital_Audio_Inteface_Format,/pointer to data array数据数组的指针 CODEC_ADDR, /slave address to transmit to /*设置AIC23模拟通路*/ MyI2C_Writ
26、e( Analog_Aduio_Path_Control,/pointer to data array /*设置数字通路*/ MyI2C_Write( Digital_Audio_Path_Control,/pointer to data array /*设置AIC23的采样率*/ MyI2C_Write( Sample_Rate_Control,/pointer to data array /*设置耳机音量*/ MyI2C_Write( Left_Headphone_Volume_Control,/pointer to data array /*设置Line输入的音量*/ MyI2C_Write( Left_Line_Input_Volume_Control,/pointer to data array 30000 /time out for bus bus
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1