DSP语音压缩存储和回放报告.docx

上传人:b****6 文档编号:8216613 上传时间:2023-01-29 格式:DOCX 页数:32 大小:928.86KB
下载 相关 举报
DSP语音压缩存储和回放报告.docx_第1页
第1页 / 共32页
DSP语音压缩存储和回放报告.docx_第2页
第2页 / 共32页
DSP语音压缩存储和回放报告.docx_第3页
第3页 / 共32页
DSP语音压缩存储和回放报告.docx_第4页
第4页 / 共32页
DSP语音压缩存储和回放报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

DSP语音压缩存储和回放报告.docx

《DSP语音压缩存储和回放报告.docx》由会员分享,可在线阅读,更多相关《DSP语音压缩存储和回放报告.docx(32页珍藏版)》请在冰豆网上搜索。

DSP语音压缩存储和回放报告.docx

DSP语音压缩存储和回放报告

 

数字信号处理(DSP)

综合设计性实验报告

 

题目:

语音压缩、存储与回放

学院:

班级:

 

一.实验目的

1.掌握利用DSP进行信号采集的方法,掌握利用DSP进行语音信号的压缩和解压方法,以及语音信号的回放方法。

2.学会A/D、D/A的工作原理和使用,学会A/D、D/A转换器的编程方法。

3.以语音信号处理为依托,深入理解信号的抽样和重建的基本方法,提高学生系统地思考问题和解决实际问题的能力。

4.通过调用DSPCSL库对McBSP接口进行编程,学会DSP片上外设的使用方法。

二.实验内容

1.基本部分

(1)使用DSP实现语音压缩和解压缩的基本算法,算法类型自定,例如可以采用G.711、G.729等语音压缩算法。

(2)设置A/D的采样率为32KHz,从Line-in或MIC输入口实时采集语音信号,利用McBSP1接收寄存器将外部语音数据接收到DSP中,接收1s数据。

(3)采用适当的语音压缩算法,将接收到的数据进行压缩。

也可以将接收到的数据直接压缩后存储。

(4)对上述已压缩数据进行解压。

(5)将解压后的数据经Headphone端口输出,利用耳机试听。

(6)使用指示灯对语音存储和回放过程进行指示。

2.发挥部分

(1)至少使用2种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺点。

(2)将A/D采样率和D/A的转换率设置为不同频率,对比输出的语音信号,发现不同并解释原因。

三.实验原理

1.语音编码

(1)概念

语音编码一般分为两类:

一类是波形编码,一类是被称为“声码器技术”的编码。

PCM编码即脉冲编码调制。

波形编码的最简单形式就是脉冲编码调制(Pulsecodemodulation),这种方式将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表示,并用脉冲对采样幅度进行编码,所以叫做脉冲编码调制。

脉冲编码调制没有考虑语音的性质,所以信号没有得到压缩。

(2)量化

脉冲编码调制用同等的量化级数进行量化,即采用均匀量化,而均匀量化是基本的量化方式。

但是均匀量化有缺点,在信号动态范围较大而方差较小的时候,其信噪比会下降。

国际上有两种非均匀量化的方法:

A律和μ律,μ律是最常用的一种。

在美国,7位μ律是长途电话质量的标准,而我国采用的是A律压缩,而且有标准的A律PCM编码芯片。

2.当前压缩算法及压缩技术介绍

(1)压缩算法介绍

用途

