您的当前位置:首页正文

DSP课程设计语音压缩存储回放

2024-07-16 来源:意榕旅游网

DSP课程设计

实验报



:0010812012

化0801 王丹0821014

高海林


20111


概述
数字信号理(DP设计是信息与通信、自化和子科学技术专业 科生合能力培养的程,是培养学生DSP硬件工程设计 能力的重要践教学环节,于全面、系、深入地理解与掌握信号理知 设计方法具有重要的教学意。作通信专业毕业生,理牢固掌握数 字信号理的相关知,了解集成开发环境的使用和调试方法,内化信号 理的基本理

本次实验采用DP C5402 实验实现语音信号的压缩与解的。

音信号是信息的重要形式,音信号理有着广泛的,

及有较成熟的发展并且已经广泛应用。
缩在语音信号的传输、存储等方面有非常广泛的作用,而且在通信领域中以

信号的接收和输出采用DMA 方式,DMA C5400 DSP系统中非常重要的

片上外,其控制器可以在不影响CPU的情况下完成数据的传输,因此数据传输速度快,其数据的源和目的可以是片内存器片上外和片外设备C542的DMA6个独立的可程通道,6个不同的DMA操作。另外DMA控制器HPI的服务请求。SEED-VC542DSK实验板上集成了SRAM,FLASH,音频输出接口等部件。些外设为提供了极大的方便.

语音信号模数、数模转换采用AD50,这是一款SGMA-DELTA 型单片音频 接口芯片(AIC)。它内部集成了16 位的D/A A/D转换器,采样速率最高可


2205b/s,其采速率可通DSP程来置。在DC之前有一个插值滤波器以保证输出信号平滑和ADC之后有一个抽取波器以提高入信号的信噪比。

一、设计务书

1设计要求及目
1)使用DS实现语压缩和解压缩的基本算法,算法型自定,例如可以采用G.71G729压缩算法。

(2)采用A/D转换器从MIC入口实时采集音信号,压缩后存DSP的片内和片外RAM存器中,存储时间不小于10秒。

(3)存储器存满之后,使用DSP进行实时解压缩,并从SPEKER输出口进行回放输出.
2、设计思路

音信号的幅度()并非均匀分布,由于小信号占的比例比大信号大很多,因此可以行非均匀量化。达到一目的基本做法是,大信号使用大的量化隔,而小信号使用小的台ITU—G711PCMA律和µ压缩标准可以分将13比特和14比特压缩为8比特,达到压缩的目的。

3设计

(1)C言程序,并在CCS集成开发环境下调试

2)实现设计所要求的各功能。

(3)按要求撰写设计报告.

二、实验原理
1编码
1)概念:编码一般分:一是波形编码,一是被称器技编码.PCM编码即脉冲编码调制。波形编码的最简单形式就是脉冲编码调制(Pulsecodemodulation),种方式将变换成与其幅度成正比的二制序列,而二制数往往采用脉冲表示,并用脉冲幅度编码,所以叫做脉冲编码调.脉冲编码调制没有考虑语音的性,所以信号没有得到压缩

2)量化:脉冲编码调制用同等的量化行量化,即采用均匀量化,而均匀量化是基本的量化方式。但是均匀量化有缺点,在信号动态围较大而方差小的

,其信噪比会下降 。
μ律是长途电话质量的标准. 而我国采用的是A 律压缩,而且有标准的A PC
国际上有两种非均匀量化的方法:A律和μ律,μ律是最常用的一种。在美国, 7
M编码芯片。
2。压缩、解压原理

由于音信号是模信号,要对语音信号压缩、存就必须对语音信号行模/数转换,把转换后的音数字信号DSP系,由DSP统对语音数字信号.理后的数字信号行数/转换转变成原来的模拟语音信号,然后通耳机或其他音频输设备行回放。音的采集和回放的基本3所示。

模拟

A/D

数字逻

D/A

模拟信

辑电路

信号源

换电路

换电路

号输出

DSP

3 语音的采集和回放的基本结构图
数据压缩技术是信息系统的重要技术。为了实现对模拟信号的高效处理,


往在模/转换程中就压缩主要程序。目前通信系中最常用的就是A律和u律两种压缩编码

