dsp实习报告Word文档下载推荐.docx

上传人:b****6 文档编号:17246787 上传时间:2022-11-29 格式:DOCX 页数:28 大小:824.41KB
下载 相关 举报
dsp实习报告Word文档下载推荐.docx_第1页
第1页 / 共28页
dsp实习报告Word文档下载推荐.docx_第2页
第2页 / 共28页
dsp实习报告Word文档下载推荐.docx_第3页
第3页 / 共28页
dsp实习报告Word文档下载推荐.docx_第4页
第4页 / 共28页
dsp实习报告Word文档下载推荐.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

dsp实习报告Word文档下载推荐.docx

《dsp实习报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《dsp实习报告Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。

dsp实习报告Word文档下载推荐.docx

5.3实验中的部分程序讲解12

6.在CCS3.3环境下调试。

编译,下载源程序17

7.实习心得21

8.参考文献22

基于DSP的实时FFT的实现

1.设计目的

1.加深对DFT算法原理和基本性质的理解;

2.熟悉FFT的算法原理和FFT子程序的算法流程和应用;

3.学习用FFT对连续信号和时域信号进行频谱分析的方法;

4.学习DSP中FFT的设计和编程思想;

5.学习使用CCS的波形观察窗口观察信号波形和频谱情况。

2.设计要求及方案

在DSP中用C语言进行编程,实现FFT运算,对输入输出信号进行频谱分析。

方案一:

基于DSPLIB库函数的FFT实现,DSPLIB库函数提供的FFT运算程序全部由汇编语言编写,充分发挥DSP的硬件特性。

运算速度很快。

DSPLIB函数库提供FFT运算为基2时间抽取算法。

码位倒序的作用是使在时域采样的按自然序列排列的N点输人数据的排列顺序发生变化,然后作为

FFT运算的输入数据,以使FFT运算结果按自然序列排列。

方案二:

基于C语言的FFT实现,上面讲了使用CCS中的库函数实现FFT运算,我们还可以可以使用C语言实现FFT预算。

由于C语言不支持复数预算,所以所编写的C程序是将复数的转换为实数运算。

其程序也可以实现基—2时间抽取运算。

综合考虑,我们选择方案一,因为方案一的实现较简单且同样可以达到比较好的实验效果,DSPLIB库中FFT的算法经典,所消耗的时间最少。

3.硬件设计过程

3.1设计原理

快速傅里叶变换

傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。

离散傅里叶变换(DFT)是傅里叶变换在离散系统中的表示形式。

但是DFT的计算量非常大,FFT就是DFT的一种快速算法,FFT将DFT的N2步运算减少至(N/2)log2N步。

离散信号x(n)的傅里叶变换可以表示为 

, 

式中的WN称为蝶形因子,利用它的对称性和周期性可以减少运算量。

一般而言,FFT算法分为时间抽取(DIT)和频率抽取(DIF)两大类。

两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。

本实验以时间抽取方法为例。

时间抽取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蝶形运算。

单个蝶形运算示意图如下:

以N=8为例,时间抽取FFT的信号流图如下:

从上图可以看出,输出序列是按自然顺序排列的,而输入序列的顺序则是“比特反转”方式排列的。

也就是说,将序号用二进制表示,然后将二进制数以相反方向排列,再以这个数作为序号。

如011变成110,那么第3个输入值和第六个输入值就要交换位置了。

本实验中采用了一种比较常用有效的方法完成这一步工作__雷德算法。

3.2硬件设计步骤

3.2.1McBSP多通道缓冲串行口的设置

3.21McBSP的功能结构图

图一

MCBSP是DSP芯片的标准内部外设,可以提供收发双向串行通信,接收双缓冲,改善三缓冲寄存器,有独立的收发时钟,帧同步信号,可直接与多种格式装置连接,如AC97,I2S和SPI等。

最多可发送/接收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设备

⑨串行外设接口(SPI)

⑩最多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接口可以分为以下几个步骤:

①复位McBSP接口的接收和发送单元

