DSP技术课程设计语音信号扩展U律新.docx

上传人:b****6 文档编号:3639296 上传时间:2022-11-24 格式:DOCX 页数:29 大小:757.38KB
下载 相关 举报
DSP技术课程设计语音信号扩展U律新.docx_第1页
第1页 / 共29页
DSP技术课程设计语音信号扩展U律新.docx_第2页
第2页 / 共29页
DSP技术课程设计语音信号扩展U律新.docx_第3页
第3页 / 共29页
DSP技术课程设计语音信号扩展U律新.docx_第4页
第4页 / 共29页
DSP技术课程设计语音信号扩展U律新.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

DSP技术课程设计语音信号扩展U律新.docx

《DSP技术课程设计语音信号扩展U律新.docx》由会员分享,可在线阅读,更多相关《DSP技术课程设计语音信号扩展U律新.docx(29页珍藏版)》请在冰豆网上搜索。

DSP技术课程设计语音信号扩展U律新.docx

DSP技术课程设计语音信号扩展U律新

摘要

本文简要阐述了语音信号扩展U律的基本原理,可以将高位的数据扩展成低位的数据,它适用于声音信号的播放和传输系统,在设计中借助MATLAB信号处理工具箱FDAtool工具设计了语音信号扩展系数,然后在CCS中以TMS320C55x芯片的汇编语言编程实现了该语音信号扩展。

利用MATLAB设计语音信号扩展,可以随时对比设计要求和语音信号扩展特性调整参数,直观简便,极大的减轻了工作量,有利于语音信号扩展设计的最优化。

另外文中还介绍CCS开发环境。

文中所给程序已经经过软件仿真验证,所设计的语音信号扩展符合设计要求。

关键词:

DSP,语音信号扩展,MATLAB,CodeComposerStudio(CCS),TMS320C55x

目录

1语音信号扩展U律设计任务及目的...............1

1.1语音信号扩展U律设计任务…………………………………………1

1.2语音信号扩展U律设计目的………………………………………...1

1.3语音信号扩展U律设计基本原理………………………………………1

1.3.1语音信号扩展编码技术的发展……………………………………..1

1.3.2DSP硬件实现数据扩展解压的简单流程………………………….1

1.3.3U律语音信号扩展……………………………………………………2

2TMS320C5X结构…………………………………..4

2.1C55X的CPU体系结构…………………………………………………..4

2.2指令缓冲单元(I)…………………………………………………….4

2.3程序流程单元(P)…………………………………………………….4

2.4地址程序单元(A)……………………………………………………..5

2.5数据计算单元(D)……………………………………………………..5

3语音信号扩展U律设计过程.........................................6

4语音信号U律设计软件程序........................................7

5语音信号扩展U律设计的CCS实现..................15

5.1简述CCS环境………………………………………………15

5.1.1CCS主要特点…………………………………………………………15

5.1.2DSP/BIOS和API函数以及RTDX插件………………………………..15

5.2CCS配置………………………………………………………………...16

5.3CCS环境中工程文件的使用…………………………………………..16

5.3.1建立工程文件……………………………………………………….16

5.3.2创建新文件………………………………………………………….17

5.3.3向工程项目中添加文件……………………………………………...17

5.4编译链接和运行目标文件…………………………………………….18

5.4.1对程序进行编译链接并装载.out文件……………………………18

6仿真结果及讨论............................................................19

结论...................................................................................22

参考文献...............................................................................23

1语音信号扩展U律设计任务及目的

1.1语音信号扩展U律设计任务

(1)完成语音信号采集;

(2)对语音信号进行U律扩展;

(3)传输扩展后的信号

1.2语音信号扩展U律设计目的

本设计的目的在于通过使用DSP的程序设计完成对语音信号的扩展,既可以通过软件实现,也可以通过硬件实现。

进行程序的设计,并在CCS软件环境下进行调试,同时也加深学生对数字信号处理器的常用指标和设计过程的理解。

1.3语音信号扩展U律设计基本原理

1.3.1语音信号扩展编码技术的发展

随随着通信、计算机网络等技术的飞速发展,语音扩展编码技术得到了快速发展和广泛应用,尤其是最近20年,语音扩展编码技术在移动通信、卫星通信、多媒体技术以及IP电话通信中得到普遍应用,起着举足轻重的作用。

  语音扩展编码技术的类别

  语音编码就是将模拟语音信号数字化,数字化之后可以作为数字信号传输、存储或处理,可以充分利用数字信号处理的各种技术。

