2023年语音压缩存储与回放实验报告_第1页
2023年语音压缩存储与回放实验报告_第2页
2023年语音压缩存储与回放实验报告_第3页
2023年语音压缩存储与回放实验报告_第4页
2023年语音压缩存储与回放实验报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DSP课程设计

实验报告

语音压缩、存储和回放

院系:电子信息工程学院

小组成员:

通信0607王颖06282023

自动化0601王燕06212023

目录

一、设计任务书封面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输出口进行回放输出。

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

发挥部分:

使用多种算法进行语音的压缩、存储和解压缩,比较它们之间的优缺陷。

二、实验目的

1、通过本实验掌握5402DSP片上外设多通道缓冲串行口mcbspo

2、学习掌握tic320ad50CODEC编译码器的内部结构、工作原理。

3、学习A律语音压缩以及C语言下的编程方法。

三、实验原理

1.语音采集与输出模块

语音采集与输出模块采用的是TI公司推出的一款高性能的立体声音频Codec芯片TLC

320AD50C,内置耳机输出放大器,支持MIC和UNEIN两种输入方式(二选一),且对输入

和输出都具有可编程增益调节。AD50的模数转换(ADCs)和数模转换(DACs)部件高度集成

在芯片内部,采用了先进的Sigma-delta过采样技术,可以在8K到96K的频率范围内提供

16bit、2Obit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达成90dB和

lOOdB。与此同时,AD50还具有很低的能耗,回放模式下功率仅为23mW,省电模式下

更是小于15uWe由于具有上述优点,使得AD50是一款非常抱负的音频模拟I/O器件,

可以很好的应用在随声听(如CD,MP3……)、录音机等数字音频领域⑵。由TLC320AD5

0C组成的语音输入与输出模块不仅采样率高最高可达96K,且外围电路简朴,性价比高。

2.语音编码

(1)概念:

语音编码一般分为两类:一类是波形编码,一类是被称为“声码器技术”的编码。

PCM编码即脉冲编码调制。

波形编码的最简朴形式就是脉冲编码调制(PulsecodemoduIation),这种方式

将语音变换成与其幅度成正比的二进制序列,而二进制数值往往采用脉冲表达,并用脉冲对

采样幅度进行编码,所以叫做脉冲编码调制。

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

(2)量化:

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

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

国际上有两种非均匀量化的方法:A律和u律,u律是最常用的一种。在美国,7位u律是

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

⑶DPCM&ADPCM:

减少传输比特率的方法之一是减少编码的信息量,这要消除语音信号中的冗余度。相邻

的语音样本之间存在明显的相关性,因此对相邻样本间的差信号进行编码,便可使信息量得

到压缩。由于差分信号比原语音信号的动态范围和平均能量都小。这种编码叫Differentia

1PCM,简称DPCM,即差分脉冲编码调制。

ADPCM即自适应差分脉冲编码调制,是涉及短时预测的编码系统。CCITT(国际电报

电话征询委员会)在1984年提出的32kbit/s的编码器建议就是采用ADPCM作为长途传输

中的国际通用语音编码方案。这种ADPCM编码方案达成64kbit/sPCM的语音传输质

量,并具有很好的抗误码性能。

(4)a律压缩

a律压缩示意图

A律压缩编码表

A律压缩编码表

线性输入编码压缩编码

0000000wxyza000wxyz

OOOOO0Iwxyza00Iwxyz

000001wxyzab0lOwxyz

000Olwxyzabc01Iwxyz

0001wxyzabed1OOwxyz

001wxyzabede101wxyz

01wxyzabcdef11Owxyz

1wxyzabcdefg111wxyz

采用DSP可以直接对PCM编码后的语音信号进行口律和A律压缩。图1是DSP硬

件实现数据压缩解压的简朴流程,DSP将传输来的压缩后的数据进行解压成16位或者3

2位,然后对解压后的数据进行分析、解决,最后将解决后的数据按照规定压缩成8位的数

据格式输出到相应设备,供其他设备读取。

图1数据压缩解压流程

图2是DSP将数据解压的值,DSP将压缩的8位数据解压成16位的DSP通用数据格

式,其中高13位为解压后的数据,低3位补0。这是由于6.711的A律压缩只能对13

位数据操作。DSP将解压后的数据放在缓冲串口的发送寄存器中,只要运营发送指令,缓冲