②配置McBSP接口的工作模式

③配置McBSP接口相关控制信号的频率、相对延迟、时钟源等

④设定McBSP接收和发送数据的位宽

⑤清空McBSP接口的接收和发送相关寄存器

⑥根据实际需要编写McBSP接收、发送或其它中断处理函数

⑦在中断向量表中添加相应的跳转指令

⑧清零相应的中断标志寄存器

⑨使能相应的中断位和全局中断

⑩启动McBSP

3.2.3AIC23的设置

3.2.3.1音频模块AIC23结构

AIC23是德州仪器公司(TI)生产的高性能音频A/D、D/A放大电路。

外围接口工作电压为3.3V,内核工作电压是1.5V,在48kHz采样率条件下,A/D变换信噪比可达100dB,其控制口可由硬件设置为同步置口(SP2)模式或两线制(2-wire),音频数据接口可采用I2S格式、DSP格式、USB格式及最高位或最低位数据调整格式。

音频数据字长可设置为16、24、20、32位,输出可直接驱动耳机,在32Ω条件下输出可达30mW。

内置前置放大器及偏置电路可直接连接麦克风。

该芯片功耗很低,在休眠(power-down)状态下,功耗小于15uW。

AIC23的内部结构框图如图二所示

图二

AIC23有两个数字接口,其一是由CS(控制信号)、SDIN(信号数据输入)、SCLK(信号时钟)和MODE(模式)构成的数字控制接口,通过它将芯片的控制字写入AIC23,从而控制AIC23功能;

另一组是由LRCIN(左右声控制输入)、DIN(数据输入)、LROUT(左右声输出)、DOUT(数据输出)和BLCK(时钟)组成的数字音频接口,AIC23的数字音频信号从这个接口接收或发出。

在模拟信号接口方面,AIC23有四组,一是由RLINEIN(右声线入)和LLINEIN(左声线入)组成的线路输入接口,其内部带可控增益放大器及静音电路,其最大输入模拟信号为1VRMS;

第二组是由MICIN(麦克输入)构成的MIC接口,内部包含1个5倍固定增益放大器及0~20dB可变增益放大器,该信号与线路输入信号(LINEIN)通过内部模拟开关选择送往A/D变换电路;

第三组是由RHPOUT(右声话音输出)和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内部还包含有MIC偏置电路,使用外接MIC无需外置偏置电路。

由上面可见AIC23是一种高性能的音频录放接口芯片。

AIC23与DSP的接口

图三是AIC23与VC5402的接口连接

图三

AIC23的通讯方式

AIC23的外部硬件接口分为模拟口和数字口。

设计人员需要一种办法来详细说明功率意图,模拟口是用来输入输出音频信号的,最后将2个放大后的信号通过SAR(逐次逼近模数转换器)式的ADC采样算出ISENSOR的值。

支持线路输入和麦克风输入;

它能够支持几乎所有的工作平台和目标处理器,有两组数字接口,然后进行编译和调试。

其一是由/CS、SDIN、SCLK和MODE构成的数字控制接口。

如与U盘直接通信等设备是完全有必要在原来设备的基础上扩展USB主机端口。

AIC23是一块可编程的音频芯片,在彩色LCD上,通过数字控制口将芯片的控制字写入AIC23内部的寄存器,而45nm器件模板成本会超过3百万美元。

如采样率设置,大大提高了系统的可靠性和安全性。

工作方式设置等,这些工具需要对信号进行适当缓冲,共有12个寄存器。

AIC23通过数字音频口与DSP的McBSP0完成数据的通信,在本设计中,DSP做主机,I/O和时钟电路占全部活动功耗的1/3,AIC23做从机。

1系统结构框图及视频数据采集原理视频数据采集系统结构如图1所示。

主机提供发送时钟信号BCLKX0和发送帧同步信号BFSX0。

USB设备端口作为与PC机通信的接口。

在这种工作方式下,把多媒体资料在各式各样的家庭网络媒体终端上展示出来,接收时种信号BCLKR0和接收帧同步信号BFSR0实际上都是由主机提供的。

