1203030307_dsp语音信号压缩A律
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
本文简要阐述了语音信号压缩A律的基本原理,可以将高位的数据压缩成低位的数据,它适用于声音信号的播放和传输系统,在设计中借助MATLAB信号处理工具箱FDAtool工具设计了语音信号压缩系数,然后在CCS中以TMS320C55x芯片的汇编语言编程实现了该语音信号压缩。
利用MATLAB设计语音信号压缩,可以随时对比设计要求和语音信号压缩特性调整参数,直观简便,极大的减轻了工作量,有利于语音信号压缩设计的最优化。
另外文中还介绍CCS开发环境。
文中所给程序已经经过软件仿真验证,所设计的语音信号压缩符合设计要求。
关键词:DSP;语音信号压缩;MATLAB;Code Composer Studio(CCS);TMS320C55x
目录
1 语音信号压缩A律设计任务及目的 (1)
1.1 语音信号压缩A律设计任务 (1)
1.2语音信号压缩A律设计目的 (1)
2 TMS320C55X的硬件结构 (1)
2.1 C55X的CPU体系结构 (1)
2.2 指令缓冲单元(I) (2)
2.3程序流程单元(P) (2)
2.4地址程序单元(A) (2)
2.5数据计算单元(D) (3)
4 语音信号压缩(A律)原理 (3)
5 CCS概述 (6)
6语音信号压缩(A律)软件实现 (7)
6.1软件实现步骤 (7)
6.1.1软件程序 (7)
6.1.2实现步骤 (10)
6.1.2运行并观察结果 (11)
6.2结果分析 (12)
7结论 (12)
8参考文献 (12)
1 语音信号压缩A律设计任务及目的
1.1语音信号压缩A律设计任务
(1)完成语音信号采集;
(2)对语音信号进行A律压缩;
(3)传输压缩后的信号;
1.2语音信号压缩A律设计目的
本设计的目的在于通过使用DSP的程序设计完成对语音信号的压缩,既可以通过软件实现,也可以通过硬件实现。
进行程序的设计,并在CCS软件环境下进行调试,同时也加深学生对数字信号处理器的常用指标和设计过程的理解。
2 TMS320C55X的硬件结构
2.1 C55X的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位的程序代码送入指令缓冲单元进行译码。
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位的移位操作。
4 语音信号压缩(A律)原理
PCM(Pulse Code Modulation)编码即脉冲编码调制,也就是将模拟信号转换为数码,然后再转换成二进制数字信号的方法。
几种常见的二进制编码格式如下:
表4.1常见的二进制编码格式
A 律压缩编码压缩码是CCITT (Consultative Committee for International Telegraph and Telephone )国际电报电话协会最早推出的G.711语音压缩解压编码的一种格式的主要内容。
其中欧洲和中国等国家采用A 律压缩解压编码。
A 律压缩的数学解析式为: y = {
LnA A +1x ,⎪⎭⎫ ⎝
⎛
≤≤A x 10,
y = {
LnA ++1Ln(Ax)1,⎪⎭
⎫
⎝⎛≤≤11x A 。
式中:y 为输出信号;x 为输入信号;A 为压缩系数。
由上式得知,小信号时为线性特性,大信号时近似为对数特性。
这种压扩特性常把压缩、量化和编码合为一体。
A 律可用13段折线逼近(相当于A=87.6),便于用数字电路实现。
13段折线的压缩特性如图1所示。
图3.2分段为x 取正值时的情况,而x 取负值时,压扩特性与x 取正值成奇对称,在正8段和负8段中,正1、2段和负1、2段斜率相同,合为一段,所以原来的16段折线变为13段折线。
图4.1 A 律压缩曲线
图3.3是DSP 进行数据压缩解压的简单流程,DSP 将传输来的压缩后的数据进行解压成16位或者32位,然后对解压后的数据进行分析、处理;然后将处理后的数据按照要求压缩成8位的数据格式输出到相应设备,供其他设备读取。
图4.2 DSP 进行数据压缩解压的简单流程
表4.2 A 律数据压缩表
12位码(十进制) 量
阶
符号位
段落码(二进制) 段内码(二进制) 0~15 1 0 000 0000~1111 16~31 1 0 001 0000~1111 32~63 2 0 010 0000~1111 64~127 4 0 011 0000~1111 128~255 8 0 100 0000~1111 256~511
16
0 101
0000~1111
RSR
RBR
压缩
RJUS
DRR
CPU
32
16
B
DR
XSR
压缩
DXR
CPU
B
16
在进行A律压缩时,对于采样到的12位数据,默认其最高位为符号位,压缩时要保持最高位即符号位不变,原数据的后11位要压缩成7位。
这7位码由3位段落码和4位段内码组成。
具体的压缩变换后的数据根据后11位数据大小决定。
具体的编译码表如表5.2所示。
压缩后的数据的最高位(第7位)表示符号,量阶分别为1、1、2、4、8、16、32、64,由压缩后数据的第6位到第4位决定,第3位到第0位是段内码。
压缩后的数据有一定的失真。
有些数据不能表示出,只能取最近该数据的压缩值。
例如,数据125,压缩后的值为00111111,意义如下:
最终结果为64+4×15=124 ,实现了压缩。
5 CCS概述
CCS,即Code Composer Studio,是TI公司在1999年推出的一个开放、具有强大集成开发环境。
它最初是由GO DSP公司为TI的C6000系列DSP开发的。
在TI收购了GO DSP 后,将CCS扩展到了其它系列。
现在所有TI的DSP都可以使用CCS进行开发,但是其中的DSPBIOS功能只有C5000和C6000的CCS中才提供。
以前的DSP软件开发都是在一个分散的开发环境下进行,程序的编写、代码的生成以及调试等都是要通过命令来完成,类似于以前的DOS,十分烦杂。
而CCS的出现是DSP开发软件的一次革命性的变化。
CCS主要由代码生成工具、CCS集成开发环境、DSPBIOS和API函数以及RTDX组成。
CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。
CCS支持如下所
示的开发周期的所有阶段。
图5.1 CCS开发周期阶段
CCS提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。
集成可视化代码编辑界面,可以方便地直接编写C、汇编、.h文件、.cmd文件等。
集成代码生成工具,包括汇编器、优化的C编译器和连接器等。
具有完整的基本调试工具,可以载入执行文件(.out),查看寄存器窗口、存储器窗口和变量窗口、反汇编窗口等,支持在C源代码级进行调试。
支持多片DSP联合调试。
断点工具,支持硬件断点、数据空间读/写断点、条件断点等。
探针工具,用于进行算法仿真,数据监视等。
剖析工具,用于评估代码执行的时间。
数据图形显示工具,可绘制时域/频域波形、眼图、星座图等,并可以自动刷新。
提供GEI工具,用户可以根据需要编写自己的控制面板/菜单,从而方便直观地修改变量,配置参数。
6 语音信号压缩(A律)软件实现
6.1软件实现步骤
6.1.1软件程序
1.信号压缩算法------“Alaw.c”
#include<math.h>
char i=0;
unsigned int sign,segment,quant,absol;
unsigned int nOutput;
unsigned char IntToaLaw(int nInput)
{
unsigned int temp;
unsigned char cOutput;
absol=abs(nInput);//取绝对值
sign=(nInput >= 0)?0:1;//符号位
temp=absol<<3;
while(1)
{
nOutput=temp&0x8000;
if(nOutput) break;//碰到1就退出
temp<<=1;
i++;
if(i==8) break;
}
if(i<8)
{
temp&=0x7800;//保留段内码
quant=temp>>11;//段内码
segment=8-i;//段落码
nOutput=(segment<<4)+quant; }
else
{
temp&=0x7fff;
nOutput=temp>>11;
}
if(sign)
nOutput|=(1<<7);
cOutput=(unsigned char)nOutput;
return cOutput;
}
2.主程序------“c55_fira.c”
#include<math.h>
#define SIGNAL1_F 200
#define SIGNAL2_F 640
#define SALMP_F 2000
#define COFF_L 23
#define BUF_L 256
#define PI 3.1415926
int temp;
unsigned char utemp;
extern unsigned char IntToaLaw(int);
//extern int aLawToInt(unsigned char);
int data_in[BUF_L];
int data_out[BUF_L];
int k=0;
void main(void)
{
while(1)
{
utemp=IntToaLaw(32);
//temp=aLawToInt(utemp);
data_out[k]=temp; //设置断点
k++; //设置断点
if(k>=BUF_L) k=0; //设置断点
}
}
6.1.2实现步骤
1准备
设置c55xx软件仿真模式,连接好DSP开发系统,并启动CCS。
2新建工程
首先新建工程文件xxx,然后将程序写入工程文件中,并保存。
CCS工程界面如图所示:
图6.1
3编译链接并装载程序
把文件添加到工程中后,再对文件进行编译链接,生成.out文件,然后装载输出文件。
4设置信号压缩观察窗口
在菜单中选择view---watch window,并在watch1窗口中name栏设置观察输出数据,即utemp,并设置为十六进制观察数据。
5设置断点
在程序有注释断点处设置软件断点。
6.1.2运行并观察结果
运行前:
图6.2
运行后:
图6.3
6.2结果分析
输入被压缩数据为32,即0000100000,运行后获得压缩之后数据位0x0010h,经验证,数据压缩正确。
7 结论
此类压缩是一种最简单的线性位压缩方式,可以将高位的数据压缩成低位的数据,它适用于声音信号的播放和传输系统,但采集和播放音乐信号时采用高位的AD和DA可得到较好的音乐效果,但传输或保存声音信号时,可压缩存储,从而在同样的存储空间上存储较长时间的语音信号,现在很多简单的录音设备就采用这种方式,但A率压缩率不高,而且压缩的失真是固定的,不能通过算法提高,所以在较为复杂的语音设备中应用较少。
8参考文献
[1]姜阳,周锡青.DSP原理与应用实验.西安:西安电子科技大学出版社,2008
[2]TMS320C55X DSP Programmer’s Guide SPRU376A[Z] . TexasInstrume nts,
2001
[3]TMS320C55XD SPAssembly Language Tools User’s Guide SPRU280H[Z] . Texas Instruments, 2004
[4]程佩青,数字信号处理教程第二版,清华大学出版社,2001.8
[5]李利.DSP原理及应用实用技[M].北京:中国水利水电出版社,2004。