串口就会将数据发送出去。缓冲串口对接受数据的解压过程和压缩过程完全相反。图3是|J

律数据解压的示意图。

15320

发送缓冲器'S—I0_

A律一

图2A律数据解压

15210

发送缓冲器:值I0二

u律

图3口律数据解压

DSP内部的缓冲串口(McBSPs)带有硬件实现的p律/A律压缩解压,用户只需要在相

应寄存器中进行设立就可以了。

在进行A律压缩时,采样后的12位数据,默认其最高位为符号位,压缩时要保持最高位

即符号位不变,原数据的后11位要压缩成7位。这7位码由3位段落码和4位段内码组

成。具体的压缩变换后的数据根据后11位数据大小决定.

表2A律数据压缩表

12位码(十进制)■阶符号位段落码(二进制)段内码(二进制)

01111

16-31100010000-1111

32〜63200100000〜1111

64~127400110000~1111

3〜255801000000-1111

256-5111601010000-1111

51270233201100000~1111

1024~20476401110000-1111

除对串行口数据实现压扩解决外,这套硬件在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/*Interna1

ProgramRAM*/

PRAM:origin=7600h,1ength=80OOh/*Internal

ProgramRAM*/

PAGE1:SCRATCH:origin=0060h,length=0020h/*ScratchPad

DataRAM*/

DMARAM:origin=OCOOh,length=0300h/*DMA

buffer*/

DATA:origin=1100h,1ength=0080h/*In

ternalDataRAM*/

STACK:origin=118Oh,1ength=0560h/*Stack

MemorySpace*/

INRAM:origin=19OOh,length=0100h/*Internal

DataRAM*/

HPRAM0:origin=1A00h,length=0002h/*HPImem

oryaccessiblebyIiostandDSP*/

HPRAMI:origin=1A02h,1ength=028Oh/*HPI

memoryaccessiblebyHostandDSP*/

HPRAM2:origin=1C82h,length=0280h/*HPImemory

accessib1ebyHostandDSP*/

EXRAM:origin=lFlOh,1ength=9000h/*External

DataRAM*/

)

SECTIONS

.cinit>PRAMPAGE0

.text>PRAMPAGE0

.vectors>VECSPAGE0

initvar>PRAMPAGE0

detect>PRAMPAGE0

vrcprg>PRAMPAGE0

matprg>PRAMPAGE0

,stack>STACKPAGE1

.trap>SCRATCHPAGE1

.cons>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/*variouscodebooktabies

*/

logtab>EXRAMPAGE1/*tablefcrlog2*/

powtab>EXRAMPAGE1/*tableforp]ow2*/

hamtab>EXRAMPAGE1/*tableforhamming*/

1gwtab>EXRAMPAGE1/*tableforlagwindow*/

acostab>EXRAMPAGE1/*tab1efora;rccos*/

sqrtab>EXRAMPAGE1/*tableforsquareroot

*/

acbtab>EXRAMPAGE1/*tabieforthresho1dsina

cb*/

pm03tab>EXRAMPAGE1tableforx"(-0.3)

computation*/

costab>EXRAMPAGE1/*tableforcosine*/

V23>INRAMPAGE1

FSK>INRAMPAGE1

hpibuffO>HPRAMOPAGE1

hpibuff1>HPRAMlPAGE1

hpibuff2>HPRAM2PAGE1

dmabuff>DMARAMPAGE1

}

/*主程序设计*/

/*语音采集及回放程序*/

/*用A律进行压缩及解压*/

/*采用AD50进行A/D,D/A转换*/

/火灯循环闪烁程序开始*/

/*L0:录音*/

/*L1:放音*/

#include<type.h>/*头文献*/

#include<board.h>

#inc1ude<codec.h>

#include<mcbsp54.h>

/*宏定义*/

#defineoSIGN_BIT(0x80)/*SignbitforaA-lawbyte.*/

#defineoQUANT_MASKO(oxf)«>/*Quantizationfieldmask.*/

#defineNSEGS*8)。/*NumberofA-lawsegments.*/

#define<>SEG_SHIFT(4)oo/*Leftshiftforsegmentnumber.

*/

#defineSEG_MASK(Ox70)“*Segmentfieldmask.*/

/*函数声明

*/

voiddelay(sl6period);

voidled(sl6ent);

voidinitcodec(void);

voidflashenable(void);

unsignedchardata2a1aw(si6pcm_val);

