语音压缩存储与回放.docx
- 文档编号:10103685
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:28
- 大小:259.09KB
语音压缩存储与回放.docx
《语音压缩存储与回放.docx》由会员分享,可在线阅读,更多相关《语音压缩存储与回放.docx(28页珍藏版)》请在冰点文库上搜索。
语音压缩存储与回放
DSP课程设计
实验报告
语音压缩、存储与回放
一.
设计任务书
1.设计概述
语音信号是信息的重要形式,语音信号处理有着广泛的应用领域,而语音压
缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中已经有较成熟的发展和广泛应用。
本设计要求采用DSP及其A/D、D/A转换器进行语音信号的压缩、存储和回放。
2.设计目的
(1)了解DSP处理系统的关键器件的使用方法;
(2)掌握DSP课程设计的基本方法,巩固信号处理的基本理论知识;
(3)掌握查阅有关资料和使用器件手册的基本方法,学会阅读原版英文资料;
(4)掌握DSP片外资源和片上资源访问的基本方法,如存储器、McBSP、A/D和D/A转换器等。
(5)通过本次试验的设计和操作,掌握在CCS的软件环境下进行编辑、编译链接、调试和数据分析等工作。
(6)分利用DSK的集成环境,完成语音的采集,存储和回放。
(7)掌握PCM编码技术的基本原理及语音的A律压缩与解压。
3.设计目标
基本部分:
(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以
采用G.711、G.729等语音压缩算法。
(2)采用A/D转换器从MIC输入口实时采集语音信号,进行压缩后存储到DSP
的片内和片外RAM存储器中,存储时间不小于10秒。
(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEAKER输出口进行回放输出。
(4)使用指示灯对语音存储和回放过程进行指示。
发挥部分:
使用多种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺点。
二.设计内容
a.修改编写CODEC程序,利用A/u律实现语音信号的采集、压缩存储,解压缩与回放语音信号的基本算法。
b.创建、编译、链接工程项目,在BJTU-DSP5502板上调试运行。
c.采用A/D转换器从MIC端(J5端口)接入Linein信号采集信号(来自计算机麦克风输出),进行压缩后存储到DSP的片内或片外RAM存储器中。
d.存储器存满之后,使用DSP进行实时解压缩,并从输出口进行回放输出,在Headphone信号输出端(J6端口)接入扬声器或耳机,试听语音信号输出的效果。
三.设计算法、原理说明
1.设计方案
利用BJTU-DSP5502系统实验箱实现。
用系统板CODEC芯片中的AD/DA转换电路AIC23B将由MIC输入的模拟信号转换为16位数字信号送入DSP板中进行压缩处理,压缩处理后的数据经过解压后再送至D/A转换器转换为模拟信号,由SPEAKER口输出,压缩和解压缩用A律和u率格式。
可通过键盘输入进行选择,从而实现语音信号的采集压缩、存储与回放,编程由C语言完成。
2.设计框图
3.算法原理
(1)语音编码概述
将模拟声音信号转换为数字声音信号需要经过抽样、量化、编码三步。
其中,信号采样率就是抽样的频率,A/D转换的位数对应了量化的精度。
在本实验系统中这两步是由板载Codec来实现的。
这种以信号的强度依照同样的间距分成数段,然后用二进制码记录的编码方式称为PCM(脉冲编码调制)。
脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方式。
但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降。
为了在电话线路上传输更多的语音话路,实际应用中还需要对PCM信号进行压缩。
压缩编码的方式,是建立在语音信号的特点及统计规律之上的。
首先,人说话的语音信号普遍在3kHz左右,最高基本不超过3.4kHz。
其次,根据对大量语音样本的统计,我知道,在语音信号中小幅度成分出现的概率要比大幅度多得多,因而对大幅度信号采用较低的量化精度,不会对整体效果产生太大的影响,即小幅度信号量化间隔小,大幅度信号的量化间隔大,这种量化方式即非均匀量化。
根据以上原理,CCITT在上世纪80年代制订了G.711A律、μ律编码标准,通常又被称为A律PCM或μ律PCM。
经过G.711标准编码后语音信号采样率为8kHz,按13段(A律)或15段(μ律)进行8位非均匀量化,每秒的数据量为8-bit×8000=64kbit=8kB。
根据相关测试,其8-bit非均匀量化的效果可与13-bit均匀量化的效果相当。
由于相比均匀量化来说,小幅度信号的量化间隔被变小,大幅度信号的量化间隔被拉大,故这种方式又成为压缩扩展(压扩)技术。
压扩技术主要分为“模拟压扩法”和“直接非均匀编解码法”,不同之处在于对信号进行非线性量化的时刻不同。
在本实验中,非均匀量化由软件在16-bit均匀量化的结果上实现,属于“直接非均匀编解码法”。
(2)A率和μ率压缩,解压缩编码原理及对应表
G.711的两个标准的压缩扩展特性曲线称为A律和μ律,是CCITT提出的G.711协议PCM编码方式的一部分。
国际上,北美和日本使用μ律,欧洲和我国使用A律,两种算法都使用了非线性的量化方式,把量化间隔变换成人耳能检测的线性空间。
其中A律将归一化后的幅度,正负分别分为了8段。
如下图所示其中第1段、第2段斜率相同,因而下图的完整版(包含中心对称的正幅值和负幅值部分)常被称为A律13折线。
每一段内,再均匀等分为16个量级。
因此,总共的量化级数就由原先的215变为2×8×16=28,即256级。
在图中也可以直观的看到,其量化间隔在信号幅度小时较信号幅度大时密集许多。
同时,G..711标准建议编码后码字要进行偶数位翻转,然后进行传输。
A律限制采样值为12+1比特,将压缩后的格式码定义为PSSSQQQQ,相当于将正负值输入分成8个区段(0~7)。
其中P为符号位,0代表正,1代表负;SSS表示3位高位的区段码;QQQQ表示区段内码,区分不同输入的范围值。
这种编码方式使压缩、解压缩变得简洁而有效率。
下表为输入值与压缩编码间的关系,其中X为压缩中舍弃的位,输入值越大,被
舍弃的位数就越多,每个输入值有其对应的最高有效位。
其压扩特性的数学表达式如下:
μ率除编码位数不同外,原理与A率相似。
A率编码表
A率解压缩表
μ率编码表
μ率解压缩表
(3)G.726原理概述
语音信号的相邻样本之间具有很强的相关性,据统计其自相关系数通常可达0.85以上,故而可知相邻样本之间的差值是远小于量值本身的。
DPCM(差分脉冲编码调制)就是通过对相邻样本的差值进行编码的语音编码方法。
实现DPCM编码的原理图如下所示:
根据上图可知,编码器对本次样本与上一次译码器的采样值进行差分运算,这既可得到所需的差值,又可避免使用延时器获得上一样本时累计量化造成的误差。
上图只显示了一次差分的过程,实际上为了达到更加好的预测效果,实际编码中将与多个相邻样本进行比较,充分利用到语音信号之间的相关性。
ADPCM(自适应差分脉冲编码调制)是G.726标准的基本原理。
其原理框图如下:
对比DPCM的原理框图可知,ADPCM的核心思想就是在量化中采用自适应的原理,对量化间隔进行动态调整,使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小
四.硬件平台介绍
1.系统组成结构
本次设计采用的硬件系统是BJTU-DSP5502实验系统,实验箱内包括BJTU-DSP5502实验板和SEED-XDS510PLUS仿真器以及相关配件。
BJTU-DSP5502实验板主要包括:
DSP芯片1枚(U1):
TMS320VC5502@300MHz,SDRAM1枚(U5):
2M×32bit(8Mbytes)HY57V643220CT,FLASH1枚(U4):
256K×16bit(512Kbytes)SST39VF400A-70,CPLD1枚(U2):
CY37064VP100,通信接口3个:
仿真器JTAG接口(J1)、连接到PC机USB接口(J4)和UART接口(J2),信号采集和输出端口:
立体音输入接口line-in(J5,直接接电脑的语音输出端口)/麦克风输入接口(J7)/耳机音频输出接口(J6),扩展板接口(J9,J10)等,整个系统板结构框图如图所示:
本次语音压缩、存储和回放设计实验将会重点用到信号采集和输出端口,该端口使用CODEC(语音编译码)芯片AIC23B(A/D、D/A转换器)来实现语音信号的输入/输出,AIC23B通过McBSP多通道缓冲串行口与DSP相连。
2.主要硬件分析
(1)C5502的特点
●增强型哈佛结构,一个程序总线,三个独立的数据总线
●40bit的算术逻辑单元ALU
●可寻址的程序空间达1Mx16bit
●4Kx16bit片内ROM
●16Kx16bit双口片内RAM
●片内外设:
软件可编程等待状态发生器;片内锁相环时钟发生器;
●两个多通道缓冲串口;增强型8bit并行HPI口;两个16bit定时器;
●10ns的指令执行周期。
(2)McBSP(Multi-channelBufferedSerialPort):
多通道缓冲串行口。
C5502有两个McBSP,McBSP0和McBSP1,其功能特点有:
●全双工通信。
●双缓冲发送、三缓冲接收寄存器,以实现连续数据流发送。
●支持多达128通道个的接收和发送。
●利用DMA,McBSP可脱离CPU控制,直接内存存取单独运行
●内置律和律硬件压缩和扩展。
(3)MCBSP数据的接收与发送:
数据的接收通过三级缓冲完成,如下图所示:
RRDY状态位置1,表明DRR数据已准备好,可以读数据数据的发送通过两
级缓冲完成,如下图所示:
五.程序设计、调试与结果分析
1.程序流程图
2.源程序
/*****************************************************************************/
/*文件名:
CODEC.c*/
/*创建时间:
29/06/2012*/
/*功能描述:
DSP课程设计语音压缩,存储并回放*/
/*作者:
王哲09211114通信0909*/
/*****************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include"5502_FLASH.h"
#include"E2PROM_Function.h"
#include"CODEC.h"
#undefCODEC_ADDR
#defineCODEC_ADDR0x1A
Uint32SourData[5][65536]={0};
signeddata;
Uint16temp1;
Uint8temp2;
/*****************************************************************************/
/*函数声明*/
/*****************************************************************************/
unsignedchardata2alaw(signedpcm_val);
intalaw2data(unsignedchara_val);
staticintsearch(intval,short*table,intsize);
voiddelay(intperiod);
staticshortseg_end[8]={0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF};
Uint8data2ulaw(signedpcm_val);
intulaw2data(Uint8input);
#pragmaDATA_SECTION(SourData,".Audio_in_data");
/*宏定义*/
#defineu_law0xAA0A//u律压缩
#defineA_law0xAA07//A律压缩
#defineTESTCOMMAND1//操作命令选择
#defineSIGN_BIT(0x80)/*SignbitforaA-lawbyte.*/
#defineQUANT_MASK(0xf)/*Quantizationfieldmask.*/
#defineNSEGS(8)/*NumberofA-lawsegments.*/
#defineSEG_SHIFT(4)/*Leftshiftforsegmentnumber.*/
#defineSEG_MASK(0x70)/*Segmentfieldmask.*/
//定义McBSP的句柄
MCBSP_HandlehMcbsp;
/*------------------------------------------------------------------------------------*/
//
//FUNCTION:
MAIN
//
/*------------------------------------------------------------------------------------*/
voidmain(void)
{
Uint16i,j,n;
Uint16TempData;
Uint16TestCommand=0;
//InitializeCSLlibrary-ThisisREQUIRED!
!
!
CSL_init();
#ifTESTCOMMAND==1
TestCommand=u_law;//u律压缩
#endif
#ifTESTCOMMAND==2
TestCommand=A_law;//A律压缩
#endif
//Themainfrequencyofsystemis240MHz
//该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数
PLL_setFreq(1,0xC,0,1,3,3,0);
//EMIF初始化
Emif_Config();
//OpenMcBSPport1andgetaMcBSPtypehandle
hMcbsp=MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);
//ConfigMcBSPport1byusepreviouslydefinedstructure
Mcbsp_Config(hMcbsp);
//I2C初始化
I2C_cofig();
//CODEC寄存器初始化(此例采样率为32KHz,详情见AIC23.c)
inti_AIC();
/*------------------------------------------------------------------------------------*/
//ReceivetheADCoutputdataofCODEC
//ThenoutputthereceiveddatatoDACofCODEC
/*------------------------------------------------------------------------------------*/
while
(1)
{
switch(TestCommand)
{
/************************************************************************/
/*u律压缩、储存与回放*/
/************************************************************************/
caseu_law:
asm("BCLRXF");//;ClearXF
delay(3000);
asm("BSETXF");//;SetXF
delay(3000);
asm("BCLRXF");//;ClearXF
for(j=0;j<5;j++){
for(i=0;i<65535;i++)
{
n=0;
while(n<4)
{
while(!
MCBSP_rrdy(hMcbsp)){};
TempData=MCBSP_read16(hMcbsp);
temp1=data2ulaw(TempData);
switch(n)
{
case0:
SourData[j][i]=(temp1<<=24);break;
case1:
SourData[j][i]=(SourData[j][i]|(temp1<<=16));break;
case2:
SourData[j][i]=(SourData[j][i]|(temp1<<=8));break;
case3:
SourData[j][i]=(SourData[j][i]|temp1);break;
default:
break;
}
n++;
}
}
}
asm("BCLRXF");//;ClearXF
delay(3000);
asm("BSETXF");//;SetXF
for(j=0;j<5;j++){
for(i=0;i<65535;i++)
{
n=0;
while(n<4){
switch(n)
{
case0:
temp2=(SourData[j][i]>>24)&0x0ff;
case1:
temp2=(SourData[j][i]>>16)&0x0ff;
case2:
temp2=(SourData[j][i]>>8)&0x0ff;
case3:
temp2=SourData[j][i]&0x0ff;
}
while(!
MCBSP_xrdy(hMcbsp)){};
TempData=ulaw2data(temp2);
MCBSP_write16(hMcbsp,TempData);
n++;
}
}
}
break;
/**********************************************************************/
/*A律压缩、储存与回放*/
/**********************************************************************/
caseA_law:
asm("BCLRXF");//;ClearXF
delay(3000);
asm("BSETXF");//;SetXF
delay(3000);
asm("BCLRXF");//;ClearXF
for(j=0;j<5;j++){
for(i=0;i<65535;i++)
{
n=0;
while(n<4)
{
while(!
MCBSP_rrdy(hMcbsp)){};
TempData=MCBSP_read16(hMcbsp);
temp1=data2alaw(TempData);
switch(n)
{
case0:
SourData[j][i]=(temp1<<=24);break;
case1:
SourData[j][i]=(SourData[j][i]|(temp1<<=16));break;
case2:
SourData[j][i]=(SourData[j][i]|(temp1<<=8));break;
case3:
SourData[j][i]=(SourData[j][i]|temp1);break;
default:
break;
}
n++;
}
}
}
asm("BCLRXF");//;ClearXF
delay(3000);
asm("BSETXF");//;SetXF
for(j=0;j<5;j++){
for(i=0;i<65535;i++)
{
n=0;
while(n<4){
switch(n)
{
case0:
temp2=(SourData[j][i]>>24)&0x0ff;
case1:
temp2=(SourData[j][i]>>16)&0x0ff;
case2:
temp2=(SourData[j][i]>>8)&0x0ff;
case3:
temp2=SourData[j][i]&0x0ff;
}
while(!
MCBSP_xrdy(hMcbsp)){};
TempData=alaw2data(temp2);
MCBSP_write16(hMcbsp,TempData);
n++;
}
}
}
break;
default:
break;
}
}
}
/****************************************************************************/
/*子函数*/
/****************************************************************************/
/*******延时******/
voiddelay(intperiod)
{
inti,j;
for(i=0;i { for(j=0;j } } /*****a律压缩******/ unsignedchardata2alaw(signedpcm_val) { intmask; intseg; u
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语音 压缩 存储 回放