DSP课程设计报告Word文档格式.docx

上传人:b****3 文档编号:17127316 上传时间:2022-11-28 格式:DOCX 页数:20 大小:521.63KB
下载 相关 举报
DSP课程设计报告Word文档格式.docx_第1页
第1页 / 共20页
DSP课程设计报告Word文档格式.docx_第2页
第2页 / 共20页
DSP课程设计报告Word文档格式.docx_第3页
第3页 / 共20页
DSP课程设计报告Word文档格式.docx_第4页
第4页 / 共20页
DSP课程设计报告Word文档格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

DSP课程设计报告Word文档格式.docx

《DSP课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP课程设计报告Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。

DSP课程设计报告Word文档格式.docx

2.设计思路

语音信号的幅度(发音强度)并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。

达到这一目标的基本做法是,对大信号使用大的量化间隔,而小信号则使用小的

台阶。

ITU-TG.711建议的PCM

A律和µ

律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。

四、实验原理

1、DSK包括:

主芯片1枚:

100MHzTMS320VC5402DSP

RAM1枚:

1个软件等待的64K×

16bit的SRAM(CY7C1021V33

FLASH1枚:

256K×

16bit的FLASH存储器(AM39VF400A

接口

2个:

一个连接到PC机并口的主机端接口HPI和用于仿真的JTAG测试总线控制器

信号采集和输出端口:

麦克风/耳机音频接口

Ø

C5402的硬件特点:

增强型哈佛结构,一个程序总线,三个独立的数据总线;

40bit的算术逻辑单元ALU

可寻址的程序空间达1Mx16bit;

4Kx16bit片内ROM

16Kx16bit双口片内RAM;

片内外设:

软件可编程等待状态发生器;

片内锁相环时钟发生器;

两个多通道缓冲串口;

增强型8bit并行HPI口;

两个16bit定时器;

六通道DMA控制器;

节电模式IDLE1,IDLE2,IDLE3做功耗控制;

单周期定点指令(100MIPS)执

行时间为10ns。

C5402硬件优点:

内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;

指令执行时的多重流水线结构将指令周期降低到了最小值;

多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、

IIR、FFT等运算。

C5402的软件特点:

7种有效灵活的寻址方式,仅为10ns的指令执行周期。

2、TMS320C5402的结构及原理

TMS320C5402采用先进的改进的哈佛结构和8条总线结构,解决了冯诺伊曼(Von-

Neumann)结构中高速数据传输时的传输通道上的瓶颈现象,使处理器的性能大大提高,程序数据总线相互独立,允许同时访问程序存储器和数据存储器,实现高度并行操作。

此外,还可以在数据总线与程序总线之间相互传送数据,从而使处理器具有在单个周期内同时执行算数运算、逻辑运算、移位操作、乘法/累加运算以及访问程序和数据存储器的强大功能。

TMS320C5402的内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;

指令执行时的多重流水线结构将指令周期降低到了最小值;

多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、IIR、FFT等运算。

由于C5402有7种有效灵活的寻址方式的软件特点,仅为10ns的指令执行周期,还有一些特殊的运算指令更好地满足了数字信号处理中特有的运算需要。

TMS320C5402具有高速的,全双工串行口,可用来与系统中的其他C54x器件,编码解码器,串行A/D,D/A转换器以及其他的串行器件直接接口。

这两个串行口均为多通道缓冲串行口McBSP(Multi-channelBufferedSerial

Port)。

它支持全双工通信,双缓冲数据寄存器,允许连续的数据流。

内置μ-律和A-律压扩硬件。

DSP结构框图

3、AD50的结构与原理

AD50是单片音频接口芯片(AIC)。

它内部集成了16位的D/A和A/D转换器,采样速率最高可达22.05kb/s,其采样速率可通过DSP编程来设置。

在DAC之前有一个插值滤波器以保证输出信号平滑和ADC之后有一个抽取滤波器以提高输入信号的信噪比。

AD50内部有7个数据和控制寄存器,用于编程控制它们的工作状态。

它的数据传输模式和采样速率都可以通过DSP对其控制寄存器的编程来实现,因此,在许多场合下,AD50都作为DSP的AIC来实现音频处理。

寄存器0:

空操作寄存器。

寄存器1:

软件复位

软件掉电

选择16位或15位工作方式

硬件或软件二次通信请求方式的选择

寄存器2:

使能ALTDATA输入端

为ADC选择16/15位方式

寄存器3:

选择FS与FSD之间延迟SCLK的个数

告诉主机有几个从机被联上

寄存器4:

为输入和输出放大器选择放大器增益

选择N来设置采样频率,fs=MCLK/(128*N)或MCLK/(512*N)

在MCLK输入端使能外部时钟输入并旁通内部的PLL

寄存器5,6:

保留

AD50与C5402之间的数据传送采用串行方式,包括两种传输模式:

16位

和15+1位传输模式。

15+1位模式时,其中的D0位表示二次通信。

它们各自的时序如下:

4、程序存储芯片

实验中,电路选用的芯片SST39VF400是一个低功耗FLASH。

芯片硬件特点:

A17至A0为外部地址管脚,D15至D0为1条数据线,CE#为片选控制管脚(低有效),OE#为输出控制管脚(低有效),WE#为写入控制管脚(低有效)。

工作在2.7V至3.6V电压下,存储容量位256KW,其。

中的数据可以保持100年以上,可重复编程次数高达10万次。

5、u_LAW/a_LAW的压扩硬件处理

在电信中常常利用u律和a律对数据进行压扩处理,C5400在McBSP中提供了专门的硬件实验这一功能。

压扩处理时,CPU访问到的都是16位的,他分别是利用线性的14位数据(u律)和13位(a律)数据左对齐获得的。

压扩硬件结构和相应的数据如下图所

示。

在本实验中,我们通过软件编程来完成线性码转换成A律。

语音信号通常是小信号概率大,大信号出现的概率小,为提高小信号时的量化信躁比,压缩比特速率,可为非线性量化。

语音压缩是把16位的数据比特转化为8位数据比特,从而到达语音压缩的目的。

在主程序中通过A/D抽样量化,可以得到16位的线性编码,再由编码表通过软件计算得到8位A律编码,其中最高位为符号位,第6位到第4位为段落码,低4位为段内码。

将8位的压缩结果存储到系统RAM中进行缓存,根据抽样率、语音存储时间以及系

统RAM的容量设置语音存储缓冲区的大小,待缓冲区存满后,将缓冲区内的数据进

行解压缩,然后输出到SPEAKER接口输出端。

若使用A/D转换器,必须首先对A/D转换器进行初始化设置,即设置A/D转换器的工作模式、输入增益以及抽样频率等。

A律压缩编码表

线性输入编码

压缩编码

0000000wxyza000wxyz

0000001wxyza001wxyz

000001wxyzab010wxyz

00001wxyzabc011wxyz

0001wxyzabcd100wxyz

001wxyzabcde101wxyz

01wxyzabcdef110wxyz

1wxyzabcdefg111wxyz

五、程序设计思路

DSP程序设计应包括用户程序、存储器配置程序。

为了实现语音信号的采集与回放,先将语音信号采集,运用a律压缩算法将信号压缩并存入存贮器中,当放音开始时运用a律解压算法将信号解压并从存储器中释放出来,实现语音的回放。

1、软件设计流程

2、TMS320VC5402mcbsp的串口的初始化

首先将DSP的串口1复位,再对串口1的16个寄存器进行编程,使串口1工作在以下状态:

禁止SPI模式,但数据相,每帧一字,每字16位,帧同步脉冲低电平有效,并且帧同步信号和移位信号有外部时钟产生。

hHandset=codec_open(HANDSET_CODEC;

此语句调用了函数codec_open(对串口1进行了初步设置,设置成功返回codec的句柄放在变量hHandset中,作为调用其他函数的实参。

3、AD50的初始化:

该初始化过程调用了5个函数对AD50的5项参数进行了设置,包括adc和dac的工作模式,模拟输入和输出的增益;

以及AD,DA的转换速率。

4、从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到McBSP的发送通道,讲解压后的数据将数据写入D/A转换器。

程序如下:

while(1

{

/*Waitforsamplefromhandset*/

while(!

MCBSP_RRDY(HANDSET_CODEC

{};

/*Readsamplefromandwritebacktohandsetcodec*/

data=*(volatileint*DRR1_ADDR(HANDSET_CODEC;

pre=int2alaw(data;

/*orpre=int2ulaw(data;

*/

data=alaw2int(pre;

/*ordata=ulaw2int(pre;

*(volatileint*DXR1_ADDR(HANDSET_CODEC=data;

六、实验程序

1C语言程序

/******************************************************************/

/*头文件*/

/*******************************************************************/

#include

/*******************************************************************//*变量宏定义*/

/*******************************************************************/#defineSIGN_BIT(0x80/*SignbitforaA-lawbyte.*/

#defineQUANT_MASK(0xf/*Quantizationfieldmask.*/

#defineNSEGS(8/*NumberofA-lawsegments.*/

#defineSEG_SHIFT(4/*Leftshiftforsegmentnumber.*/

#defineSEG_MASK(0x70/*Segmentfieldmask.*/

/*函数声明*/

voiddelay(s16period;

voidled(s16cnt;

voidinitcodec(void;

voidflashenable(void;

unsignedchardata2alaw(s16pcm_val;

intalaw2data(unsignedchara_val;

staticintsearch(intval,short*table,intsize;

/*全局变量*/

HANDLEhHandset;

s16data;

s16data1;

u16i=0;

u16temp1;

u16j=0;

u16k,l=0;

u8temp2;

u16buffer[22000];

staticshortseg_end[8]={0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF};

/*主函数*/

voidmain(

if(brd_init(100

return;

led(2;

//闪灯两次

initcodec(;

//初始化codec

flashenable(;

//选择片外FLASH为片外存储器

MCBSP_RRDY(HANDSET_CODEC{};

//等待接收handset处的采样

if(i==0brd_led_toggle(BRD_LED0;

//点亮二极管0,表示录音开始

data=*(volatileu16*DRR1_ADDR(HANDSET_CODEC;

//从handset处读取采样

temp1=data2alaw(data;

//对采样进行a律压缩

/*****************************************************************/

/*把低地址数据放在高八位高地址数据放在低八位*/

i=i+1;

if(i%2==1

buffer[j]=(temp1<

<

=8;

/*奇数数据左移8位temp1=abcdefgh00000000

buffer[j]=temp1*/

}

else

buffer[j]=(buffer[j]|temp1;

/*偶数数据与temp1取或组成新的数据

buffer[j]=abcdefghiabcdefghi*/

j++;

//j加1

if(i>

=44000

i=0;

if(j>

=22000

j=0;

brd_led_toggle(BRD_LED0;

//熄灭数码管0表示录音结束

brd_led_toggle(BRD_LED1;

//点亮二极管1表示放音开始

/*放音部分*/

for(k=0;

k<

44000;

k++

if(k%2==0

temp2=(buffer[l]>

>

8&

0x0ff;

temp2=buffer[l]&

l++;

if(l>

l=0;

data1=alaw2data(temp2;

MCBSP_XRDY(HANDSET_CODEC{};

*(volatileu16*DXR1_ADDR(HANDSET_CODEC=data1;

/*******************************************************************//*放音结束*/

/*******************************************************************/if(k==44000brd_led_toggle(BRD_LED1;

//熄灭二极管1表示放音结束

}//主程序结束

/*子函数*/

/****************************************************************//*******延时******/

voiddelay(s16period

inti,j;

for(i=0;

i

for(j=0;

j>

1;

j++;

/*******闪灯******/

voidled(s16cnt

while(cnt--

delay(1000;

brd_led_toggle(BRD_LED2;

/*****初始化codec**/

voidinitcodec(void

/*OpenHandsetCodec*/

//Acquirehandletocodec

/*Setcodecparameters*/

codec_dac_mode(hHandset,CODEC_DAC_15BIT;

//DACin15-bitmode

codec_adc_mode(hHandset,CODEC_ADC_15BIT;

//ADCin15-bitmode

codec_ain_gain(hHandset,CODEC_AIN_6dB;

//6dBgainonanaloginputtoADC

codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB;

//-6dBgainonanalogoutputfromDAC

codec_sample_rate(hHandset,SR_8000;

//8KHzsamplingrate

/*****设置flash****/

voidflashenable(void

CPLD_CTRL2_REG|=0x0010;

CPLD_DMCTRL_REG|=0x0040;

/*****a律压缩******/

unsignedchardata2alaw(s16pcm_val

Intmask;

Intseg;

unsignedcharaval;

if(pcm_val>

=0

mask=0xD5;

//标记(7thbit=1

mask=0x55;

//标记bit=0

pcm_val=-pcm_val;

//Convertthescaledmagnitudetosegmentnumber.seg=search(pcm_val,seg_end,8;

//Combinethesign,segment,andquantizationbits.

if(seg>

=8//outofrange,返回最大数.

return(0x7F^mask;

aval=seg<

SEG_SHIFT;

if(seg<

2

aval|=(pcm_val>

1&

QUANT_MASK;

else

seg&

return(aval^mask;

/****alaw的子程序**/

staticintsearch(intval,short*table,intsize{

Inti;

for(i=0;

i<

size;

i++

if(val<

=*table++

return(i;

return(size;

/*****a律解压******/

intalaw2data(unsignedchara_val

Intt;

a_val^=0x55;

t=(a_val&

QUANT_MASK<

4;

seg=((unsigneda_val&

SEG_MASK>

if(seg==0

t+=8;

t=(t>

3;

if((seg<

4&

&

(seg>

t+=0x108;

(4-seg;

if(seg>

3

t+=0x108;

t=(t<

=(seg-4;

return((a_val&

SIGN_BIT?

t:

-t;

/*结束*/

2、存储器的分配(*.cmd)

MEMORY

PAGE0:

VECS:

origin=

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

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

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

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