以下称由BF537的MAC控制器与物理层接口芯片LAN8187构成的以太网通道为主网络通道。

AIC23软件实现部分

将McBSP配置为SPI总线接口,其中McBSP0以SPI接口方式与AIC23的控制接口相连,设定为主动模式,负责对AIC23内部寄存器进行配置,产生位同步信号,帧同步信号,发送16bit单帧,不接受数据,McBSP1负责将DSP产生的数字序列传送给AIC23McBSP1设定为从动模式,为同步,帧同步信号由AIC23产生。

其流程图如图四所示。

图四

4.FFT软件设计的实现

4.1FFT算法基本原理

有限长序列x(n)及其频域表示X(k)可由以下离散傅立叶变换得出

(2.1)称为离散傅立叶正变换,式(2.2)称为离散傅立叶反变换,x(n)与

x(k)构成了离散傅立叶变换对。

根据上述公式,计算一个X(k),需要N次复数乘法和N-1次复数加法,而计算全部x(k)(0≤k≤N一1),共需要N2次复数乘法和N(N-1)次复数加法。

实现一次复数乘法需要四次实数乘法和两次实数加法,一次复数加法需要两次实数加法,因此直接计算全部x(k)共需要4N2次实数乘法和2N(2N-1)次实数加法。

当N较大时,对实时信号处理来说,对处理器计算速度有十分苛刻的要求,于是如何减少计算离散傅里叶变换运算量的问题变得至关重要。

为减少运算量,提高运算速度,就必须改进算法。

计算DFT过程中需要完成的运算的系数里,存在相当多的对称性。

通过研究这种对称性,可以简化计算过程中的运算,从而减少计算DFT所需的时间。

具有以下固有特性:

利用

带的上述特性,将x(n)或x(k)序列按一定规律分解成短序列进行运算,这样可以避免大量的重复运算,提高计算DFr的运算速度。

算法形式有很多种,但基本上可以分为两大类,即按时间抽取(DecimationInTime,DIT)FFT算法和按频率抽取(DecimationInFrequency,DIF)FFT算法。

4.2FFT程序设计

本程序FFT的实现首先是使用雷德算法对输入信号序列进行倒序重排,然后再进行L级递推计算。

雷德算法流程图如图五:

图五FFT数据倒位流程图

雷德算法是实现倒序位的一种方法。

我们假设A(I)表示存放自然顺序输入数据的内存单元,A(J)表示存放倒序位的内存单元,I,J=0,1……,N-1.按倒序位的规律,当I=J时,不用变址,当I≠J时,需要变址。

但是当I<

J时,进行变址在先,故在I>

J时,就不需要再变址了,否则变址两次等于不变址。

L级递推流程图如图六:

图六L级递推流程图

L级递推算法的原理是根据FFT每级有N/2个蝶形结,第M级有2M-1种蝶形运算;

由最后一级向前每推进一级,则系数就取后一级系数中偶数序号那一半;

蝶形结两个节点间的间距为2M-1。

其中共有三个循环:

外层循环控制L级的顺序运算:

内层的两个循环控制同一级(M相同)各蝶形结的运算,其中最内层的一层循环控制同一种蝶形结的运算,二中间一层的循环则控制不同种蝶形结的运算。

I和IP是一个蝶形结的两个节点。

基-2按时间抽取流程图:

图七基-2按时间抽取流程图

上图表示的基-2按时间抽取流程图,其流程是先进行倒序,在进行L级的运算,倒序位的实现是用雷德算法,再进行L级的运算。

4.3信号发生模块的FFT处理

数字滤波实验都需要设置实验箱信号源。

通过液晶和按键,设置信号源。

菜单路径为:

“系统设置”-“信号发生器设置”。

在“信号发生器设置”这一菜单下:

“通道”设为“0”;

“信号类型”可根据需要任意选择;

