DSP课程设计基于TMS320VC55X芯片的语音采集压缩存储与回放.docx
《DSP课程设计基于TMS320VC55X芯片的语音采集压缩存储与回放.docx》由会员分享,可在线阅读,更多相关《DSP课程设计基于TMS320VC55X芯片的语音采集压缩存储与回放.docx(25页珍藏版)》请在冰点文库上搜索。
DSP课程设计基于TMS320VC55X芯片的语音采集压缩存储与回放
目录
1概述1
1.1设计目的1
1.2设计要求1
1.3语音信号压缩A律设计基本原理1
1.3.1语音信号压缩编码技术的发展1
1.3.2DSP硬件实现数据压缩解压的简单流程2
1.3.3A律语音信号压缩2
2系统硬件设计方案4
2.1DSP芯片的基本原理4
2.2指令缓冲单元(I)5
2.3程序流程单元(P)5
2.4地址程序单元(A)5
2.5数据计算单元(D)6
3语音信号压缩A律设计的CCS实现6
3.1简述CCS环境6
3.1.1CCS主要特点7
3.1.2DSP/BIOS和API函数以及RTDX插件7
3.2CCS配置7
3.3CCS环境中工程文件的使用8
3.3.1建立工程文件8
3.3.2创建新文件9
3.4编译链接和运行目标文件9
3.4.1对程序进行编译链接并装载.out文件10
4软件设计与系统仿真10
4.1软件设计流程图10
4.2CCS操作过程11
4.3程序代码实现11
5课程设计总结20
6参考文献21
1概述
1.1设计目的
在CCS环境下基于TMS320VC55X芯片的语音采集压缩存储与回放。
通过这次课程设计,加深对CCS集成开发环境的以及DSP试验系统箱的使用。
锻炼逻辑思维能力、动手能力以及独立解决问题的能力,对以后更深入地学习和应用数字信号处理及相关知识作准备。
1.2设计要求
(1)了解DSP开发工具及其安装过程
(2)熟悉DSP开发软件CCS使用
(3)熟悉工程文件的建立方法、汇编程序开发调试过程
(4)熟悉常用C55X系列指令的用法
(5)在老师的指导下,独立完成课程设计的全部内容,并按要求编写课程设计论文,能正确阐述和分析设计和实验结果。
1.3语音信号压缩A律设计基本原理
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.3A律语音信号压缩
A律限制采样值为12比特,A律的压缩可按照下列公式定义:
F(x)=sgn(x)A|x|/(a+lnA){0<=|x|<1/A}
=sgn(x)(1+lnA|x|)/(1+lnA){1/A<=|x|<=1}
式中,A是压缩参数,x是需要压缩的归一化整数.下图说明这个压缩公式是按照分段线性近似。
从线性到A律的压缩转换如下表.压缩后的码字组成:
比特0~3表示量化值,比特4~6表示段值,压缩后的码字符号放在比特7,为了简化未写出
表1A律二进制编码表
压缩前的码字
丢弃的
比特数
压缩后的码字
输入值
段值,量化值
比特:
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
输入模拟信号经MAX1246采样编码后形成12位一祯的码流进入VC5410的串口___McBSP0,并向VC5410的CPU发出中断请求(rint0),A律压缩就是将这些接受到的12位数据转换成8位的A律PCM码.MAX1246对双极性输入信号进行量化,编码和传输函数如下图所示
图2MAX1246信号函数
由MAX1246信号函数图可见,MAX1246采用的是均匀量化个补码的编码形式.在进行A律压缩时,要保持符号位不变,原数据的后11位要压缩成7位.这7位码编译码表由3位段落码和4位段内码组成.具体的编译码表如下
表27位码编译码表
11位码(十进制)
量阶
段落码(二进制)
段内码(二进制)
0~15
1
000
0000~1111
16~31
1
001
0000~1111
32~63
2
010
0000~1111
64~127
4
011
0000~1111
128~255
8
100
0000~1111
256~511
16
101
0000~1111
512~1023
32
110
0000~1111
1024~2047
64
111
0000~1111
2系统硬件设计方案
2.1DSP芯片的基本原理
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语音信号压缩A律设计的CCS实现
3.1简述CCS环境
CCS,即CodeComposerStudio,是TI公司在1999年推出的一个开放、具有强大集成开发环境。
它最初是由GODSP公司为TI的C6000系列DSP开发的。
在TI收购了GODSP后,将CCS扩展到了其它系列。
现在所有TI的DSP都可以使用CCS进行开发,但是其中的DSPBIOS功能只有C5000和C6000的CCS中才提供。
以前的DSP软件开发都是在一个分散的开发环境下进行,程序的编写、代码的生成以及调试等都是要通过命令来完成,类似于以前的DOS,十分烦杂。
而CCS的出现是DSP开发软件的一次革命性的变化。
CCS主要由代码生成工具、CCS集成开发环境、DSPBIOS和API函数以及RTDX组成。
3.1.1CCS主要特点
集成可视化代码编辑界面,可以方便地直接编写C、汇编、.h文件、.cmd文件等。
集成代码生成工具,包括汇编器、优化的C编译器和连接器等。
具有完整的基本调试工具,可以载入执行文件(.out),查看寄存器窗口、存储器窗口和变量窗口、反汇编窗口等,支持在C源代码级进行调试。
支持多片DSP联合调试。
断点工具,支持硬件断点、数据空间读/写断点、条件断点等。
探针工具,用于进行算法仿真,数据监视等。
剖析工具,用于评估代码执行的时间。
数据图形显示工具,可绘制时域/频域波形、眼图、星座图等,并可以自动刷新。
提供GEI工具,用户可以根据需要编写自己的控制面板/菜单,从而方便直观地修改变量,配置参数。
3.1.2DSP/BIOS和API函数以及RTDX插件
DSP/BIOS(BasicInputOutputSystem)和API(ApplicationProgramInterface)函数为CCS的主要插件之一。
DSPBIOS可以看作是一个准实时操作系统,支持TIDSP芯片的各种实时操作系统都是以DSP/BIOS作为底层软件,为嵌入式应用提供基本的运行服务。
并且,它还能实时获取目标机的信息,并将其传递给主机上的BIOSCOPE工具,对应用程序进行实时分析RTDX(RealTimeDataExchange)插件是CCS中另一个十分重要的插件。
实时数据交换技术为CCS提供了一个实时、连续的可视环境,开发人员可以看到DSP应用程序工作的真实过程。
RTDX允许系统开发者在不停止运行目标应用程序的情况下在计算机和DSP芯片之间传输数据,同时还可以在主机上利用对象链接嵌入(OLE)技术分析和观察数据。
RTDX可以在DSPBIOS中使用,也可以脱离DSP/BIOS使用。
由于CCS中的Simulator不支持RTDX,所以必须在连接有硬件仿真器或目标板的Emulator下使用。
3.2CCS配置
击桌面图标的“setupCCStudiov3.1”图标,运行CCS设置程序,如图5.1所示:
点击Add→Save&quit完成设置。
图3.1用标准配置文件设置系统配置
3.3CCS环境中工程文件的使用
3.3.1建立工程文件
在CCS集成环境下开发汇编程序或者C/C++程序,首先要建立一个工程项目文件(*.pjt),再向工程项目文件中添加汇编程序源文件(*.asm),C/C++源文件(*.c)和链接命令文件(*.cmd),并设置工程项目选项。
使用CCS开发应用程序的一般步骤如下:
●创建或打开一个工程项目文件(*.pjt),编辑各类文件,可以使用CCS提供的集成编辑环境,对链接命令文件和源程序进行编辑。
●对工程项目进行编译。
在编译过程中如果出现语法错误,将在编译链接信息视窗(build)窗口中显示错误信息,用户可以根据显示的信息找到错误的位置,更改错误。
●对结果和数据进行分析和算法评估。
用户可以利用CCS提供的探测点.图形显示和性能评价等工具,对运行结果及输出数据进行分析,评估算法的可能性。
下面分别进行介绍建立工程文件,单击Project→New命令,系统将弹出如图所示的对话框,在该对话框中输入项目文件名,如fir单击“完成”系统就会创建一个名为fir.pjt的工程项目文件如图5.2所示。
图3.2创建新的工程项目文件对话框
3.3.2创建新文件
选择File→New可打开一个新的编辑窗口。
在新窗口中输入源代码。
选择File→Save,在出现的对话框中输入一个文件名,并选择一个扩展名(C源代码选择*.c,汇编源代码选择*.asm),然后单击保存将源程序保存[6]。
3.3.3向工程项目中添加文件
添加文件:
单击Project→AddFiletoProject命令然后会弹出如图5.3所示的对话框,单击打开完成对文件的添加。
图3.3向工程项目中添加文件对话框
3.4编译链接和运行目标文件
3.4.1对程序进行编译链接并装载.out文件
对程序进行编译:
执行Project→Compile命令就可以对当前的汇编程序进行编译生成.obj文件。
如果程序存在语法错误,那么就会在下面的编译链接信息框中显示错误信息。
根据错误提示,读者可对程序进行修改[2]。
对程序进行编译链接执行Project→Build命令,就可以对当前的项目文件同时进行编译,汇编和链接操作,并生成与工程项目名称相同的可执行的.out文件。
如果有错误信息,则会在“编译链接”信息框中显示。
也可以执行Project下的buildAll命令,所有项目中的文件重新编译,汇编和链接,生成.out文件。
单击主菜单“File”中“LoadProgram”选项,在对话框中,在CCS安装目录下,找到构建该工程的Debug目录,选择构建生成后的.out文件,并打开CCS装载完毕后,该“*.out”文件到目标dsp之后,会自动弹出“Disassembly”窗口如图5.4所示。
图3.4CCS调试程序时出现的视窗加工程界面
4软件设计与系统仿真
4.1软件设计流程图
在对语音进行采集时,先要初始化DSP及其串口和A/D和D/A转换器。
4.2CCS操作过程
1.将工程文件夹放入C盘要求目录下。
2.打开CCS,Project→open,打开工程文件。
3.进行编译,连接。
4.根据错误提示,对buildoption进行正确的设置,修改头文件路径。
5.再编译,连接,显示没有错误。
6.loadprogram---run,此时三盏灯循环亮,之后程序开始,第一盏灯亮开始录音,一段时间后第二盏灯亮开始放音,然后又开始录音。
依次循环。
4.3程序代码实现
数据经压缩后,放置在3000h~3800;解压缩数据放在5000h~5400h.
A律压缩表放在4000h~4800h;A律解压缩表放在4900h~4980h.
程序清单如下:
File:
A_LAW.ASM→programforthe’C5510
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
}
/*主程序设计*/
/*语音采集及回放程序,用A律进行压缩及解压,采用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