为了减小存储空间或降低传输比特率节省带宽,还需要对数字化之后的语音信号进行扩展编码,这就是语音扩展编码技术。

  语音的扩展编码方法归纳起来可以分为三大类:

波形编码、参数编码和混合编码。

1.3.2DSP硬件实现数据扩展解压的简单流程

DSP将传输来的扩展后的数据进行解压成16位或32位,而后对解压后的数据进行分析,处理,最后将处理后的数据按照要求扩展成8位的数据格式输出到相应设备以供读取:

DR→RSR→RBR→解压→RJUST→DDR→DXR→扩展→XSR→DX

在进行扩展时,采样后的12位数据,默认其最高位为符号位,扩展时要保持最高位即符号位不变;原数据的后11位要扩展成7位。

这7位码由3位段落码和4位段内码组成,具体扩展变换后的根据后11位数据大小决定。

扩展后数据的最高位(第7位)表示符号,量阶分别为1,1,2,4,8,16,32,64,由扩展后数据的第6位到第4位决定,第3位到第0位是段内码,扩展后数据有一定的失真,有些数据不能表示出,只能取最接近该数据的扩展值。

例如数据125,扩展后的值为00111111,意义如下:

从左往右,第一个0为符号位,表示为一个正数;后面的011为段落码,表示量阶为4,起始数据为64,后面的4个1111为段内码,表示值为15

最终结果为:

64+4*15=124.

1.3.3U律语音信号扩展

μ律算法:

采用μ律算法对采集的语音数据进行处理,μ律编码是一种针对语音信号进行对数压缩非均匀量化的方案。

采用μ律对信号进行对数形式的压缩,以便在不提高数据量的前提下提高信噪比,尽管量化的位数保持不变,但动态范围增加了。

μ律压缩的语音信号一般用8比特抽样数据表示,携带小信号信息量比大信号信息量多。

从统计意义上讲,有用信号更可能在小信号区间而非大信号区间。

因此,在小信号区间需要更多的量化点数。

μ律算法公式:

其中Xmax是信号x(n)的最大幅度,u是控制压缩程序的参数,u越大压缩就越厉害

μ律查找表内共有256个数,分别用来获得0—7段量化电压,其由16×16组数组成。

由下表看大信号多数由第7段表示,三个指数位用来表示第0-7段,4个尾数位用于表示后4个有效位,还有一位符号位没有给出。

16比特输入数据是由线性数据变换成8比

特μ律数据(模拟传输),然后再从μ律转成16比特的线性数据(模拟接收),再输出到编解码器

上图给出了按μ律压扩算法的输入输出特性曲线,μ为确定压缩量的参数,它反映最大量化间隔和最小量化间隔之比。

由图可见,μ值越大,压缩量越大。

由于μ律压扩的输入和输出关系是对数函数关系,所以这种编码又称为对数PCM。

A律压扩与μ律压扩相比,则压缩的动态范围略小些,小信号振幅时质量要比μ律稍差。

无论是A律还是μ律算法,它们的特性在输入信号振幅小时都呈线性,在输入信号振幅大时呈对数压缩特性。

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

这个数据就是CCITT,(国际电话与电报顾问委员会)推荐的G.711标准:

话音频率脉冲编码调制。

U律的扩展可定义为:

U律扩展的线性表如下:

扩展过的码字

偏值得输入

段值,量化值

比特:

654321x

比特:

1110987654321x

000abcd

000000xabcd1

001abcd

0000001abcd1

010abcd

000001abcd1x

011abcd

00001abcd1xx

100abcd

0001abcd1xxx

101abcd

001abcd1xxxx

110abcd

01abcd1xxxxx

111abcd

1abcd1xxxxxx

2TMS320C5X的硬件结构

2.1C55X的CPU体系结构

C55X有1条32位的程序数据总线(PB),5条16位数据总线(BB、CB、DB、EB、FB)和1条24位的程序地址总线及5条23位地址总线,这些总线分别与CPU相连。

总线通过存储单元接口(M)与外部程序总线和数据总线相连,实现CPU对外部存储器的访问。

这种并行的多总线结构,使CPU能在一个CPU周期内完成1次32位程序代码读、3次16位数据读和两次16位数据写。