“信号频率”和“信号振幅”可在屏幕下方“有效输入”限定的范围内任意输入,建议“信号振幅”设为1000左右,“信号频率”设为300左右;

电压偏移”设为0;

“信号发生器开关”设为“开启”。

此时便有正弦信号输入音频芯片AIC23的输入端(利用此芯片同样可以进行AD采集)。

5.功能程序:

5.1实时FFT程序流程图

5.3实验中的部分程序讲解

5.3.1数字音频模块

#include<

csl.h>

#include"

CODEC.h"

#undefCODEC_ADDR

#defineCODEC_ADDR0x1A

//ConfigCODECcontrolregisters

//数字音频接口格式设置//AIC23为主模式,数据为DSP模式,数据长度16位

Uint16Digital_Audio_Inteface_Format[2]={

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

Uint16Sample_Rate_Control[2]={

Codec_SRC_REV,

SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(0)+SRC_BOSR(0)+SRC_USB(0)};

//AIC23寄存器复位

Uint16Reset[2]={

Codec_RST_REV,

RST_RES};

//AIC23节电方式设置,所有部分均处于工作状态

Uint16Power_Down_Control[2]={

Codec_PDC_REV,

PDC_DEFAULT};

//AIC23模拟音频的控制:

关掉侧音

//DAC使能,ADC输入选择为音频输入

//将AAPC_INSEL(x)设为0,选择Line输入,注意实验跳线的选择

//将AAPC_INSEL(x)设为1,选择Microphone输入,注意实验跳线的选择

Uint16Analog_Aduio_Path_Control[2]={

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高通滤波

Uint16Digital_Audio_Path_Control[2]={

Codec_DAPC_REV,

DAPC_DACM(0)+DAPC_DEEMP(0)+DAPC_ADCHP

(1)};

//AIC23数字接口的使能

Uint16Digital_Interface_Activation[2]={

Codec_DIA_REV,

DIA_ACT

(1)};

//AIC23左通路音频调节

Uint16Left_Line_Input_Volume_Control[2]={

Codec_LLIVC_LPS

(1),

LLIVC_LIM(0)+LLIVC_LIV(23)};

//AIC23右通路音频调节

Uint16Right_Line_Input_Volume_Control[2]={

Codec_RLIVC_RLS

(1),

RLIVC_RIM(0)+RLIVC_RIV(23)};

//AIC23耳机左通路音频调节

Uint16Left_Headphone_Volume_Control[2]={

Codec_LHPVC_LRS

(1),

LHPVC_LZC

(1)+LHPVC_LHV(127)};

//AIC23耳机右通路音频调节

Uint16Right_Headphone_Volume_Control[2]={

Codec_RHPVC_RLS

(1),

LHPVC_RZC

(1)+LHPVC_RHV(127)};

voidinti_AIC()

{

//unitdb;

/*设置AIC23各部分均工作*/

MyI2C_Write(Power_Down_Control,//pointertodataarray

2,//lengthofdatatobetransmitted

1,//masterorslaver

CODEC_ADDR,//slaveaddresstotransmitto从属地址发送到

1,//transfermodeofoperation

30000//timeoutforbusbusy

);

/*设置AIC23的数字接口*/

MyI2C_Write(Digital_Audio_Inteface_Format,//pointertodataarray数据数组的指针

CODEC_ADDR,//slaveaddresstotransmitto

/*设置AIC23模拟通路*/

MyI2C_Write(Analog_Aduio_Path_Control,//pointertodataarray

/*设置数字通路*/

MyI2C_Write(Digital_Audio_Path_Control,//pointertodataarray

/*设置AIC23的采样率*/

MyI2C_Write(Sample_Rate_Control,//pointertodataarray

/*设置耳机音量*/

MyI2C_Write(Left_Headphone_Volume_Control,//pointertodataarray

/*设置Line输入的音量*/

MyI2C_Write(Left_Line_Input_Volume_Control,//pointertodataarray

30000//timeoutforbusbus

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

当前位置:首页 > 工程科技 > 能源化工

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

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