u/A压缩压编码CCITT际电报电话协会最早推出的G.711压缩压编码的一种格式的主要内容。其中欧洲和中国等国家采用A律压缩压编码,美国和日本等国家采用u压缩压编码A律算法:本实验所用的A律压缩压编码,通DSP传输来的压缩后的数据行行解16,然后后的数据行分析、理。然后将理后的数据按照要求压缩成8位的数据格式出到相应设备,供其它设备读.

A律算法公式:

是DSP将数据解DSP将压缩8位数据解成16位的DSP通用数据格式。其中高13后的数据,低3.是因G711的A律压缩

能对13位的数据操作。DSP将解压后的数据放在缓冲串口的发送寄存器中。只要
运行发送指令缓冲串口就会将数据发送出去.

4数据压缩流程
DSP的内部冲串口有硬件实现u律和A律压缩,只需在相寄存器中置就可以了。TMS320C5402硬件支持μ律和A压缩算法无需重新,直接找表即可,行A律压缩时于采到的12(13)位数据,默其最高位符号位,压缩时要保最高位即符号位不,原数据后1112)位要压缩成7位。73位段落4位段内码组成。

压缩后数据的最高位(第7位)表示符号,量价分别为11248、1632、64,由压缩后数据的第6位到第4位决定,第三位到第0位是段内压缩后的数据有一定的失真,数据压缩前后的照表如表1所示。

2(制)

量价

符号位

段落(二制)

段内()

0




111

1~31

1

001

000~1111

263

2

0

010

0000111
载高清

64~27

4

0

011

00001111

128~255

8

0

00

水印000~111



256511

16

0

10

00001111

51~1




001111

10242




00~111

1A律数据压缩
μ律算法:采用μ律算法采集的音数据编码是一种针对语音信号压缩非均匀量化的方案。采用μ信号数形式的压缩,以便在不提高数据量的前提下提高信噪比,尽管量化的位数保持不,但动态增加了。μ压缩音信号一般用8比特抽数据表示,携小信号信息量比大信号信息量多。从统计,有用信号更可能在小信号区而非大信号区。因此,在小信号区需要更多的量化点数.

μ律算法公式:


其中Xmax是信号x(n)的最大幅度,u是控制压缩程序的参数,u越大压缩就越厉害
数位用于表示后4个有效位,还有一位符号位没有给出.16比特输入数据是由线性
数据变换成8比特μ律数据(模拟传输),然后再从μ律转成16比特的线性数据(模拟
接收),再输出到编解码器。





0 0 0 0 0 1a c d 1 ╳╳╳╳

5

010a b c

0 0 0 0 a b c d 1╳ ╳╳╳ ╳

6

1 1 abc d

0 0 1 a b c d1 ╳╳╳╳ ╳╳

1 0 ab c

0 1 b d 1 ╳╳ ╳╳╳╳╳

8

1 0 1 a c d

01 a b c 1 ╳╳╳╳╳╳╳╳

9

1 0a b c d

1 b d 1╳╳╳ ╳╳╳╳╳╳

1

11 1 a b c d

2 线性到U转换表(压缩)
上表为压缩表:其中压缩后的数据8位,符号位未写出。其解表与之相反:由8位U律变换线性16位。


上图给出了按m律压扩算法的输入输出特性曲线,m为确定压缩量的参数,它反映
最大量化间隔和最小量化间隔之比。由图可见,m值越大,压缩量越大。由于m
律压扩的输入和输出关系是对数函数关系,所以这种编码又称为对数PCM

A律压扩与m律压扩相比,则压缩动态略小些,小信号振幅时质量要比m律稍差.Am律算法,的特性在入信号振幅小都呈线性,在入信号振幅大压缩特性.

对于采样频率为8kHz,样本精度为16位的输入信号,使用A律压扩或m律压扩编码,经过PCM编码器之后每个样本的精度为8位,输出的数据率为64b/s。这

个数据就是CCITT,(际电话电报顾问会)推荐的G.711准:率脉冲编码调制。

3。存和回放
适当大的冲区,将压缩后的8位或4位数据经过的整合,16位的RAM中,种操作目的主要是充分利用存器中的源,以保够录入足多的音数据。利用冲区的目的是行音效的实时处.中各模是同时进理的,一部分信号正在ADC中转换,而另一部分信号DSP理器中同时进行算法理,即整个系是以流水线的方式行工作的。