intalaw2data(unsignedcharoa_va1);

staticintsearch(intval,short*»^table,intsize);

/*全局变量*/

HANDLEhHandset;

s16data;

sl6datal;

ul6i=0;

ul6temp1;

ul6j=0;

u16k,1=0;

u8temp2;

ul6buffer[20230];

staticshortseg_end[8]={OxlF,0x3F,0x7F,OxFF,0xlFF,0x3FF,0

x7FF,OxFFF);

/*主函数*/

voidmain()

if(brd_init(100))

return;

led(2);//闪灯两次

initcodec();//初始化codec

f1ashenable();〃选择片外FLASH为片外存储器

/*

delay(100);

brdledtogg1e(BRD_LEDO):

for(i=0x9000;i<0xefff;i++)

(

REG_WRITE(i,*(volatileul6*)DRR1_ADDR(HANDSET_C0DEC));

delay(20);

)

brd_ledtoggle(BRDLED1);

delay(200);

for(i=0x9000;i<0xefff;i++)

(

*(volatileu16*)DXR1_ADDR(HANDSET_CODEC)-REG_READ(i);

delay(20);

}

brd_1ed_toggle(BRD_LED2);

*/

while(1)

(

while(!MCBSP_RRDY(HANDSET_CODEC)){};//等待接受h

andset处的采样

brd1edtoggle(BRD_LEDO);

data=*(volatileul6*)DRR1_ADDR(HANDSET_CODEC);//从hands

et处读取采样

templ=data2alaw(data);〃对采样进行a律

压缩

/*把低地址数据放在高八位高地址数据放在低八位*/

i=i+1;

oif(i%2==l)

00{

buffer[j]=(templ<<=8);

o/*奇数数据左移8位templ=abcdefghOOOOOOO0

g«>buffer[p1*/

oao)

else

3(

oobuffer[j]=(buffer[j]Itempi);

g/*偶数数据与temp1取或组成新的数据

buffer[j]=ab

cdefghiabcdefghi*/

gj++;〃j加1

0)

if(i>=40000)

8(

g}

oif(j>=20230)

6(

。j=0;

。wbrd_led_disab1e(BRD_LEDO);

。«>brd1ed_toggle(BRDLED1);

//点亮二极管1表达放

音开始

/*放音部分

*/

for(k=0;k<40000;k++)

06(

。08if(k%2==0)

0b0(

。。temp2=(buffer[1]>>8)&OxOff;

08d}

。qelse

000{

。^temp2=buffer[l]&OxOff;

。。1++;

oo}

ooif(l>=20230)

。。1=0;

00data1=a1aw2data(temp2);//a律解压

while(!MCBSP_XRDY(HANDSET_CODEC)){};

3"(volatileu16*)DXRIADDR(HANDSETCODEC)=datai;〃将

数据写入D/A转换器

»)

/*放音结束

o。brdled_toggle(BRDLEDO);

brd_led_toggle(BRD_LED1);

00

000

)

)

)〃主程序结束

/*子函数*/

/*******延时******/

voiddelay(s16period)

inti,j;

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

for(j=0;j<period>>l;j++);

)

)

/*****大*闪灯****火*/

voidled(si6ent)

(

while(cnt—)

brd_led_toggle(BRD_LED0);//切换LED指示灯0的显示状

odelay(1000);

brd_1ed_toggle(BRD_LED1);

火lelay(1000);

obrd_led_toggle(BRD_LED2);

delay(1000);

)

)

/*****初始化codec**/

voidinitcodec(void)

/*OpenHandsetCodec获取设立codec的句柄*/

hHandsetcodec_open(HANDSET_CODEC);/Acquirehandiet

ocodec

/*Setcodecparameters*/

codecdac_mode(hHandset,CODEC_DAC_15BIT);//DACin15-bi

tmode

codec_adc_mode(hHandset,C0DEC_ADC_15BIT);//ADCin15—

bitmode

codec_ain_gain(hHandset,CODEC_AIN6dB);//6dBgainona

na1oginputtoADC

codec_aout_gain(hHandset,C0DEC_A0UT_MINUS_6dB);

//-6dBgainonan

alogoutputfromDAC

codec_sample_rate(hllandset,SR_8000);//8KHzsa

mp1ingrate

)

/*****设立flash****/

voidflashenab1e(void)

I