抽样频率(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

表1压缩算法介绍

(2)压缩技术介绍

a.波形编码:

直接对语音时域或频域波形样值进行编码。

如PCM,ADPCM.

b.参数编码:

对人类语音的生成模型的参数进行编码。

c.混合编码:

结合波形编码和参数编码。

MPLPC,RPE/LTP,CELP,VSELP

d.可变速率编码:

G.727嵌入式编码

e.无失真编码:

霍夫曼编码

f.ADPCM工作原理

h.自适应地改变量化幅值

i.确定好量化幅度的最大值和最小值

3.语音的A律压缩与解压

统计表明对于语音信号来说,语音中小幅度成分出现的概率要比大幅度多得多,为了在语音信号的整个动态范围内都可以接受低电平信号,量化电平必须照顾到语音的低电平信号,极低电平的量化间隔要小,高电平的量化间隔要大。

两个标准的压缩算法扩展特性曲线称为u律和A律,使CCITT提出的G.711协议PCM编码方式的一部分。

北美和日本使用u律,欧洲使用A律,两个算法使用了非线性,把量化间隔变换成人耳能检测的线性空间。

A律和μ律语音压缩标准可以分别将13比特和14比特压缩为8比特,达到语音压缩的目的。

A律限制采样值为12比特(除去符号位),A律的压缩可以按照下列公式进行定义:

式中,A是压缩参数(在欧洲,A=87.6)x是需要压缩的归一化整数。

从线性到A律的压缩转换如下表所示:

压缩后的码字组成:

比特0-3表矢量化值,比特4-6表示段值,压缩后的码字符号放在比特7,为了简化未写出。

压缩前的码字

丢弃的比特数

压缩后的码字

输入值

段值量化值

比特:

11109876543210

比特:

6543210

0000000abcdx

1

000abcd

0000001abcdx

1

001abcd

000001abcdxx

2

010abcd

00001abcdxxx

3

011abcd

0001abcdxxxx

5

100abcd

001abcdxxxxx

6

101abcd

01abcdxxxxxx

7

110abcd

1abcdxxxxxxx

8

111abcd

表2A律压缩转换表

A律的扩展可定义为:

从A律到线性扩展的转换如下表:

压缩过的码字

偏值的输入

段值量化值

比特:

6543210

比特:

11109876543210

000abcd

0000000abcd1

001abcd

0000001abcd1

010abcd

000001abcd10

011abcd

00001abcd100

100abcd

0001abcd1000

101abcd

001abcd10000

110abcd

01abcd100000

111abcd

1abcd1000000

表3A律解压转换表

4.语音的u律压缩与解压原理

u率限制采样模值为13比特,u律的压缩可定义为:

从线性到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

表4U律压缩转换表

在扩展前,u律码字再次反转。

低位的有效比特原是丢弃的,但是为了减少精度损失,用中间值近似。

为了简化,扩展后的码字符号左溢。

U率二进制解码表

压缩过的码字

偏值的输入

段值量化值

比特:

6543210

比特:

1211109876543210

000abcd

00000001abcd1

001abcd

0000001abcd10

010abcd

000001abcd100

011abcd

00001abcd1000

100abcd

0001abcd10000

101abcd

001abcd100000

110abcd

01abcd1000000

111abcd

1abcd10000000

表5U律解压转换表

5.设置采样率和转换率

更改采样率和转换率,查找手册TLV320AIC23BDataManual(Rev.G):

根据上表修改AIC23.c子程序采样率设置语句:

Uint16Sample_Rate_Control[2]={

Codec_SRC_REV,

SRC_CLKIN(0)+SRC_CLKOUT(0)+SRC_SR(6)

+SRC_BOSR(0)+SRC_USB(0)

};

将SRC_SR(6)中数值6改为相应数值,代表其他采样率。

如表,1代表48K-8K,2代表8K-48K,0代表48K-48K。

四.程序设计

1.硬件组成

(1)BJTU-DSP5502实验板

DSP芯片1枚(U1):

TMS320VC5502@300MHz

SDRAM1枚(U5):

2M×32bit(8Mbytes)HY57V643220CT

FLASH1枚(U4):

256K×16bit(512Kbytes)SST39VF400A-70

CPLD(复杂可编程逻辑器件)1枚(U2):

CY37064VP100

通信接口3个:

仿真器JTAG接口(J1)、连接到PC机USB接口(J4)和UART接口(J2)

信号采集和输出端口:

立体音输入接口line-in(J5,直接连接电脑的语音输出端口)

麦克风输入接口(J7)

耳机音频输出接口(J6)

扩展板接口(J9,J10)

图1BJTU-DSP5502板结构组成框图

(2)信号采集和输出端口

立体音输入接口line-in(J5,直接连接电脑的语音输出端口)/麦克风输入接口(J7)/耳机音频输出接口(J6)。

通过AIC23B(A/D、D/A转换器)来提供立体音输入/麦克风输入/耳机音频输出。

AIC23B与DSP的McBSP1相连接。

(3)LED灯

D2:

+5V电源指示灯。

D4:

+3.3V电源指示灯。

D1:

用户指示灯,由DSP的XF引脚控制。

XF输出“1”时(BSETXF),点亮D1;XF输出“0”时(BCLRXF),熄灭D1。

D5:

用户指示灯,由DSP的GPIO7引脚控制。

GPIO7输出“1”时,点亮D5;GPIO7输出“0”时,熄灭D5。

(4)片上外设

64bitTimer:

4个,TIMER0/TIMER1/WatchDogTIMER/TIMER3(DSP/BIOStimer)

McBSP:

3通道,McBSP0/McBSP1/McBSP2

DMA:

6通道,DMA0/DMA1/DMA2/DMA3/DMA4/DMA5/DMA6

IIC:

1通道

UART:

1通道

8/16bitHPI:

1通道

(5)片上存储器

DARAM:

32K×16bit

BootROM:

16K×16bit

片内ROM受VC5502的ST3寄存器中的MPNMC状态位控制。

当MPNMC=1时,32K片内ROM被屏蔽。

MPNMC的状态由上电复位时采样引脚BOOTM[2:

0]的状态决定。

当BOOTM[2:

0]为000B或100B时,MPNMC=1;否则MPNMC=0。

DSP在联机仿真状态下,MPNMC=1。

图2BJTU-DSP5502板功能框图

(6)McBSP的结构及工作原理

VC5502有3个缓冲多通道串行口:

McBSP0(本板与外扩接口相连)、McBSP1(本板和Codec相连)和(McBSP2本板和UART复用)。

McBSP:

多通道缓冲串行口(Multi-channelBufferedSerialPort),是串行口的一种。

McBSP特点:

全双工同步串行口/可直接与系统中的其它C55x器件、编码解码器、串行A/D、D/A转换器以及其它的串行器件直接接口/支持传输的数据字长:

8bit、12bit、16bit、20bit、24bit或32bit/内置μ-律和A-律压扩硬件。

图3McBSP的结构功能框图

2.程序流程图

图3程序流程图

3.主程序

(1)使用A律压缩方法,按题目要求设置采样率为32KHz。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include"5502_FLASH.h"

#include"E2PROM_Function.h"

#include"CODEC.h"

#undefCODEC_ADDR

#defineCODEC_ADDR0x1A//宏定义

Uint16SourData[65536]={0};//采集存放数组

//Uint16CompData2[65536]={0};

//Uint16CompData3[65536]={0};

Uint16CompData[65536]={0};//压缩后的数组

Uint16OutData[65536]={0};//解压回放数组

//Uint16OutData2[65536]={0};

//Uint16OutData3[65536]={0};

#pragmaDATA_SECTION(SourData,".Audio_in_data0");//用户自定义数据段数据连接到与.bbs不同的存储空间“Audio_out_data6”段

#pragmaDATA_SECTION(CompData,".Audio_in_data1");

//#pragmaDATA_SECTION(CompData2,".Audio_in_data2");

//#pragmaDATA_SECTION(CompData3,".Audio_in_data3");

#pragmaDATA_SECTION(OutData,".Audio_out_data1");

//#pragmaDATA_SECTION(OutData2,".Audio_out_data2");

//#pragmaDATA_SECTION(OutData3,".Audio_out_data3");

#defineAUDIOTRY0xAA0A//音频试听

#defineAUDIOCOPY0xAA07//音频压缩存储回放

#defineTESTCOMMAND2//操作命令选择

MCBSP_HandlehMcbsp;//定义McBSP的句柄

unsignedcharCompand(intdata);//A律压缩子程序

unsignedcharUCompand(intdata);//u律压缩子程序

intDisCompand(unsignedcharinput);//A律解压子程序

intUDisCompand(unsignedcharinput);//u律解压子程序

voidblink();//闪灯(D1)子程序

voiddelay(intperiod);//延时子程序

voidmain(void)

{

Uint16DataTempLeft=0;

Uint16DataTempRight=0;

Uint16i,a,b;

Uint16TempData;

Uint16TestCommand=0;

//初始化CSl库

CSL_init();

#ifTESTCOMMAND==1

TestCommand=AUDIOTRY;//试听

#endif

#ifTESTCOMMAND==2

TestCommand=AUDIOCOPY;//录音并回放

#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)

{

//scanf("%d",&a);

//if(a)

//{

switch(TestCommand)

{

caseAUDIOTRY:

//音频试听

/*说明:

McBSP1接收寄存器分别对linein的左右声道进行采样*/

/*Linein(J5)左通路数据*/

while(!

MCBSP_rrdy(hMcbsp)){};

DataTempLeft=MCBSP_read16(hMcbsp);

/*Linein(J5)右通路数据*/

while(!

MCBSP_rrdy(hMcbsp)){};

DataTempRight=MCBSP_read16(hMcbsp);

/*说明:

McBSP1发送寄存器分别对linein的左右声道接收到的数据进行发送*/

/*Microin(J7)左声道耳机输出*/

while(!

MCBSP_xrdy(hMcbsp)){};

MCBSP_write16(hMcbsp,DataTempLeft/16);

/*Microin(J7)右声道耳机输出*/

while(!

MCBSP_xrdy(hMcbsp)){};

MCBSP_write16(hMcbsp,DataTempRight);

break;

caseAUDIOCOPY:

//录音并回放

blink();//D1闪一次

scanf("%d",&b);//手动选择压缩标准:

1-A率,2-u率

if(b==1)//A率

{

for(i=0;i<65535;i++)

{

while(!

MCBSP_rrdy(hMcbsp)){};

//SourData[i]=MCBSP_read16(hMcbsp);

SourData[i]=TempData;

TempData=MCBSP_read16(hMcbsp);

CompData[i]=Compand(TempData);

}

/*

for(i=0;i<65535;i++)

{

while(!

MCBSP_rrdy(hMcbsp)){};

TempData=MCBSP_read16(hMcbsp);

CompData2[i]=Compand(TempData);

}

for(i=0;i<65535;i++)

{

while(!

MCBSP_rrdy(hMcbsp)){};

TempData=MCBSP_read16(hMcbsp);

CompData3[i]=Compand(TempData);

}

*/

blink();//D1闪两次,表示开始解压数据并回放

blink();

for(i=0;i<65535;i++)

{

OutData[i]=DisCompand(CompData[i]);

}

for(i=0;i<65535;i++)

{

while(!

MCBSP_xrdy(hMcbsp)){};

MCBSP_write16(hMcbsp,OutData[i]);

}

/*

for(i=0;i<65535;i++)

{

OutData2[i]=DisCompand(CompData2[i]);

}

for(i=0;i<65535;i++)

{

while(!

MCBSP_xrdy(hMcbsp)){};

MCBSP_write16(hMcbsp,OutData2[i]);

}

for(i=0;i<65535;i++)

{

OutData3[i]=DisCompand(CompData3[i]);

}

for(i=0;i<65535;i+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1