语音压缩 孙明皓 通信0801 08211203孙耀中 08211176 通信0807.docx
《语音压缩 孙明皓 通信0801 08211203孙耀中 08211176 通信0807.docx》由会员分享,可在线阅读,更多相关《语音压缩 孙明皓 通信0801 08211203孙耀中 08211176 通信0807.docx(62页珍藏版)》请在冰豆网上搜索。
![语音压缩 孙明皓 通信0801 08211203孙耀中 08211176 通信0807.docx](https://file1.bdocx.com/fileroot1/2023-2/24/2d40a7a5-9733-42bf-a8a2-b213bfa7b1ed/2d40a7a5-9733-42bf-a8a2-b213bfa7b1ed1.gif)
语音压缩孙明皓通信080108211203孙耀中08211176通信0807
DSP课程设计实验报告
语音压缩、存储和回放
通信080708211176孙耀中
通信080108211203孙明皓
1.设计要求与目标
2.实验目的
3.实验设计原理及硬件
4.实验算法
4.1G711语音压缩算法
4.1.1A律
4.1.2u律
4.2G721语音压缩算法
5.程序设计、调试与结果分析
5.1调试过程
5.2高位编码与低位编码对比
5.3A律与u律编码对比
5.4加入滤波器对比
6.实验总结
7.参考文献
8.源程序
8.1.cmd文件
8.2.1A律压缩程序(低13位压缩)
8.2.2A律压缩程序(高13位压缩)
8.3.1u律压缩程序(低14位压缩)
8.3.2u律压缩程序(高14位压缩)
8.4.滤波之后压缩程序
语音的压缩、存储与回放
一、设计要求与目标
(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语言下的编程方法。
三、实验设计原理及硬件
本实验总的原理框架是从MIC端输入模拟的语音信号,经过AD变换转换为16bit的语音信号,经过压缩算法进行压缩,然后存储在buffer中,对于A律和u律,由于压缩后数据为8bit,所以为了充分利用存储空间,每个buffer里面存储两个数据,存储一段时间后,再经过解压缩和DA变换将语音信号从麦克风端输出。
3.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,且外围电路简单,性价比高。
3.2语音编码
3.2.1概念:
语音编码一般分为两类:
一类是波形编码,一类是被称为“声码器技术”的编码。
PCM编码即脉冲编码调制。
波形编码的最简单形式就是脉冲编码调制(Pulsecodemodulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅度进行编码,所以叫做脉冲编码调制。
脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。
3.2.2量化:
脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方式。
但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降。
国际上有两种非均匀量化的方法:
A律和u律,u律是最常用的一种。
在美国,7位u律是长途电话质量的标准。
而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。
3.2.3DPCM&ADPCM:
降低传输比特率的方法之一是减少编码的信息量,这要消除语音信号中的冗余度。
相邻的语音样本之间存在明显的相关性,因此对相邻样本间的差信号进行编码,便可使信息量得到压缩。
因为差分信号比原语音信号的动态范围和平均能量都小。
这种编码叫DifferentialPCM,简称DPCM,即差分脉冲编码调制。
ADPCM即自适应差分脉冲编码调制,是包括短时预测的编码系统。
CCITT(国际电报电话咨询委员会)在1984年提出的32kbit/s的编码器建议就是采用ADPCM作为长途传输中的国际通用语音编码方案。
这种ADPCM编码方案达到64kbit/sPCM的语音传输质量,并具有很好的抗误码性能。
3.3.硬件结构
3.3.1DSP芯片TMS320VC5402
TMS320VC5402数字信号处理器是DSK5402实验板的核心。
TMS320C5402采用先进的改进的哈佛结构和8条总线结构,解决了冯诺伊曼(Von-Neumann)结构中高速数据传输时的传输通道上的瓶颈现象,使处理器的性能大大提高,程序数据总线相互独立,允许同时访问程序存储器和数据存储器,实现高度并行操作。
此外,还可以在数据总线与程序总线之间相互传送数据,从而使处理器具有在单个周期内同时执行算数运算、逻辑运算、移位操作、乘法/累加运算以及访问程序和数据存储器的强大功能。
TMS320C5402的内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;指令执行时的多重流水线结构将指令周期降低到了最小值;多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、IIR、FFT等运算。
由于C5402有7种有效灵活的寻址方式的软件特点,仅为10ns的指令执行周期,还有一些特殊的运算指令更好地满足了数字信号处理中特有的运算需要。
TMS320C5402具有高速的,全双工串行口,可用来与系统中的其他C54x器件,编码解码器,串行A/D,D/A转换器以及其他的串行器件直接接口。
这两个串行口均为多通道缓冲串行口McBSP(Multi-channelBufferedSerialPort)。
它支持全双工通信,双缓冲数据寄存器,允许连续的数据流。
内置μ-律和A-律压扩硬件。
C5402硬件优点:
内部多总线结构保证在一个机器周期内可以多次访问程序空间和数据空间;指令执行时的多重流水线结构将指令周期降低到了最小值;多处理单元可以在一个指令周期内同时进行运算,而这种结构恰好满足了数字信号处理中的一些特殊要求如FIR、IIR、FFT等运算。
C5402的软件特点:
7种有效灵活的寻址方式,仅为10ns的指令执行周期
3.3.2McBSP(Multi-channelBufferedSerialPort)多通道缓冲串口
C5402有两个McBSP:
McBSP0和McBSP1,其功能特点有:
1.全双工通信。
2.双缓冲发送、三缓冲接收寄存器,以实现连续数据流发送。
3.支持多达128通道个的接收和发送。
4.利用DMA,McBSP可脱离CPU控制,直接内存存取单独运行。
5.内置律和律硬件压缩和扩展。
本实验主要使用是McBSP的双通道通信,即从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到McBSP的发送通道,构成AD50CODEC模拟输入和输出通道的自环,是否能接收到A/D转换的数据是通过查询串口1的接收标志RRDY来进行的。
利用DSK进行信号处理框图如下:
使用McBSP前,需要对串口进行初始化。
首先将DSP的串口1复位,再对串口1的16个寄存器进行编程,使串口1工作在以下状态:
禁止SPI模式,但数据相,每贞一字,每自16位,贞同步脉冲低电平有效,并且贞同步信号和移位信号有外部时钟产生。
DSP给AD50编程用查询方式,A/D转换数据的接收和D/A转换的数据发送采用查询方式。
hHandset=codec_open(HANDSET_CODEC);
此语句调用了函数codec_open()对串口1进行了初步设置,设置成功返回codec的句柄放在变量hHandset中,作为调用其他函数的实参。
3.3.3CODEC模块
CODEC模块以TLC320AD50为核心,其内部集成了16位A/D和D/A转换器,采样速率最高可达22.05KHZ,并可通过外部编程进行设置。
在TLC320AD50C内部DAC之前有插值滤波器,而在ADC之后有抽样滤波器,接受和发送可以同时进行。
它采用两组模拟输入和两组模拟输出,有足够的共模抑制能力,可工作在差分或单端方式。
输入增益和输出衰减可以通过外部编程控制。
AD50芯片使用差分输入、单端输出方式,这就需要将音频信号转换成差分信号,采用TLC2272低噪声的运算放大器实现转换功能。
最后,AD50单端输出信号经音频功率放大器LM386放大后输出。
AD50内部有7个数据和控制寄存器,用于编程控制它们的工作状态。
AD50与C5402之间的数据传送采用串行方式,包括两种传输模式:
16位和15+1位传输模式。
15+1位模式时,其中的D0位表示二次通信。
四、实验算法
4.1G711语音压缩算法
4.1.1A律压缩
A律压缩编码表
线性输入编码
压缩编码
0000000wxyza
000wxyz
0000001wxyza
001wxyz
000001wxyzab
010wxyz
00001wxyzabc
011wxyz
0001wxyzabcd
100wxyz
001wxyzabcde
101wxyz
01wxyzabcdef
110wxyz
1wxyzabcdefg
111wxyz
4.1.2u律压缩
u率限制采样模值为13比特,u律的压缩可定义为:
x为归一化输入,y为归一化输出。
归一化是指信号电压与信号最大电压之比,所以归一化的最大值为1。
μ为压扩参数,表示压扩程度。
不同μ值压缩特性如图(a)所示。
由图可见,μ=0时,压缩特性是一条通过原点的直线,故没有压缩效果,小信号性能得不到改善;μ值越大压缩效果越明显,一般当μ=100时,压缩效果就比较理想了。
在国际标准中取μ=255。
另外,需要指出的是μ律压缩特性曲线是以原点奇对称的,图中只画出了正向部分。
从线性到u律的压缩转换如下表所说明。
压缩后的码字组成:
比特0-3表示量化值,比特4-6表示段值,压缩后的码字符号放在比特7,为了简化未写出。
U律二进制编码表
压缩前的码字
丢弃的
比特数
压缩后的码字
输入值
段值,量化值
比特1211109876543210
比特:
6543210
00000001abcdx
1
000abcd
0000001abcdxx
2
001abcd
000001abcdxxx
3
010abcd
00001abcdxxxx
4
011abcd
0001abcdxxxxx
5
100abcd
001abcdxxxxxx
6
101abcd
01abcdxxxxxxx
7
110abcd
1abcdxxxxxxxx
8
111abcd
其它语音压缩算法:
在扩展前,u律码字再次反转。
低位的有效比特原是丢弃的,但是为了减少精度损失,用中间值近似。
为了简化,扩展后的码字符号左溢。
通过相关查阅,可以了解到对语音进行编码的标准除了G.711外还有很多,其中不乏一些逐步发展为适应当今VoIP和3G需求的编码标准。
话音质量更好、压缩程度更高,是这些编码标准的特点。
还有一些编码标准则不仅面向语音,而是为视频会议指定的编码标准。
另外,这些编码标准也不都是同G.711标准一样采用波形编码的方式,有一些则是通过对语音样本进行分析计算,提取特征参数,如CELP;还有一些则是混合式的编码标准。
下表所示为一些常见的语音编码标准:
用途
抽样频率(kHz)
压缩标准或系统
压缩技术
码率(kbit/s)
长途电话
8
G.711
G.726
G.728
PCM
ADPCM
LD-CELP
64
40/32/24/16
16
移动电话
8
GSM
IS54/IS95
G.729
RPE/LTP
VSELP/QSELP
CS-ACELP
13.2
16/8/4/2/1
8
ISDN,会议电视
1
G.722
SB-ADPCM
64/56/48
VCD
32/48
ISO/IEC10149
MPEG1
192/128/96
我们主要查阅了相关G721和G723的标准进行语音压缩。
4.2G721语音压缩算法
G721为32Kbit/sADPCM编码标准,它进一步利用了语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应量化,在32Kbit/s速率上能够给出网络等级话音质量,符合进入公共网的要求。
G721编码和解码图形如下。
经过编码,将语音信号压缩为4位数据进行存储,在经过解压为16位转换为模拟信号输出
五、程序设计、调试与结果分析
5.1、程序设计
1.1TMS320VC5402McBSP的串口的初始化:
首先将DSP的串口1复位,再对串口1的16个寄存器进行编程,使串口1工作在以下状态:
禁止SPI模式,但数据相,每帧一字,每字16位,帧同步脉冲低电平有效,并且帧同步信号和移位信号有外部时钟产生。
DSP给AD50编程用查询方式,A/D转换数据的接收和D/A转换的数据发送采用查询方式。
hHandset=codec_open(HANDSET_CODEC);
此语句调用了函数codec_open()对串口1进行了初步设置,设置成功返回codec的句柄放在变量hHandset中,作为调用其他函数的实参。
1.2AD50的初始化:
codec_dac_mode(hHandset,CODEC_DAC_15BIT);/*DAC15bit模式*/
codec_adc_mode(hHandset,CODEC_ADC_15BIT);/*ADC15bit模式*/
codec_ain_gain(hHandset,CODEC_AIN_6dB);/*输入6dB增益*/
codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB);/*输出-6dB增益*/
codec_sample_rate(hHandset,SR_8000);/*8KHz采样率*/
该初始化过程调用了5个函数对AD50的5项参数进行了设置,包括ADC和DAC的工作模式,模拟输入和输出的增益;以及AD/DA的转换速率。
2、程序调试
2.1调试过程
1.将SEED-VC5402DSK板与计算机的并口相连;
2.连接DSK板的电源,并启动计算机;
3.双击桌面上的CCS2(C5000)图标运行CCS程序,在CCS并行调试管理器窗口中选择打开“C5402DSK/CPU-1”选项启动DSK板的驱动程序,注意在启动CCS之前先按一下DSK板的复位按钮。
正常启动CCS之后,在CCS的左上角出现“C5402DSK/CPU-1”的提示;
4.将本工程目录拷贝至C:
\ti\myproject目录下;
5.将本工程进行编译,并装载程序;
6.运行工程,在MIC信号输入端输入一个语音信号,在SPEAKER信号输出端用耳机接收;
2.2调试方法
在调试过程中,我们充分利用CCS集成开发环境提供的调试工具。
CCSIDE能够即时读取DSP芯片的寄存器状态、内存状态,并列表显示或绘图。
在本实验中,我们主要是利用了查看内存的两种方式,WatchWindow和Memory。
如下图所示:
通过查看内存中各数值变化,我们就能基本确定程序的运行是否正常。
比如计数值i是否在不断变化,data中的值是否在不断更新等。
由于处理的数据量比较大,故这样比单步调试的方式更适合本实验的具体情况,也使我们能清楚了解程序运行中出现的问题究竟表现为什么样的形式、最有可能出问题的地方在哪里。
3、硬件结果显示
程序开始运行,灯闪两次,初始化codec。
发光二极管0亮开始采集语音数据,二极管0熄灭录音结束,二极管1亮开始放音,二极管1熄灭放音结束,二极管2亮表示一次语音压缩存储和回放结束,二极管2灭,二极管0亮重新开始采样语音信号,如此循环运行程序。
4.G711的A律、u律与G721和G723的比较
A律将13比特压缩为8比特,u律将14比特压缩为8比特,而G721是把输入的16比特压缩为4比特,为ADPCM,G723有两种不同的传输码率,可以压缩为3比特或者5比特,本实验用的是压缩为3比特。
因此,在所要求的存储时间相同的情况下,G721所需的存储空间更小,但由于压缩的比特少,所以语音信号相对失真比较重一点,而对于A律和u律,其信号解压效果差不多。
5.2高位编码与低位编码对比
在进行A律压缩时,采样后得到16位数据,根据A律编码规则,把采样后16位数据中的13位数据压缩成8位,默认其最高位为符号位,我们分别采用对其高位13位和低位13位进行编码,以观察和鉴别其音质质量。
我们在经过实验对比后发现在音量较大的情况下,在对低13位进行压缩编码回放时音质比较浑浊,高13位编码音质明显比较好,音量较低的时候差别不是很明显。
5.3A律u律对比
通过原理分析,我们知道u律压缩比a律压缩的位数多,应该是u律比较好,但是我们通过输入输出图形可以看到其编码的差别不是很大,而且在试听的时候并没有发现明显的区别。
对2kHz信号a律输入输出频谱对比
对2kHz信号u律输入输出频谱对比
5.4加入滤波器对比
因为要进行抽样量化所以对滤波器的设计是必不可少的,但是我们再加入fft滤波器之后,并没有得到理想的效果,不知道是不是程序编写有问题,音质不如先前的效果。
六、实验总结
孙明皓:
在本次试验中我了解了基本的dsp进行语音压缩和编码的规则和检测方式,也比较了不同种类编码的好坏。
所选题目在所有题目中用该算是比较简单的,但是程序的编写和调试过程并不是一帆风顺,下面简单总结如下:
首先对程序不是很了解,在网上找了许多范本对程序有了基本的概念,但是对整个程序运行和调试的过程不是很清楚,出现找不到头文件路径还有库文件加载不全,在看过ppt之后能熟练的解决。
其次总是在程序编译出现错误,.cmd的存储空间分配不正确。
但是我们并没有系统的学习如何编写.cmd文件的编写,于是只能通过请教老师和自己查找资料慢慢学习,最后经过我们的努力,初步掌握了cmd的一些编写规则,但是还是有很多不懂的地方,例如在帮同学改程序的时候对一个dma进行分配,没有弄明白。
还有本实验的设计要求是存储的时间不能小于10秒,但是刚开始,我们只能存储5秒多,所以增长时间是我们面临的大问题,我们根据计算,采用8K的采样频率最多可以存储16秒,所以我们有很大的改善空间,于是根据要求计算修改参数,结果只能进行一次压缩,然后无限次回放,经过研究,可能是cmd中存储空间分配不足所致,将未知空间的数据段冲掉所致,经过修改可以达到效果
最后我们对dsp中ad取样有所质疑,就是对16位数据进行a律和u律编码时总是要略去低位或者高位,通过实验对比我们发现取高位的效果好一点,能够比较清晰的还原所压缩的语音信号。
这次课程设计对我们来说简直就是一项浩大的工程,程序参照了许多范例,但是经过我们自己的修改进行的创新,使得我们最终完成了设计任务,虽然也许结果还算让人满意,我们也从中学到了许多知识。
这次课程设计,锻炼了我们理论应用于实践的能力、培养了我们的设计思维、独立思考能力、软硬件结合的能力、动手能力以及分析问题、解决问题的能力。
它让我们在体会到设计程序的艰辛的同时,更体会到成功的喜悦和快乐,为将来的深入学习以及运用理论解决实际问题打下了良好的基础。
孙耀中:
经历了这次实验,我想我们充分认识到了压力带给人的巨大动力。
确定做语音压缩,存储与回放实验后,查了大量A律,u律压缩方法的资料,并学习了CCS环境下的操作、调试与运行。
由于之前对DSP很不了解,这方面学习我们去实验室操作了不少时间,终于熟悉了它的操作步骤与简单调试方法。
然后具体针对语音压缩回放实验,我们经历了比较大的挫折。
首先借了板子后怎么都不能和计算机连接,换了好几台电脑都不行,换了板子后终于可以了,但问题是语音不能录入,很疑惑,编译下载都没问题,最后发现是耳机的问题。
终于能录入后,我们很激动,接下来就是观察波形与数据了。
分别看了输入与经压缩后波形,发现没什么区别,而且有连续整段波形全在横轴上方或下方,经分析后我们修改了显示点数,将256改为128,则波形变疏,同时也能看出压缩后的变化,只是不太明显,说明A律压缩不会有很大失真,效果较好。
对比输入输出波形,发现很相近,达到了实验要求。
至于为何有连续整段波形全在横轴上方或下方,我想是因为没有信号输入导致,但具体还有待自己去查找资料。
在调试过程中我们还学习了断点的设置与利用,还有在watchwindow中对输入变量data设置不同的值可分析波形的变化情况,同时还可查看buffer中存储内容。
我们自己试验的扩展部分是将录音与放音时间调长,经改大buffer容量,并相应加大i,j的循环次数则可。
由于时间比较紧,我们只是查了u律压缩的实现方法,没有将其与A律压缩做具体比较,觉得比较遗憾。
我觉得这是挺有意思的实验,让我自己去摸索验证理论性的东西。
七、参考文献
[1]RecommendationG.726.CCITT.1990
[2]TMS320C54xDSPCPUandPeripherals.TexasInstrumentInc,2001.
[3]TMS320C54xDSPApplicationsandGuide.TexasInstrumentInc,2001.
[4]TLC320AD50CDatasheet.TexasInstrumentInc.2001
[5]TMS320VC5402Datasheet.TexasInstrumentInc.2001.
[6]高海林、钱满义.DSP技术及其应用讲义.北交大出版社.2005年10月
[7]吴冬梅、张玉杰.DSP技术及应用.北京大学出版社.2006年8月
[8]吴家安.现代语音编码技术.科学出版社.2008年1月
八、源程序
8.1.cmd文件
/*****************************************************************************/
/*C5402DSKDSPMemoryMap*/
/**/
/*