完整word版DSP技术课程设计语音信号扩展U律新资料.docx
- 文档编号:25554324
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:33
- 大小:756.14KB
完整word版DSP技术课程设计语音信号扩展U律新资料.docx
《完整word版DSP技术课程设计语音信号扩展U律新资料.docx》由会员分享,可在线阅读,更多相关《完整word版DSP技术课程设计语音信号扩展U律新资料.docx(33页珍藏版)》请在冰豆网上搜索。
完整word版DSP技术课程设计语音信号扩展U律新资料
摘要
本文简要阐述了语音信号扩展U律的基本原理,可以将高位的数据扩展成低位的数据,它适用于声音信号的播放和传输系统,在设计中借助MATLAB信号处理工具箱FDAtool工具设计了语音信号扩展系数,然后在CCS中以TMS320C55x芯片的汇编语言编程实现了该语音信号扩展。
利用MATLAB设计语音信号扩展,可以随时对比设计要求和语音信号扩展特性调整参数,直观简便,极大的减轻了工作量,有利于语音信号扩展设计的最优化。
另外文中还介绍CCS开发环境。
文中所给程序已经经过软件仿真验证,所设计的语音信号扩展符合设计要求。
关键词:
DSP,语音信号扩展,MATLAB,CodeComposerStudio(CCS),TMS320C55x
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比特的线性数据(模拟接收),再输出到编解码器
上图给出了按m律压扩算法的输入输出特性曲线,m为确定压缩量的参数,它反映最大量化间隔和最小量化间隔之比。
由图可见,m值越大,压缩量越大。
由于m律压扩的输入和输出关系是对数函数关系,所以这种编码又称为对数PCM.
A律压扩与m律压扩相比,则压缩的动态范围略小些,小信号振幅时质量要比m律稍差。
无论是A律还是m律算法,它们的特性在输入信号振幅小时都呈线性,在输入信号振幅大时呈对数压缩特性。
对于采样频率为8kHz,样本精度为16位的输入信号,使用A律压扩或m律压扩编码,经过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 h〉 #include〈codec.h〉 #include〈mcbsp54.h> /*宏定义*/ #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 { temp2=buffer[l]&0x0ff; l++; } if(l>=20000) l=0; data1=alaw2data(temp2);//U律解压 while(! MCBSP_XRDY(HANDSET_CODEC)){}; *(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=data1;//将数据写入D/A转换器 } /*放音结束*/ brd_led_toggle(BRD_LED0); brd_led_toggle(BRD_LED1); } } }//主程序结束 /*子函数*/ /*******延时******/ voiddelay(s16period) { inti,j; for(i=0;i〈period;i++) { for(j=0;j } } /*******闪灯******/ voidled(s16cnt) { while(cnt-—) { brd_led_toggle(BRD_LED0);//切换LED指示灯0的显示状态 delay(1000); brd_led_toggle(BRD_LED1); delay(1000); brd_led_toggle(BRD_LED2); delay(1000); } } /*****初始化codec**/ voidinitcodec(void) { /*OpenHandsetCodec获取设置codec的句柄*/ hHandset=codec_open(HANDSET_CODEC);/Acquirehandletocodec /*Setcodecparameters*/ codec_dac_mode(hHandset,CODEC_DAC_15BIT);//DACin15—bitmode codec_adc_mode(hHandset,CODEC_ADC_15BIT);//ADCin15-bitmode codec_ain_gain(hHandset,CODEC_AIN_6dB);//6dBgainonanaloginputtoADC codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB); //—6dBgainonanalogoutputfromDAC codec_sample_rate(hHandset,SR_8000);//8KHzsamplingrate } /*****设置flash****/ voi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word DSP 技术 课程设计 语音 信号 扩展 资料