压缩,将8位或4位数据原成相音数据,在经过D50C将数字

信号还原成语音信号(即模拟信号)通过多通道缓冲串口输出,达到放音的目的.
三、软件设计
程序流程图:





开始

实验板初始化

CODECMcBSP
初始化与工作方式设置

输入语音信号

语音压缩、存储

定时器延时

解压、回放

是否结束?

1DK板的初始化:
首先将DSP的串口1复位,再串口116个寄存器,使串口1工作在以下状:禁止SPI模式,但数据相,每一字,每字16位,同步脉冲低平有效,并且同步信号和移位信号有外部时钟产.SPD50程用查询方式,A/D转换数据的接收和DA转换的数据送采用查询方式.

用了函数coec_open()串口1行了初步置,置成功返回coec的句柄放在hanset中,为调用其他函数的.

2.AD50(CODEC)的初始化:


handse = odc_open(HNDSET_COEC);

ode_da_mode(hHanset,CODEC_DAC_15BIT);式*/

/* AC15it模

codec_adc_mode(hHandsetCOE_DC_15BIT);/*ADC15bit模式*/



codec_an_gainhHndse, CODEC_AIN_6dB);

/* 6dB 增益

/

coec_aout_gainhHandsetCODC_AOUT_MNUS_6dB)/-6dB

增益*/

code_sample_ratehHanset,SR_16000);

/ 16KHz采率*/

初始化用了5个函数AD50的5参数行了置,包括ADCDAC的工

作模式,拟输入和出的增益;以及AD/DA转换速率。

1) TMS30VC42实现语音的A率压缩有两种方法:

(1)使用多通道冲串口(cBSP)的展器

在多冲通道串口(McBSP)内部装置了硬件路,支持A律格式展器,数据压缩

,A律展器允14比特的动态

(2)用软件实现
MBSP 的发送通道,构成AD50 CODC 模拟输入和输出通道的自环,是否能接收到AD
换的数据是通过查询串口1 的接收标志RDY 来进行的。
主程序的功能是从McBSP的接收通道读取A/D转换的值,然后经过压缩解压后将其发送到
主程序:

incude<typeh

/* 文件*/

#include〈boardh
#incude<cdch
includemcbs54.h

/*宏定*/

defneIGN_BIT0x0)/Sgnbit fraAlawbyte.*/defneQUANT_MASK0x) /Qanizationfeldmak.*/#defn NSEGS () ﻩﻩ */NumbeofA-law segents.*/ #efineSE_SHIFT4)*/ ﻩﻩLeftsiftforemntnumber。*/

defineSEG_MASK0x70

*Segmet field ask. */
/

/*

函数声明


oidelay(s1priod);
vileds1cnt)
voidinicdec(voi)
oidfashenable(void);
usignedchrdaa2alaw(s16pcm_val;
intalaw2ataunsignedhara_val);

staic nt searhinval,hort

*taleint size);

/

/

全局

HANDLEhHandet
s16dta
s1data1;
u16=0
u1temp1;
u16j=0;
u16k,l=0;
u8tmp2
u1buffer[000];

sttc short seg_ed[8]={0x1F,0x3F,0x7F0xFF,x1FF,0x3FF,0xFF,0xFF};/* 主函数 /
return
vid main()

ed2)

//灯两次

iitcoec()//初始化code

fasenable); //选择片外FLASH片外存

/*
dla(10);
br_ed_toggleBRD_LED0;
for(i=0x000i<0eff;i++)
{
REG_WRITEi,*(voatileu16)DRR_ADRHANDSET_CDEC)) deay(20)

bd_e_toggle(BRD_LED1) delay(200;
fo(i=0900;i<0eff;i++)





*(voatilu16*)DX1_ADDR(HADSET_COEC=REG_READi); delay(20);

r_led_tggleBRD_LED2);
*/

whie(1)

whie(!MBSP_RDY(HNDSET_CODEC)){};//等待接

handet的采

