语音压缩存储与回放实验报告.docx
《语音压缩存储与回放实验报告.docx》由会员分享,可在线阅读,更多相关《语音压缩存储与回放实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
语音压缩存储与回放实验报告
DSP课程设计
实验报告
语音压缩、存储和回放
目录
一、设计任务书封面…………………………………………………1
二、设计内容与要求…………………………………………………3
三、设计算法原理说明………………………………………………4
四、程序设计、调试与结果分析……………………………………7
CMD程序,C语言程序……………………………………………7
调试过程…………………………………………………………15
波形与数据显示…………………………………………………16
五、设计(安装)与调试的体会……………………………………17
六、参考文献…………………………………………………………18
语音的压缩、存储与回放
一、设计要求与目标
(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。
(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。
(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。
(4)使用指示灯对语音存储和回放过程进行指示。
发挥部分:
使用多种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺点。
二、实验目的
1、通过本实验掌握5402DSP片上外设多通道缓冲串行口mcbsp。
2、学习掌握tlc320ad50CODEC编译码器的内部结构、工作原理。
3、学习A律语音压缩以及C语言下的编程方法。
三、实验原理
1.语音采集与输出模块
语音采集与输出模块采用的是TI公司推出的一款高性能的立体声音频Codec芯片TLC320AD50C,内置耳机输出放大器,支持MIC和LINEIN两种输入方式(二选一),且对输入和输出都具有可编程增益调节。
AD50的模数转换(ADCs)和数模转换(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。
与此同时,AD50还具有很低的能耗,回放模式下功率仅为23mW,省电模式下更是小于15uW。
由于具有上述优点,使得AD50是一款非常理想的音频模拟I/O器件,可以很好的应用在随声听(如CD,MP3……)、录音机等数字音频领域[2]。
由TLC320AD50C组成的语音输入与输出模块不仅采样率高最高可达96K,且外围电路简单,性价比高。
2.语音编码
(1)概念:
语音编码一般分为两类:
一类是波形编码,一类是被称为“声码器技术”的编码。
PCM编码即脉冲编码调制。
波形编码的最简单形式就是脉冲编码调制(Pulsecodemodulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅度进行编码,所以叫做脉冲编码调制。
脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。
(2)量化:
脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方式。
但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降。
国际上有两种非均匀量化的方法:
A律和u律,u律是最常用的一种。
在美国,7位u律是长途电话质量的标准。
而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。
(3)DPCM&ADPCM:
降低传输比特率的方法之一是减少编码的信息量,这要消除语音信号中的冗余度。
相邻的语音样本之间存在明显的相关性,因此对相邻样本间的差信号进行编码,便可使信息量得到压缩。
因为差分信号比原语音信号的动态范围和平均能量都小。
这种编码叫DifferentialPCM,简称DPCM,即差分脉冲编码调制。
ADPCM即自适应差分脉冲编码调制,是包括短时预测的编码系统。
CCITT(国际电报电话咨询委员会)在1984年提出的32kbit/s的编码器建议就是采用ADPCM作为长途传输中的国际通用语音编码方案。
这种ADPCM编码方案达到64kbit/sPCM的语音传输质量,并具有很好的抗误码性能。
(4)a律压缩
a律压缩示意图
A律压缩编码表
A律压缩编码表
线性输入编码
压缩编码
0000000wxyza
000wxyz
0000001wxyza
001wxyz
000001wxyzab
010wxyz
00001wxyzabc
011wxyz
0001wxyzabcd
100wxyz
001wxyzabcde
101wxyz
01wxyzabcdef
110wxyz
1wxyzabcdefg
111wxyz
采用DSP可以直接对PCM编码后的语音信号进行μ律和A律压缩。
图1是DSP硬件实现数据压缩解压的简单流程,DSP将传输来的压缩后的数据进行解压成16位或者32位,然后对解压后的数据进行分析、处理,最后将处理后的数据按照要求压缩成8位的数据格式输出到相应设备,供其他设备读取。
图1数据压缩解压流程
图2是DSP将数据解压的值,DSP将压缩的8位数据解压成16位的DSP通用数据格式,其中高13位为解压后的数据,低3位补0。
这是因为6.711的A律压缩只能对13位数据操作。
DSP将解压后的数据放在缓冲串口的发送寄存器中,只要运行发送指令,缓冲串口就会将数据发送出去。
缓冲串口对接收数据的解压过程和压缩过程完全相反。
图3是μ律数据解压的示意图。
图2A律数据解压
图3μ律数据解压
DSP内部的缓冲串口(McBSPs)带有硬件实现的μ律/A律压缩解压,用户只需要在相应寄存器中进行设置就可以了。
在进行A律压缩时,采样后的12位数据,默认其最高位为符号位,压缩时要保持最高位即符号位不变,原数据的后11位要压缩成7位。
这7位码由3位段落码和4位段内码组成。
具体的压缩变换后的数据根据后11位数据大小决定。
表2 A律数据压缩表
除对串行口数据实现压扩处理外,这套硬件在McBSP不使用时还可以当作一个特殊的处理单元对内部数据实现压扩处理,他有两种实现方法。
法一:
当串行口的发送和接受部分都处于复位状态时,DRR1和DXR1内部通过压扩逻辑连接在一起,数据从DXR1写入并根据XCOMPAND处理,然后根据RCOMPAND再处理,在4个CPU时钟后从DRR1中读出数据。
该处理比软件实现快,不利之处在于处理完后没有同步信息通知CPU和DMA。
法二:
在数据环回模式下,McBSP也实现了一种内连。
数据处理与第一种方法相同,但它可以提供中断信号(或同步事件)给CPU(或DMA)。
这里数据处理的时间是根据串行口的比特律确定的。
另外,在通常情况下McBSP先传输信号的高位后传输低位,但是在字长为8比特的数据传输时,McBSP提供了比特倒序的功能,即可以先传输低位后传输高位。
在本实验中,我们通过软件编程来完成线性码转换成A律。
语音信号通常是小信号概率大,大信号出现的概率小,为提高小信号时的量化信躁比,压缩比特速率,可为非线性量化。
语音压缩是把16位的数据比特转化为8位数据比特,从而到达语音压缩的目的。
在主程序中通过A/D抽样量化,可以得到16位的线性编码,再由编码表通过软件计算得到8位A律编码,其中最高位为符号位,第6位到第4位为段落码,低4位为段内码。
将8位的压缩结果存储到系统RAM中进行缓存,根据抽样率、语音存储时间以及系统RAM的容量设置语音存储缓冲区的大小,待缓冲区存满后,将缓冲区内的数据进行解压缩,然后输出到SPEAKER接口输出端。
若使用A/D转换器,必须首先对A/D转换器进行初始化设置,即设置A/D转换器的工作模式、输入增益以及抽样频率等。
3.程序设计
(1)、程序流程
存储器的分配(5402.cmd)
MEMORY
{
PAGE0:
VECS:
origin=0080h,length=0080h/*InternalProgramRAM*/
PRAM:
origin=7600h,length=8000h/*InternalProgramRAM*/
PAGE1:
SCRATCH:
origin=0060h,length=0020h/*ScratchPadDataRAM*/
DMARAM:
origin=0C00h,length=0300h/*DMAbuffer*/
DATA:
origin=1100h,length=0080h/*InternalDataRAM*/
STACK:
origin=1180h,length=0560h/*StackMemorySpace*/
INRAM:
origin=1900h,length=0100h/*InternalDataRAM*/
HPRAM0:
origin=1A00h,length=0002h/*HPImemoryaccessiblebyHostandDSP*/
HPRAM1:
origin=1A02h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/
HPRAM2:
origin=1C82h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/
EXRAM:
origin=1F10h,length=9000h/*ExternalDataRAM*/
}
SECTIONS
{
.cinit>PRAMPAGE0
.text>PRAMPAGE0
.vectors>VECSPAGE0
init_var>PRAMPAGE0
detect>PRAMPAGE0
vrcprg>PRAMPAGE0
matprg>PRAMPAGE0
.stack>STACKPAGE1
.trap>SCRATCHPAGE1
.const>EXRAMPAGE1
.data>EXRAMPAGE1
.bss>EXRAMPAGE1
.cio>EXRAMPAGE1
.switch>EXRAMPAGE1
tables>EXRAMPAGE1
var>EXRAMPAGE1
svctab>EXRAMPAGE1/*SS_VLSPtable*/
vctab>EXRAMPAGE1/*VLSPtable*/
uvctab>EXRAMPAGE1/*UVLSPtable*/
cuvtab>EXRAMPAGE1/*Stochasticcodebook*/
cdbktab>EXRAMPAGE1/*variouscodebooktables*/
logtab>EXRAMPAGE1/*tableforlog2*/
powtab>EXRAMPAGE1/*tableforpow2*/
hamtab>EXRAMPAGE1/*tableforhamming*/