C55X根据功能的不同将CPU分为4个单元,指令缓冲单元(I)、程序流程单元(P)、地址流程单元(A)、和数据计算单元(D)。

读程序地址总线(PDA)上传送24位的程序代码地址,由读程序总线(PB)将32位的程序代码送入指令缓冲单元进行译码[1]。

2.2指令缓冲单元(I)

C55X的指令缓冲单元有指令缓冲队列IBQ和指令译码器组成。

在每个CPU周期内,I单元将从程序数据接收的4B程序代码放入指令缓冲队列,指令译码器从队列中取6B程序代码,根据指令的长度可对8位、16位、24位、32位和48位的变长指令进行译码,然后把译码数据送入P单元、A单元和D单元去执行。

2.3程序流程单元(P)

程序流程单元有程序地址产生电路和寄存器组凑成。

程序流程单元产生所有程序空间的地址,并控制指令的读取顺序。

程序地址产生逻辑电路的任务是产生读取空间的24位地址。

一般情况下,它产生的是连续地址,如果指令要求读取非连续地址的程序代码时,程序地址产生逻辑电路能够接收来自I单元的立即数和来自D单元的寄存器值,并将产生的地址传送到PAB。

在P单元中使用的寄存器分为5种类型。

●程序流寄存器:

包括程序计数器、返回地址寄存器和控制流程关系寄存器。

●块重复寄存器:

包括块重复寄存器0和1(BRC0、BRC1)BRC1的保存寄存器(BRS1)、块重复起始地址寄存器0和1以及块重复结束地址寄存器0和1。

●单重复寄存器:

包括单重复寄存器和计算单重复寄存器。

●中断寄存器:

包括中断标志寄存器0和1、中断使能寄存器0和1以及调试中断使能寄存器0和1。

●状态奇存期:

包括状态寄存器0,1,2和3。

2.4地址程序单元(A)

地址程序单元包括数据地址产生电路、算术逻辑电路和寄存器组构成。

数据地址产生电路能够接收来自I单元的立即数和来自A单元的寄存器产生读取数据空间的地址。

对于使用间接寻址模式的指令,有P单元向DAGEN说明采用的寻址模式。

A单元包括一个16位的算术逻辑单元,它既可以接收来自I单元的立即数也可以与存储器、I/O空间、A单元寄存器、D单元寄存器和P单元寄存器进行双向通信。

A单元包括的寄存器有以下几种类型。

●数据页寄存器:

包括数据页寄存器和接口数据页寄存器;

●指针:

包括系数数据指针寄存器、堆栈针寄存器和8个辅助寄存器;

●循环缓冲寄存器:

包括循环缓冲大小寄存器、循环缓冲起始地址寄存器;

●临时寄存器:

包括临时寄存器。

2.5数据计算单元(D)

数据计算单元由移位器、算数逻辑电路、乘法累加器和寄存器组构成。

D单元包含了CPU的主要运算部件。

D单元移位器能够接收来自I单元的立即数,能够与存储器、I/O单元、A单元寄存器、D单元寄存器和P单元寄存器进行双向通信,此外,还可以向D单元的ALU和A单元的ALU提供移位后的数据。

移位可以完成以下操作:

●对40位的累加器可以完成向左最多32位的移位操作,移位数乐意从零食寄存器读取或由指令中的常数提供;

●对于16位寄存器、存储器或I/O空间数据可完成左移31位或32位的移位操作;

●对于16位立即数可完成向左移最多15位的移位操作。

3语音信号扩展U律设计过程

设计步骤

(1)连接好DSP开发系统,运行CCS软件;

(2)设计程序或键入下面的参考程序并保存(文件名设为jia)

(3)新建两个工程,分别添加jia以及链接命令文件(.cmd文件);

(4)向工程添加

(5)编译、链接工程,生成.Out文件;

(6)装载.out文件,运行;

(7)找错至无错误

(8)在view下运行两程序,出现结果框图。

(9)改变参数,重新设置其工作的参数,重复以上步骤并比较;

4语音信号U律设计软件程序

存储器的分配(5402.cmd)

MEMORY