br_ld_toggleBR_LD0);
daa=*(vltile16*)DRR1_ADR(ANDSET_CODEC; //h

nset处读取采

temp=ata2alw(ata)//对采样进行a 律压缩
/* 把低地址数据放在高八位 高地址数据放在低八位*/
ﻩﻩﻩ
buffer[j=(temp1〈〈=8)

*/ﻩﻩ奇数数据左移8位temp1=abcdegh0000000ﻩﻩ buffer[j]=tep1/

es

ﻩ ﻩbfer[j=(buffer[j]|temp1);

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

uffer[j]=abcdefghiabcdeghi/
+;//j1


if(>=40000)

ﻩﻩi=0


ﻩ ﻩ



ﻩ ﻩ
ifj=20000)
ﻩ ﻩ
ﻩﻩ ﻩ=0;
ﻩﻩﻩ ﻩbrd_ed_disabe(BD_LED0)
bd_led_toggl(BRD_LED1)
//点亮二极管1表示放音开始

/*放音部分
/

ﻩﻩfork0;<4000k++
{ﻩﻩ ﻩ
ﻩ ﻩ ﻩﻩfk%2==0

ﻩﻩﻩﻩtemp2=buffer[l]>〉8)0xff
ﻩﻩ }
lse

ﻩﻩﻩ ﻩ
ﻩ ﻩ
ﻩﻩﻩtemp2=buffe[l]&00ff

ﻩﻩﻩ+; }

ﻩ ﻩ

while (!MCBP_XDY(HANDSET_CODE));}{

*olaile u16*)DXR1_ADDR(HANST_CDEC = dta1;

//将数据写入D/A转换

}ﻩ ﻩ

/*

放音

*/

ﻩ ﻩ
ﻩ ﻩbrd_led_tggleBRD_LED0);
brd_led_toggle(RD_LD1;

}





子函数

/

//主程序

/*

/*******延******

voddelay(s16peiod
{
inti, ;

for(i=0;i〈periodi++)
{
for(j=0j〈period>>1j++);
}

/************/


{

hie cn-)

brd_le_toggeBRD_LED0); //LED指示灯0示状

ﻩﻩdela(000);
br_led_togleBRD_LED1)
ﻩﻩdelay(000;
brd_led_oggle(BR_LE2)
deay(00;)
}

/***初始化codec*/
oidinitcode(void)

/ Open Hnset odecodec 的句柄*/


Hndet=codc_open(HNDSE_COEC); // Acquire handl


tcoec
/* Secodcparameters*
codec_dac_moe(hHandset,CDEC_DAC_5IT; // DACin 15btode
codc_dc_mode(hHadse,CODE_ADC_15BT)//DCin15bitod
code_in_gain(hHanstCDC_AN_6dB); //6dBginoanaloginutto ADC
codec_aout_gai(handetCODEC_AOU_INUS_6dB)
//-6dBganonnlogoutputfromDC
cdec_sample_atehandstSR_800)//8KHzsamplingrae

/*****fash**/

oiflashenable(oid
{

CPLD_CTRL2_REG|=0x000;
CPLD_MTRL_REG=x040}


ntmask;
nt eg
unignedcharval;

f(c_val>=0)

mak= 0xD5; /标记7th)it=1

}
es
{

mask0x55; //标记bi=0

pcm_val-pc_vl;

} /Covert the scaled mgiue to segment umbr

sg = earch(pm_val,seg_end, )



//ombinthesg,segmn,andquantiationits

if (seg>=8) /uofrange,返回最大数.

return0xF^ mak);
else

aval=seg <〈SEG_SIT
ﻩﻩi(e<2)
val|= (pcm_val>>1)& QUANT_MASK;
els
ﻩﻩaval=(pcm_al>>se)&QUANT_MASK

rturn(aa^mask)
}

**alaw的子程序**/

staticint earch(nt val,hort

*tableint sie)

{
inti
for (i = 0i 〈size;i++
}

rturn(size)
}

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

ntalaw2data(nsigndchaa_val
{
itt;
iteg;

a_val^= x55
t= (a_va&QUANT_MASK)<<4
seg=((usged)a_val&SEG_MASK>>SEG_SIFT;f(seg==0


t += 8;
ﻩﻩt=(t〉>3)




}
i((seg4)&(eg〉0))
{
t+=0x108
t=t>>(4-seg));

if(seg3
{
ﻩﻩ+=0108
ﻩﻩt(t〈〈=(seg—4);

return(a_valSIGN_BIT)?t :-t);

/*

*/





显示全文