CPLD_CTRL2_REGI=0x0010;

CPLD_DMCTRL_REG|=Ox0040;

}

/*****a律压缩******/

unsignedchardata2alaw(s16pcmva1)。

tomask;

int。seg;

unsignedchareava1;

oif(pcm_va1>=0)

°(

。mask=0xD5;。//标记(7th)bit=1

。}

oelse

°(

emask=0x55;抽//标记bit=0

pcm_va1=-pcm_va1;

d

。//Convertthesealedmagnitudetosegmentnumber.

oseg=search(pcm_va1,seg_end,8);

//Combinethesign,segment,andquantizationbits.

if(seg>=8)o//outofran

ge,返回最大数.

«>return(0x7F八mask);

«>else

aval=seg<<SEG_SHIFT;

if(seg<2)

oooavalI=(pcm_val»1)&QUANT_MASK;

oeIse

<»ava1(pcm_val>>seg)&QUANT_MASK;

oreturn(ava1mask);

。}

)

/****alaw的子程序**/

staticintsearch(intval,short沐tabie,intsize)

I

int;

ofor(i=0;i<size;i++)

°(

®if(va1<=*table++)

oreturn(i);

d

。return(size);

)

/*****a律解压******/

intalaw2data(unsignedchar阳_va1)

I

intt;

ointoseg;

a_val=0x55;

t=(a_val&QUANTJIASK)<<4;

®seg=((unsigned)a_val&SEG_MASK)>>SEG_SHIFT;

oif(seg==0)

。©t+=8;

«>t=(t>>3);

}

。if((seg<4)&&(seg>0))

°{

t+=0x108;

t=(t»(4-seg));

)

if(seg>3)

t+=0x108;

ot=(t<<=(seg-4));

return((a_val&SIGN_BIT)?t:—t);

)

/*结束*/

四.操作过程

1.将工程文献夹放入C盘规定目录下。

2.打开CCS,Project-open,打开工程文献。

3.进行编译,连接。

4.根据错误提醒,对buildoption进行对的的设立,修改头文献途径。

5.再编译,连接,显示没有错误。

6.loadprogram—run,此时三盏灯循环亮,之后程序开始,第一盏灯亮

开始录音,一段时间后第二盏灯亮开始放音,然后又开始录音。依次循环.

五.调试过程与运营结果

1.观测数据结果

Viewwatchwindow

我们输入buffer,显示此数组的值,如图D所示。

2.观测数据图形

ViewGraphTimeFrequency

可以加入断点,然后按Animate动态显示。

分别观测语音输入(存放在变量data中)波形,压缩后波形(tempi),解压后输出波形(da

ta1),图形分别为A,B,Co

3.观测存储器中数据

ViewMemory

通过多次调试,使录音时间在保持音质的前提下达成5-6秒。

A.输入波形(data)

用w□E3asE]E30«±

西

CJ

-stockoptiont。changethedefoultsize.-I

dComplete.

Errors,1Warnings,0Ramarks.

•.大回营H

«/C54G2DSKZCFV.lDnct-Ntorosoft

B.压缩后波形(temp1)

Z/C5402DSK/CPU_1-C54X-CodeCoaposexStudio-[GraphicalDisplay!RTj西冈

区E>1«NditYi»Eroj.ctp.bucFcefil.r<;ELOptionToolsDSF/BIOSNind。*K.lp

图。7|>“-31。I・・AW.,1iZIZI♦(♦­♦=%.♦-

inu.i>jtKiD.bo<3,掰蛆/"-*'•

用w|30醺回日回心

-stockoptiontochangethedefaultsize.

dComplete.

Errors,1Warnings,0Remarks.

],「「|\BMd厂1臼

阳英。•.大通冷工|J

»c*o'X/C5402OSK/Crv_l.QBoel-Mtcrosoft々占二•叼。20。4

C.解压缩后输出波形(datal)

I^/CM07DSJt/CPIl_l-Cb4X-Coi!«C»i>ox«rStudio-[Crxphi<:M1n>xi>lxy]

B©回因

E>1«Kd>tY***Er»j«ct£«bucProf,1”柒LOptionX«»l(D£P/BIOSn,nd”H«lp

I心第I匚工

i|D«bu(

国曲㈡国85回日画d

dComplete.

Errors,1Warnings,0Remarks.

I-J"I*hBiMW/

发英,:•大陋I5工|

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论