语音压缩存储和回放.docx
《语音压缩存储和回放.docx》由会员分享,可在线阅读,更多相关《语音压缩存储和回放.docx(31页珍藏版)》请在冰豆网上搜索。
语音压缩存储和回放
DSP技术课程设计
语音压缩、存储和回放
实
验
报
告
班级:
自动化0703
组员:
熊浩澜07212080
朱冰07212089
指导老师:
高海林
一、实验背景……………………………………………………3
二、实验目的……………………………………………………3
三、实验设计要求及目标………………………………………3
四、实验原理……………………………………………………3
五、实验设计……………………………………………………5
六、实验程序……………………………………………………8
七、实验步骤…………………………………………………22
八、实验现象及仿真…………………………………………22
九、实验心得…………………………………………………27
十、参考文献…………………………………………………28
语音压缩、存储和回放
一、实验背景
语音信号是信息的重要形式,语音信号处理有着广泛的应用领域。
语音编码是数字化语音传输和存储的基础技术。
与模拟语音相比,使用语音编码技术的数字语音传输和存储系统,具有可靠性高、抗干扰能力强、便于快速交换、易于实现保密和价格低廉等优势。
但是 数字信号也有自身相应的缺点,即存储容量需求的增加及传输时信道容量要求的增加。
如何在现有的信道资源条件下,压缩信源以提高传输效率,从而解决日益增加的客户需求量与现有通信信道容量之间的矛盾已成为当前急待解决的问题之一。
因此为了减少语音信号所占用的带宽或存储空间,就必须对数字语音信号进行压缩编码。
本次实验采用DSPC5402实验板实现语音信号的压缩存储与解压的。
SEED-VC5402DSK实验板上集成了SRAM,FLASH,音频输入输出接口等部件。
这些外设为我们提供了极大的方便。
DSP芯片是一种特别适合于进行实时数字信号处理的微处理器。
它具有哈佛结构、多总线结构、流水线结构、多处理单元、特殊的DSP指令、指令周期短、运算精度高、硬件配置强等特点,以其独特的结构和快速的实现各种数字信号处理算法的突出优点,发展十分迅速,并在通信、雷达、声纳、语音合成和识别等领域获得了广泛的应用。
二、实验目的
1、熟悉TMS320C5402的系统结构与原理。
2、了解并运用语音压缩算法A-Law和u-Law的语音编解码和解码。
3、掌握用C语言对MSBSP和CODEC的编程方法。
4、熟悉C语言对外设(DSK板或信号源)的访问(软件编程、硬件连接)。
5、熟练使用软件CCS5000对程序的完整调试过程。
6、通过对比学习,了解不同的编码方式的优缺点。
三、实验设计要求及目标
1、使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。
2、采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP的片内和片外RAM存储器中,存储时间不小于10秒。
3、存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。
4、使用指示灯对语音存储和回放过程进行指示。
四、实验原理
实验包括对语音信号的接收、采样、存储、压缩、解压和输出几个环节。
首先将输入的语音数据首先进行抗混叠滤波,其中抗混叠滤波滤除高于1/2采样频率的信号成分,使信号带宽限定在某个范围内;否则,会产生频谱混叠,此时信号中的高频成分将产生失真。
然后进行模数转换,即把时间和幅度都连续变化的一维模拟信号,变成时间和幅度都离散的数字信号,根据采样定理,当采样频率大于信号最大频率的两倍时,在采样过程中就不会丢失信息,并且可以用采样后的信号重构原始信号。
由于人能够辨别的语音信号约在20-200Khz,实际的信号常有一些低能量的频谱分量超过采样频率的一半,如浊音的频谱超过4kHz的分量要比峰值低40dB以上;而对于清音,即使超过8kHz,频率分量也没有明显下降,因此语音信号达到的频率范围要达到10kHz以上。
虽然这样,对语音清晰度有明显影响的部分的最高频率为5.7kHz左右。
CCITT提出的G.711标准建议采样率为8kHz,但这只适合电话语音的情况。
在实际的语音信号处理中,采样频率一般为8k到10kHz。
经DSP采集并存入RAM存储器中,即是语音存储过程。
通过定义适当大的缓冲区,将压缩后的8位数据经过相应的整合,存储到16位的RAM中,这种操作目的主要是充分利用存储器中的资源,以保证能够录入足够多的语音数据。
利用缓冲区的目的是进行音效实时处理.系统中各模块是同时进行处理的,一部分信号正在ADC中进行转换,而另一部分信号则在DSP处理器中同时进行算法处理,即整个系统是以流水线的方式进行工作的。
语音信号的幅度(发音强度)并非均匀分布,由于小信号占的比例比大信号大很多,因此可以进行非均匀量化。
达到这一目标的基本做法是,对大信号使用大的量化间隔,而小信号则使用小的台阶。
这是我们使用ITU-TG.711的PCMA律和µ律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。
u/A律压缩解压编码是国际电报电话协会(CCIT)最早推出的G711语音压缩解压编码的一种格式的主要内容。
其中欧洲和中国等国家采用A律压缩解压编码,美国和日本采用u律压缩解压编码。
两个算法使用了非线性,把量化间隔变换成人耳能检测的线性空间。
本实验中分别采用A律和μ律语音压缩算法来实现。
A-Law编码解码方式:
A律限制采样值为12+1比特,将压缩后的格式码定义为PSSSQQQQ,相当于将正负值输入分成8个区段(0~7)。
其中P为符号位,0代表正,1代表负;SSS表示3位高位的区段码;QQQQ表示区段内小格码,区分不同输入的范围值。
这种编码方式使压缩、解压缩变得简洁而有效率。
A律压缩编码表
线性输入编码
压缩编码
0000000wxyza
000wxyz
0000001wxyza
001wxyz
000001wxyzab
010wxyz
00001wxyzabc
011wxyz
0001wxyzabcd
100wxyz
001wxyzabcde
101wxyz
01wxyzabcdef
110wxyz
1wxyzabcdefg
111wxyz
数据解压时DSP将压缩的8位数据解压成16位的DSP通用数据格式。
其中低13位为解压后的数据,高3位为0。
DSP将解压后的数据放在缓冲串口的发送寄存器中。
只要运行发送指令缓冲串口就会将数据发送出去。
μ-Law编码解码方式
μ律压缩与A律压缩的主要区别在与u律压缩是将十六位的数据近似为14位数据,精度上有一定的提高。
基本上的压缩方式和A律相同。
μ律压缩编码表
线性输入编码
压缩编码
00000001abcd1
000abcd
0000001abcd10
001abcd
000001abcd100
010abcd
00001abcd1000
011abcd
0001abcd10000
100abcd
001abcd100000
101abcd
01abcd1000000
110abcd
1abcd10000000
111abcd
通过解压缩,将8位还原成相应的语音数据,在经过AD50C将数字信号还原成语音信号(即模拟信号)通过多通道缓冲串口输出,达到放音的目的。
五、实验设计
硬件部分:
DSK包括:
主芯片1枚:
100MHzTMS320VC5402DSP
RAM1枚:
1个软件等待的64K×16bit的SRAM(CY7C1021V33)
FLASH1枚:
256K×16bit的FLASH存储器(AM39VF400A)
接口2个:
一个连接到PC机并口的主机端接口HPI和用于仿真的JTAG测试总线控制器信号采集和输出端口:
麦克风/耳机音频接口
扩展板接口:
用于扩展外部设备,例如lcd液晶显示器等
TI公司的TMS320C5402(以下简称C5402)芯片内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;指令执行时的多重流水线结构将指令周期降低到了最小值;多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、IIR、FFT等运算;7种有效灵活的寻址方式,仅为10ns的指令执行周期。
所以我们选用其作为我们实验应用芯片。
定点DSP芯片C5402用来实现对实时性要求较高的各种语音处理算法。
A/D、D/A功能由一片音频模拟接口芯片AD50C完成。
其内部集成了16位A/D和D/A转换器;采样频率为2~22.05kHz,可通过外部编程来设置。
通过I/O口实现数据的传输。
将语音采集数据存放在片上RAM中。
语音通过麦克与dsk板连接输入,通过耳机与dsk板连接输出。
AD50是单片音频接口芯片(AIC)。
它内部集成了16位的D/A和A/D转换器,采样速率最高可达22.05kb/s,其采样速率可通过DSP编程来设置。
在DAC之前有一个插值滤波器以保证输出信号平滑和ADC之后有一个抽取滤波器以提高输入信号的信噪比。
AD50内部有7个数据和控制寄存器,用于编程控制它们的工作状态。
它的数据传输模式和采样速率都可以通过DSP对其控制寄存器的编程来实现,因此,在许多场合下,AD50都作为DSP的AIC来实现音频处理。
C5402与AD50C的接口设计如图所示:
AD50C工作在主机模式(M/S=1),提供SCLK(数据移位时钟)和FS(帧同步脉冲)。
C5402工作于从机模式,其引脚BCLKX1、BCLKR1、BFSX1和BFSR1都设置为输入,接收数据和发送数据时均采用外部时钟和移位脉冲。
C5402的McBSP与外设AD50C的通信数据经过DR1和DX1引脚传输,控制信号由BCLKX1、BCLKR1、BFSX1和BFSR14个引脚实现。
AD50C对输入的语音信号进行采集、A/D转换之后通过中断方式传送给DSP,每一次中断直接读取A/DC的输出值,对其做需要的处理。
C5402与AD50C的连接
软件部分:
1、TMS320VC5402mcbsp的串口的初始化
首先将DSP的串口1复位,再对串口1的16个寄存器进行编程,使串口1工作在以下状态:
禁止SPI模式,但数据相,每帧一字,每字16位,帧同步脉冲低电平有效,并且帧同步信号和移位信号有外部时钟产生。
hHandset=codec_open(HANDSET_CODEC);
此语句调用了函数codec_open()对串口1进行了初步设置,设置成功返回codec的句柄放在变量hHandset中,作为调用其他函数的实参。
2、AD50的初始化:
该初始化过程调用了5个函数对AD50的5项参数进行了设置,包括adc和dac的工作模式,模拟输入和输出的增益;以及AD,DA的转换速率。
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);/*8KHzsampl