DSP课程设计报告精.docx
- 文档编号:17850354
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:22
- 大小:434.53KB
DSP课程设计报告精.docx
《DSP课程设计报告精.docx》由会员分享,可在线阅读,更多相关《DSP课程设计报告精.docx(22页珍藏版)》请在冰点文库上搜索。
DSP课程设计报告精
DSP课程设计
实验报告
语音压缩、存储与回放
成绩:
工程设计50
报告20
答辩30
总分
评语:
指导教师签字:
0«:
实验背景与内容
语音通信是现代多媒体通信中一个重要的组成部分,而语音信号是信息的重要形式・语音信号处理有着广泛的应用领域,同时语音压缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中已经有较成熟的发展和广泛应用。
本设计要求采用DSP及其A/D、D/A转换器进行语音信号的压缩、存储和回放。
语音的数字通信无论在可靠性、抗千扰能力、保密性还長价格方面都远优于模拟语音信号,但这是以信道占用宽频带宽为代价的。
因此为了减少语音信号所占用的带宽或存储空间,就必须对数字语音信号进行压缩编码。
一个优秀的语音压缩系统要求能够在软硬件资源占用比例低和压缩编解码时间短的同时,可以实现多通道语音实时压缩。
DSP仿真器用于DSP的在线调试开发,可以通过软件在线控制DSP的运行状态,并能够查看DSP内部寄存器。
PC是开发人员和DSP系统之间的交互界面,通过PC上安装的CCS集成开发环境,开发人员可以在友好的图形界面下对目标系统进行操
作。
本次实验采用DSPC5402实验板实现语音信号的压缩解压的。
SEED-VC5402DSK实
验板上集成了SRAM,FLASH,音频输入输出接口等部件。
实验目的
1、应用DSP算法实现对语音信号的压缩、存储和回放。
2、熟悉使用C语言编写较复杂的程序;
3、熟悉C语言对外设(DSK板或示波器)的访间(软件编程.硬件连接);
4、熟练使用软件CCS5000对程序的完整调试过程。
三、实验设计要求及目标
(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采
用、等语音压缩算法。
(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的
片内和片外RAM存储器中,存储时间不小于10秒。
(3)存储莽存满之后,使用DSP进行实时解压缩,并从SPEAKER綸出口进行回放
输出。
(4)使用指示灯对语音存储和回放过程进行指示。
2•设计思路
语音信号的幅度(发音强度〉并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。
达到这一目标的基本做法是.对大信号使用大的量化间隔.而小信号则使用小的台阶。
ITU-T建议的PCMA律和H律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。
四、实验原理
1、DSK包括:
主芯片1枚;100MHzTMS320VC5402DSP
RAM1枚;1个软件等待的64KX16bit的SRAM(CY7C102IV33
FLASHi枚:
256KX16bit的FLASH存储器(AM39VF400A
接口2个:
一个连接到PC机并口的主机端接口HPI和用于仿真的JTAG测试总线
控制器
信号采集和输出端口,麦克风/耳机音频接口
C5402的硬件特点:
增强型哈佛结构,一个程序总线,三个独立的数据总线;40bit的算术逻辑单元
ALU;可寻址的程序空间达IMxlGbit;4Kxl6bit片内ROM;16Kxl6bit双口片内
RAM;片内外设:
软件可编程等待状态发生器;片内锁相环时钟发生器;两个多通
道缓冲串口;增强型8bit并行HPI口;两个16bit定时器;六通道DMA控制器;
节电模式IDLE1,IDLE2,IDLE3做功耗控制;单周期定点指令(iOOMlPS)执行时
间为lOnSo
C5402硬件优点:
内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;指令执行时的多重流水线结构将指令周期降低到了最小值;多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、IIR、FFT等运算。
C5402的软件特点:
7种有效灵活的寻址方式,仅为10ns的指令执行周期。
2、TMS320C5402的结构及原理
TMS320C5402采用先进的改进的哈佛结构和8条总线结构,解决了冯诺伊曼
(Von-Neumann)结构中高速数据传输时的传输通道上的瓶颈现象,使处理
器的性能大大提高,程序数据总线相互独立,允许同时访问程序存储器和数
据存储器,实现高度并行操作。
此外,还可以在数据总线与程序总线之间相
互传送数据,从而使处理器具有在单个周期内同时执行算数运算.逻辑运
算、移位操作.乘法/累加运算以及访问程序和数据存储器的强大功能。
TMS320C5402的內部多总线结构保证在一个机器周期內可以多次访间程序空
间和数据空间;指令执行时的多重流水线结构将指令周期降低到了最小值;
多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数
字信号处理中的一些特殊要求如FIR.I1R、FFT等运算。
由于C5402有7种
有效灵活的寻址方式的软件特点,仅为10ns的指令执行周期,还有一些特
殊的运算指令更好地满足了数字信号处理中特有的运算需要。
TMS320C5402具有高速的,全双工串行口,可用来与系统中的其他C54x器
件,编码解码器,串行A/D,D/A转换器以及其他的串行器件直接接口。
这
两个串行口均为多通道缓冲串行口HcBSP(Multi-channelBufferedSerial
Port)o它支持全双工通信,双缓冲数据寄存器,允许连续的数据流。
内置
P-律和A-律压扩硬件。
DSP绪构框图3、AD50的结构与原理
AD50是单片音频接口芯片(AIC)O它内部集成了16位的D/A和A/D转换
器,采样速率最高可达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)
在HCLK输入端使能外部时钟输入并旁通内部的PLL寄存器5,6:
保留
AD50与C5402之间的数据传送采用串行方式,包括两种传输模式:
16位
和15+1位传输模式015+1位模式时,其中的DO位表示二次通信。
它们各
自的时序如下:
4、程序存储芯片
实验中,
电路选用的芯片SST39VF400是一个低功耗FLASH。
芯片硬件特点:
A17至A0为外部地址管脚,D15至DO为1条数据线,CE#为片选控制管脚(低有效),0E#为输出控制管脚(低有效),壮#为写入控制管脚(低有效)。
工作在至电压下,存储容量位256KW,其。
中的数据可以保持100年以上,可重复编程次数高达10万次。
5、u_LAW/a_LAW的压扩硬件处理
在电信中常常利用U律和a律对数据进行压扩处理,C5400在McBSP中提供了专门的硬件实验这一功能。
压扩处理时,CPU访间到的都是16位的,他分别是利用线性的14位数据(U律)和13位(a律)数据左对齐获得的。
压扩硬件结构和相应的数据如下图所示。
rSRAlRBR餐
Expand
DX»-1KSR餐
Compress
16
IbCPU.UMA
16
RJUST
15
2
1
0
|i-l«»winDXR1r
Valud
1
0
I
15
3
2
0
A-ldwinDXR1j
Value-
1
0
I
习DXR1〜PromCPUtAW
在本实验中,我们通过软件编程来完成线性码转换成A律。
语音信号通常*小信号概率大,大信号出现的概率小,为提高小信号时的量化信躁
比,压缩比特速率,可为非线性量化。
语音压缩畏把16位的数据比特转化为8位
数据比特,从而到达语音压缩的目的。
在主程序中通过A/D抽样量化,可以得到16位的线性编码,再由编码表通过软件
计算得到8位A律编码,其中最高位为符号位,第6位到第4位为段落码,低4位
为段内码。
将8位的压缩结果存储到系统RAM中进行缓存,根据抽样率、语音存储
时间以及系统RAM的容量设置语音存储缓冲区的大小,待缓冲区存满后,将缓冲区
内的数据进行解压缩,然后输出到SPEAKER接口输出端。
若使用A/D转换器,必须首先对A/D转换器进行初始化设置,即设置A/D转换器的
工作模式.输入增益以及抽样频率等。
A律压缩编码表
压缩编码
线性输入编码
OOOOOOOwxyza
OOOwxyz
OOOOOOlwxyza
OOlwxyz
OOOOOlwxyzab
OlOwxyz
Ollwxyz
OOOOIwxyzabc
OOOIwxyzabcd
lOOwxyz
OOIwxyzabcde
lOlwxyz
Olwxyzabcdef
llOwxyz
lllwxyz
Iwxyzabcdefg
五、程序设计思路
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的转换速率。
tnndHionc.b^.ivrrsdae^.8mmmcoercy杆
•
MMHI■)MllBIKMla«r>
AWjvl■:
OcMf3M
•—»•*awwi-M••笛I04•
bOM>«MA亠,•MW«daMOCOttWl«>M*9
04♦触11A«t****
4、从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到McBSP的发送通道,讲解压后的数据将数据写入D/A转换器。
程序如下:
while(1
/*Waitforsamplefromhandset*/while(!
MCBSP_RRDY(HANDSET__CODEC{}:
/*Readsamplefromandwritebacktohandsetcodec*/
data=*(volatileint*DRRl_ADDR(HANDSET_CODEC:
pre=int2alaw(data:
/*orpre=int2ulaw(data:
*/
data=alaw2int(pre:
/*ordata=ulaw2int(pre;*/
♦(volatileint*DXRlADDR(HANDSET_CODEC=data:
实验程序
1c语言程序
/************审*审审审*************************************************/
/*头文件*/
/*******************************************************************/
#include
#include
#include
#include
/sK******************************************************************/
/*变量宏定义*/
/*******************************************************************/
#define
SIGN_BIT(0x80/*SignbitforaA-lawbyte.*/
#define
QUANT_MASK(Oxf/*Quantizationfieldmask.*/
#define
NSEGS(8/*NumberofA-lawsegments.粉
#define
SEG_SHIFT(4/*Leftshiftforsegmentnumber.*/
#define
SEG_MASK(0x70/*Segmentfieldmask.*/
/*********审******************审*************************************/
/*函数声明*/
void
delay(sl6period:
void
led(sl6ent:
void
initcodec(void:
void
flashenable(void:
unsignedchardata2alaw(sl6pcm_val:
intalaw2data(unsignedchara_val;staticintsearch(intval,short*table,intsize:
/*************审*****************************************************//*全局变量*/
/*********审审********************************************************/
HANDLEhHandset:
u8temp2:
ul6buffer[22000]:
staticshortseg_end[8]={0xlF・0x3F,0x7F,0xFF,0xlFF,0x3FF,0x7FF.0xFFF}:
/*******************************************************************/
/*主函数*/
voidmain
if(brd_init(100
return:
led(2:
seg
二search(pcm_val,seg_end.8:
if(seg>=
return(0x7F*mask:
else
aval=seg«SEG_SHIFT:
if(seg<
aval
1=(pcm_val»1&QUANTJIASK:
else
aval
1=(pcm_val»seg&QUANTJIASK:
return(aval*mask:
/***帕1aw的子程序**/staticintsearch(intval,short*table,intsize
Inti:
for(i=0:
i i++ if(val<=*table++return(i: return(size: /*****a律解压******/intalatf2data(unsignedchara_val Intt: Intseg: a_val=0x55: t=(a_val&QUANTJIASK«4: seg=((unsigneda_val&SEG_MASK»SEG_SHIFT: if(seg==O t+=8: t=(t»3: if((seg<4&&(seg>0 t+=0x108: t=(t»(4-seg; if(seg>3 t+=0xl08;t=(t«=(seg-4: return((a_val&SIGN_BITt: -t: /*结束*/ 2、存储器的分配(也cmd) MEMORY PRAM: origin=7600h,length=8000h/*InternalProgramRAM*/ PAGE1: SCRATCH: origin二0060h,length二0020h/*ScratchPadDataRAM*/ DMARAM: origin二OCOOh,length=0300h/*DMAbuffer*/ DATA: origin=llOOh,length=0080h/*InternalDataRAM*/ STACK: origin=1180h,length=0560h/*StackMemorySpace*/ INRAM: origin=1900h,length二OlOOh/*InternalDataRAM*./ EXRAM;origin=IFlOh,length=5A00h/*ExternalDataRAM*/ SECTIONS •cinit>PRAMPAGE0 ・text>PRAMPAGE0 •stack>STACKPAGE1 •trap>SCRATCHPAGE1 •const>EXRAMPAGE1 ・data>EXRAMPAGE1 •bss>EXRAMPAGE1 •cio>EXRAMPAGE1 ・switch>EXRAMPAGE1 tables>EXRAMPAGE1 var>EXRAMPAGE1 svctab>EXRAMPAGE1/*SSVLSPtable*/ vctab>EXRAMPAGE1/*VLSPtable*/ uvctab>EXRAMPAGE1/*UVLSPtable*/ cuvtab>EXRAMPAGE1/*Stochasticcodebook*/ cdbktab>EXRAMPAGE1/*variouscodebooktables*/ acostab>EXRAMPAGE1/*tableforarccos*/sqrtab>EXRAMPAGE1/*tableforsquareroot*/acbtab>EXRAMPAGE1/*tableforthresholdsinacb*/costab>EXRAMPAGE1/*tableforcosine*/ V23>INRAMPAGE1 FSK>INRAMPAGE1hpibuffO>HPRAMOPAGE1hpibuffl>HPRAMlPAGE1 hpibuff2>HPRAM2PAGE1dmabuff>DMARAMPAGE1 七、CCS程序调试与结果 1.启动SetupCCS程序 设置CCS的环境Q选择浮动菜单Importconfiguration->Availableconfiguration列表中,然后选中C5402DeviceSimulator(没接DSK板时、C5402DSKviaParallelPortEmulation(接DSK板时©选中Import,最后选中saveandquit以保存目标DSP的配置。 川七w韧. KD 2、运行CCS2(“5000,出现CCS界面。 新建一个工程,向工程中添加c语言程序文件、CMD程序、头文件和库文件。 C程序运行支持库: C: \ti\c5400\cgtools\ 相关的头文件C: \ti\c5400\cgtools\include\*.h DSK板库文件: C: \ti\c5400\dsk5402\, 相关的头文件C: \ti\c5400\dsk5402\include\*,h 在程序中还用到其他头文件: #include #include #include #include c语苜程序又件、CMD程序和库文件的加入可通过Project里的AddFilestoProject找到相应的文件直接加入。 最好是将•h和•lib文件都拷贝到自己的工程中,或者在CCS的example中进行调试、编译,这样一般就不会出现找不到头文件的错误信息。 当汇编出现找不到头文件的错误时,如下图。 91 *• k5»P> J •K••♦*•***••♦•M—K・・・■**«•・.■・X・H*»*«M*■ y aafca**■■■x«—”•k・"亠"f•*u*m• g.Tj—・«)i■UMI— r•■r」・Y■・■” ■%♦♦I (■uaT 这时需要通过Buildoptions里的"includeSearchPath(—i)option”加入头文件所指定的位置。 如下图: 3、程序汇编.链接通过并生成.out文件。 装载.out文件后就可以运行。 4、实验现象结果显示: 通过波形及寄存器的值可以详细察看程序的执行状况,并观看每个时刻的情 况。 用到的关键寄存器 选择View中的Registers的CPURegisters选项,可以看到CPU中寄存器的变化情况,选择View中的Registers的PeripheralRegs选项,可以看到外设寄存器的变化情况。 寄存莽及变量某瞬时值如下: 实验波形 通过View中的Graph可以看到波形图。 如下: 输入波形: 压缩波形: 綸出波形: 5、硬件结果显示 对语音信号开始采样后,灯闪两次,初始化codec0二级管灯0亮开始采集语音数据,二极管灯0熄灭录音结束,二极管灯1亮开始放音,二极管灯1熄灭放音结束,二极管灯0亮重新开始采样语音信号。 如此再循环运行程序。 八、实验总结 通过此次实验设计,我了解了DSP的内部资源以及各部件的作用。 通过应用 DSP算法实现对语音信号的压缩、存储和回放的实验过程,使我熟悉了使用C语言编写较复杂的程序,对CCS5000对程序的完整调试过程有了进一步的理解。 另外对 A律算法的C语言实现基本掌握,对PCM语音压缩算法的基本原理有了一定的认识。 设计开始时,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 课程设计 报告