{

PAGE0:

VECS:

origin=0080h,length=0080h/*InternalProgramRAM*/

PRAM:

origin=7600h,length=8000h/*InternalProgramRAM*/

PAGE1:

SCRATCH:

origin=0060h,length=0020h/*ScratchPadDataRAM*/

DMARAM:

origin=0C00h,length=0300h/*DMAbuffer*/

DATA:

origin=1100h,length=0080h/*InternalDataRAM*/

STACK:

origin=1180h,length=0560h/*StackMemorySpace*/

INRAM:

origin=1900h,length=0100h/*InternalDataRAM*/

HPRAM0:

origin=1A00h,length=0002h/*HPImemoryaccessiblebyHostandDSP*/

HPRAM1:

origin=1A02h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/

HPRAM2:

origin=1C82h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/

EXRAM:

origin=1F10h,length=9000h/*ExternalDataRAM*/

}

 

SECTIONS

{

.cinit>PRAMPAGE0

.text>PRAMPAGE0

.vectors>VECSPAGE0

init_var>PRAMPAGE0

detect>PRAMPAGE0

vrcprg>PRAMPAGE0

matprg>PRAMPAGE0

.stack>STACKPAGE1

.trap>SCRATCHPAGE1

.const>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/*variouscodebooktables*/

logtab>EXRAMPAGE1/*tableforlog2*/

powtab>EXRAMPAGE1/*tableforpow2*/

hamtab>EXRAMPAGE1/*tableforhamming*/

lgwtab>EXRAMPAGE1/*tableforlagwindow*/

acostab>EXRAMPAGE1/*tableforarccos*/

sqrtab>EXRAMPAGE1/*tableforsquareroot*/

acbtab>EXRAMPAGE1/*tableforthresholdsinacb*/

pm03tab>EXRAMPAGE1/*tableforx^(-0.3)computation*/

costab>EXRAMPAGE1/*tableforcosine*/

V23>INRAMPAGE1

FSK>INRAMPAGE1

hpibuff0>HPRAM0PAGE1

hpibuff1>HPRAM1PAGE1

hpibuff2>HPRAM2PAGE1

dma_buff>DMARAMPAGE1

}

/*主程序设计*/

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

/*用U律进行扩展及解压*/

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

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

/*L0:

录音*/

/*L1:

放音*/

#include/*头文件*/

#include

#include

#include

/*宏定义*/

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

#defineQUANT_MASK(0xf)/*Quantizationfieldmask.*/

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

#defineSEG_SHIFT(4)/*Leftshiftforsegmentnumber.*/

#defineSEG_MASK(0x70)/*Segmentfieldmask.*/

/*函数声明*/

voiddelay(s16period);

voidled(s16cnt);

voidinitcodec(void);

voidflashenable(void);

unsignedchardata2alaw(s16pcm_val);

intalaw2data(unsignedchara_val);

staticintsearch(intval,short*table,intsize);

/*全局变量*/

HANDLEhHandset;

s16data;

s16data1;

u16i=0;

u16temp1;

u16j=0;

u16k,l=0;

u8temp2;

u16buffer[20000];

staticshortseg_end[8]={0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF};

/*主函数*/

voidmain()

{

if(brd_init(100))

return;

led

(2);//闪灯两次

initcodec();//初始化codec

flashenable();//选择片外FLASH为片外存储器

/*

delay(100);

brd_led_toggle(BRD_LED0);

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

{

REG_WRITE(i,*(volatileu16*)DRR1_ADDR(HANDSET_CODEC));

delay(20);

}

brd_led_toggle(BRD_LED1);

delay(200);

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

{

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

delay(20);

}

brd_led_toggle(BRD_LED2);

*/

while

(1)

{

while(!

MCBSP_RRDY(HANDSET_CODEC)){};//等待接收handset处的采样

brd_led_toggle(BRD_LED0);

data=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC);//从handset处读取

采样

temp1=data2alaw(data);//对采样进行U律扩展

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

i=i+1;

if(i%2==1)

{

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

/*奇数数据左移8位temp1=abcdefgh00000000

buffer[j]=temp1*/

}

else

{

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

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

buffer[j]=abcdefghiabcdefghi*/

j++;//j加1

}

if(i>=40000)

{

i=0;

}

if(j>=20000)

{

j=0;

brd_led_disable(BRD_LED0);

brd_led_toggle(BRD_LED1);

//点亮二极管1表示放音开始

/*放音部分*/

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

{

if(k%2==0)

{

temp2=(buffer[l]>>8)&0x0ff;

}

else

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

当前位置:首页 > 高中教育 > 语文

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

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