收藏 分销(赏)

DSP技术课程设计-语音信号扩展U律新资料.doc

上传人:天**** 文档编号:4288494 上传时间:2024-09-03 格式:DOC 页数:25 大小:913.51KB
下载 相关 举报
DSP技术课程设计-语音信号扩展U律新资料.doc_第1页
第1页 / 共25页
DSP技术课程设计-语音信号扩展U律新资料.doc_第2页
第2页 / 共25页
DSP技术课程设计-语音信号扩展U律新资料.doc_第3页
第3页 / 共25页
DSP技术课程设计-语音信号扩展U律新资料.doc_第4页
第4页 / 共25页
DSP技术课程设计-语音信号扩展U律新资料.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、沈阳理工大学信息科学与工程学院DSP技术课程设计报告 摘 要 本文简要阐述了语音信号扩展U律的基本原理,可以将高位的数据扩展成低位的数据,它适用于声音信号的播放和传输系统,在设计中借助MATLAB信号处理工具箱FDAtool工具设计了语音信号扩展系数,然后在CCS中以TMS320C55x芯片的汇编语言编程实现了该语音信号扩展。利用MATLAB设计语音信号扩展,可以随时对比设计要求和语音信号扩展特性调整参数,直观简便,极大的减轻了工作量,有利于语音信号扩展设计的最优化。另外文中还介绍CCS开发环境。文中所给程序已经经过软件仿真验证,所设计的语音信号扩展符合设计要求。关键词:DSP,语音信号扩展,

2、MATLAB,Code Composer Studio(CCS),TMS320C55x目 录1 语音信号扩展U律设计任务及目的.11.1语音信号扩展U律设计任务 11.2语音信号扩展U律设计目的 .11.3 语音信号扩展U律设计基本原理 11.3.1 语音信号扩展编码技术的发展 .11.3.2 DSP硬件实现数据扩展解压的简单流程 .11.3.3 U律语音信号扩展 22 TMS320C5X结构 .42.1 C55X的CPU体系结构 .42.2 指令缓冲单元(I). 42.3 程序流程单元(P). 42.4 地址程序单元(A). 52.5 数据计算单元(D). 53 语音信号扩展U律设计过程 .

3、64 语音信号U律设计软件程序 .75 语音信号扩展U律设计的CCS实现. .155.1 简述CCS环境 155.1.1 CCS主要特点 155.1.2 DSP/BIOS和API函数以及RTDX插件. 155.2 CCS配置 .165.3 CCS环境中工程文件的使用 .165.3.1 建立工程文件 .165.3.2 创建新文件 .175.3.3 向工程项目中添加文件 .175.4 编译链接和运行目标文件. 185.4.1 对程序进行编译链接并装载.out文件 186 仿真结果及讨论 .19结 论 .22 参考文献 .23 II沈阳理工大学信息科学与工程学院DSP技术课程设计报告1 语音信号扩展

4、U律设计任务及目的1.1 语音信号扩展U律设计任务(1)完成语音信号采集;(2)对语音信号进行U律扩展;(3)传输扩展后的信号1.2 语音信号扩展U律设计目的 本设计的目的在于通过使用DSP的程序设计完成对语音信号的扩展,既可以通过软件实现,也可以通过硬件实现。进行程序的设计,并在CCS软件环境下进行调试,同时也加深学生对数字信号处理器的常用指标和设计过程的理解。1.3 语音信号扩展U律设计基本原理 1.3.1 语音信号扩展编码技术的发展 随随着通信、计算机网络等技术的飞速发展,语音扩展编码技术得到了快速发展和广泛应用,尤其是最近20年,语音扩展编码技术在移动通信、卫星通信、多媒体技术以及IP

5、电话通信中得到普遍应用,起着举足轻重的作用。 语音扩展编码技术的类别 语音编码就是将模拟语音信号数字化,数字化之后可以作为数字信号传输、存储或处理,可以充分利用数字信号处理的各种技术。为了减小存储空间或降低传输比特率节省带宽,还需要对数字化之后的语音信号进行扩展编码,这就是语音扩展编码技术。 语音的扩展编码方法归纳起来可以分为三大类:波形编码、参数编码和混合编码。1.3.2 DSP硬件实现数据扩展解压的简单流程 DSP将传输来的扩展后的数据进行解压成16位或32位,而后对解压后的数据进行分析,处理,最后将处理后的数据按照要求扩展成8位的数据格式输出到相应设备以供读取:DRRSRRBR解压RJU

6、STDDRDXR扩展XSRDX 在进行扩展时,采样后的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,

7、后面的4个1111为段内码,表示值为15最终结果为:64+4*15=124.1.3.3 U律语音信号扩展律算法:采用律算法对采集的语音数据进行处理,律编码是一种针对语音信号进行对数压缩非均匀量化的方案。采用律对信号进行对数形式的压缩,以便在不提高数据量的前提下提高信噪比,尽管量化的位数保持不变,但动态范围增加了。律压缩的语音信号一般用8比特抽样数据表示,携带小信号信息量比大信号信息量多。从统计意义上讲,有用信号更可能在小信号区间而非大信号区间。因此,在小信号区间需要更多的量化点数。 律算法公式:其中Xmax是信号x(n)的最大幅度,u是控制压缩程序的参数,u越大压缩就越厉害律查找表内共有256

8、个数,分别用来获得07段量化电压,其由1616组数组成。 由下表看大信号多数由第7段表示,三个指数位用来表示第0-7段,4个尾数位用于表示后4个有效位,还有一位符号位没有给出。16比特输入数据是由线性数据变换成8比特律数据(模拟传输),然后再从律转成16比特的线性数据(模拟接收),再输出到编解码器 上图给出了按m律压扩算法的输入输出特性曲线,m为确定压缩量的参数,它反映最大量化间隔和最小量化间隔之比。由图可见,m值越大,压缩量越大。由于m 律压扩的输入和输出关系是对数函数关系,所以这种编码又称为对数PCM。 A律压扩与m律压扩相比,则压缩的动态范围略小些,小信号振幅时质量要比m律稍差。无论是A

9、律还是m律算法,它们的特性在输入信号振幅小时都呈线性,在输入信号振幅大时呈对数压缩特性。 对于采样频率为8kHz,样本精度为16位的输入信号,使用A律压扩或m律压扩编码,经过PCM编码器之后每个样本的精度为8位,输出的数据率为64kb/s。这个数据就是CCITT ,(国际电话与电报顾问委员会)推荐的G.711标准:话音频率脉冲编码调制。U律的扩展可定义为:U律扩展的线性表如下: 扩展过的码字 偏值得输入 段值,量化值 比特 :6 5 4 3 2 1 x比特:11 10 9 8 7 6 5 4 3 2 1 x 0 0 0 a b c d 0 0 0 0 0 0 x a b c d 1 0 0 1

10、 a b c d 0 0 0 0 0 0 1 a b c d 1 0 1 0 a b c d 0 0 0 0 0 1 a b c d 1 x 0 1 1 a b c d 0 0 0 0 1 a b c d 1 x x 1 0 0 a b c d 0 0 0 1 a b c d 1 x x x 1 0 1 a b c d 0 0 1 a b c d 1 x x x x 1 1 0 a b c d 0 1 a b c d 1 x x x x x 1 1 1 a b c d 1 a b c d 1 x x x x x x 2 TMS320C5X的硬件结构2.1 C55X的CPU体系结构C55X有1条

11、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.

12、2 指令缓冲单元(I)C55X的指令缓冲单元有指令缓冲队列IBQ和指令译码器组成。在每个CPU周期内,I单元将从程序数据接收的4B程序代码放入指令缓冲队列,指令译码器从队列中取6B程序代码,根据指令的长度可对8位、16位、24位、32位和48位的变长指令进行译码,然后把译码数据送入P单元、A单元和D单元去执行。2.3 程序流程单元(P)程序流程单元有程序地址产生电路和寄存器组凑成。程序流程单元产生所有程序空间的地址,并控制指令的读取顺序。程序地址产生逻辑电路的任务是产生读取空间的24位地址。一般情况下,它产生的是连续地址,如果指令要求读取非连续地址的程序代码时,程序地址产生逻辑电路能够接收来自

13、I单元的立即数和来自D单元的寄存器值,并将产生的地址传送到PAB。在P单元中使用的寄存器分为5种类型。l 程序流寄存器:包括程序计数器、返回地址寄存器和控制流程关系寄存器。l 块重复寄存器:包括块重复寄存器0和1(BRC0、BRC1)BRC1的保存寄存器(BRS1)、块重复起始地址寄存器0和1以及块重复结束地址寄存器0和1。l 单重复寄存器:包括单重复寄存器和计算单重复寄存器。l 中断寄存器:包括中断标志寄存器0和1、中断使能寄存器0和1以及调试中断使能寄存器0和1。l 状态奇存期:包括状态寄存器0,1,2和3。2.4 地址程序单元(A)地址程序单元包括数据地址产生电路、算术逻辑电路和寄存器组

14、构成。数据地址产生电路能够接收来自I单元的立即数和来自A单元的寄存器产生读取数据空间的地址。对于使用间接寻址模式的指令,有P单元向DAGEN说明采用的寻址模式。A单元包括一个16位的算术逻辑单元,它既可以接收来自I单元的立即数也可以与存储器、I/O空间、A单元寄存器、D单元寄存器和P单元寄存器进行双向通信。A单元包括的寄存器有以下几种类型。l 数据页寄存器:包括数据页寄存器和接口数据页寄存器;l 指针:包括系数数据指针寄存器、堆栈针寄存器和8个辅助寄存器;l 循环缓冲寄存器:包括循环缓冲大小寄存器、循环缓冲起始地址寄存器;l 临时寄存器:包括临时寄存器。2.5 数据计算单元(D)数据计算单元由

15、移位器、算数逻辑电路、乘法累加器和寄存器组构成。D单元包含了CPU的主要运算部件。D单元移位器能够接收来自I单元的立即数,能够与存储器、I/O单元、A单元寄存器、D单元寄存器和P单元寄存器进行双向通信,此外,还可以向D单元的ALU和A单元的ALU提供移位后的数据。移位可以完成以下操作:l 对40位的累加器可以完成向左最多32位的移位操作,移位数乐意从零食寄存器读取或由指令中的常数提供;l 对于16位寄存器、存储器或I/O空间数据可完成左移31位或32位的移位操作;l 对于16位立即数可完成向左移最多15位的移位操作。3 语音信号扩展U律设计过程设计步骤(1)连接好DSP开发系统,运行CCS软件

16、;(2)设计程序或键入下面的参考程序并保存(文件名设为jia)(3) 新建两个工程,分别添加jia以及链接命令文件(.cmd文件);(4)向工程添加(5)编译、链接工程,生成Out文件;(6)装载.out文件,运行;(7)找错至无错误(8)在view下运行两程序,出现结果框图。(9)改变参数,重新设置其工作的参数,重复以上步骤并比较; 4 语音信号U律设计软件程序存储器的分配(5402.cmd)MEMORY PAGE 0: VECS: origin = 0080h, length = 0080h /* Internal Program RAM */ PRAM: origin = 7600h,

17、length = 8000h /* Internal Program RAM */ PAGE 1: SCRATCH: origin = 0060h, length = 0020h /* Scratch Pad Data RAM */ DMARAM: origin = 0C00h, length = 0300h /* DMA buffer */ DATA: origin = 1100h, length = 0080h /* Internal Data RAM */ STACK: origin = 1180h, length = 0560h /* Stack Memory Space */ INR

18、AM: origin = 1900h, length = 0100h /* Internal Data RAM */ HPRAM0: origin = 1A00h, length = 0002h /* HPI memory accessible by Host and DSP */ HPRAM1: origin = 1A02h, length = 0280h /* HPI memory accessible by Host and DSP */ HPRAM2: origin = 1C82h, length = 0280h /* HPI memory accessible by Host and

19、 DSP */ EXRAM: origin = 1F10h, length = 9000h /* External Data RAM */SECTIONS .cinit PRAM PAGE 0 .text PRAM PAGE 0 .vectors VECS PAGE 0 init_var PRAM PAGE 0 detect PRAM PAGE 0 vrcprg PRAM PAGE 0 matprg PRAM PAGE 0 .stack STACK PAGE 1 .trap SCRATCH PAGE 1 .const EXRAM PAGE 1 .data EXRAM PAGE 1 .bss E

20、XRAM PAGE 1 .cio EXRAM PAGE 1 .switch EXRAM PAGE 1 tables EXRAM PAGE 1 var EXRAM PAGE 1 svctab EXRAM PAGE 1 /* SS_V LSP table */ vctab EXRAM PAGE 1 /* V LSP table */ uvctab EXRAM PAGE 1 /* UV LSP table */ cuvtab EXRAM PAGE 1 /* Stochastic codebook */ cdbktab EXRAM PAGE 1 /* various codebook tables*/

21、 logtab EXRAM PAGE 1 /* table for log2 */ powtab EXRAM PAGE 1 /* table for pow2 */ hamtab EXRAM PAGE 1 /* table for hamming */ lgwtab EXRAM PAGE 1 /* table for lag window */ acostab EXRAM PAGE 1 /* table for arccos */ sqrtab EXRAM PAGE 1 /* table for square root */ acbtab EXRAM PAGE 1 /* table for t

22、hresholds in acb */ pm03tab EXRAM PAGE 1 /* table for x(-0.3) computation */ costab EXRAM PAGE 1 /* table for cosine */ V23 INRAM PAGE 1 FSK INRAM PAGE 1 hpibuff0 HPRAM0 PAGE 1 hpibuff1 HPRAM1 PAGE 1 hpibuff2 HPRAM2 PAGE 1 dma_buff DMARAM PAGE 1/*主程序设计*/*语音采集及回放程序*/*用U律进行扩展及解压*/*采用AD50进行A/D,D/A转换 */

23、 /*灯循环闪烁程序开始*/*L0:录音*/*L1:放音*/ #include /* 头文件*/#include #include #include /* 宏定义 */#defineSIGN_BIT(0x80)/* Sign bit for a A-law byte. */#defineQUANT_MASK(0xf)/* Quantization field mask. */#defineNSEGS(8) /* Number of A-law segments. */#defineSEG_SHIFT(4) /* Left shift for segment number. */#defineS

24、EG_MASK(0x70)/* Segment field mask. */* 函数声明 */void delay(s16 period);void led(s16 cnt);void initcodec(void);void flashenable(void);unsigned char data2alaw(s16 pcm_val);int alaw2data(unsigned chara_val);static int search(int val,short*table,int size);/* 全局变量 */HANDLE hHandset;s16 data;s16 data1;u16

25、i=0;u16 temp1;u16 j=0;u16 k,l=0;u8 temp2;u16 buffer20000;static short seg_end8=0x1F,0x3F,0x7F,0xFF,0x1FF,0x3FF,0x7FF,0xFFF;/* 主函数 */void main() if (brd_init(100) return; led(2); /闪灯两次 initcodec(); /初始化codec flashenable(); /选择片外FLASH为片外存储器 /* delay(100); brd_led_toggle(BRD_LED0); for(i=0x9000;i0xefff

26、;i+) REG_WRITE(i,*(volatile u16*)DRR1_ADDR(HANDSET_CODEC); delay(20); brd_led_toggle(BRD_LED1); delay(200); for(i=0x9000;i0xefff;i+) *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=REG_READ(i); delay(20); brd_led_toggle(BRD_LED2); */ while (1) while (!MCBSP_RRDY(HANDSET_CODEC) ; /等待接收handset处的采样 brd_led_to

27、ggle(BRD_LED0); data = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /从handset处读取 采样 temp1=data2alaw(data); /对采样进行U律扩展 /* 把低地址数据放在高八位 高地址数据放在低八位 */ i=i+1; if(i%2=1) bufferj=(temp1=40000) i=0; if(j=20000) j=0; brd_led_disable(BRD_LED0); brd_led_toggle(BRD_LED1); /点亮二极管1 表示放音开始 /* 放音部分 */ for(k=0;k8)&0x0f

28、f; else temp2=bufferl&0x0ff; l+; if(l=20000) l=0; data1=alaw2data(temp2); / U律解压 while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC) = data1; /将数据写入D/A转换器 /* 放音结束 */ brd_led_toggle(BRD_LED0); brd_led_toggle(BRD_LED1); /主程序结束 /* 子函数 */ /*延时*/void delay(s16 period) int i, j; f

29、or(i=0; iperiod; i+) for(j=0; j1; j+); /*闪灯*/void led(s16 cnt)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*/void initcodec(void) /* Open Handset Codec 获取设置codec的句柄*/ hHandset = codec_open(HANDS

30、ET_CODEC); / Acquire handle to codec /* Set codec parameters */ codec_dac_mode(hHandset, CODEC_DAC_15BIT); / DAC in 15-bit mode codec_adc_mode(hHandset, CODEC_ADC_15BIT); / ADC in 15-bit mode codec_ain_gain(hHandset, CODEC_AIN_6dB); / 6dB gain on analog input to ADC codec_aout_gain(hHandset, CODEC_A

31、OUT_MINUS_6dB); / -6dB gain on analog output from DAC codec_sample_rate(hHandset,SR_8000); / 8KHz sampling rate /*设置flash*/void flashenable(void)CPLD_CTRL2_REG|=0x0010;CPLD_DMCTRL_REG|=0x0040;/*U律扩展*/unsigned char data2alaw(s16 pcm_val) intmask;intseg;unsigned charaval;if (pcm_val = 0) mask = 0xD5;

32、/ 标记 (7th) bit = 1 else mask = 0x55; / 标记 bit = 0 pcm_val = -pcm_val;seg = search(pcm_val, seg_end, 8); if (seg = 8) / out of range, 返回最大数. return (0x7F mask);else aval = seg SEG_SHIFT;if (seg 1) & QUANT_MASK;elseaval |= (pcm_val seg) & QUANT_MASK;return (aval mask);/*alaw的子程序*/static int search(int

33、 val,short*table,int size)inti;for (i = 0; i size; i+) if (val = *table+)return (i);return (size);/*U律解压*/int alaw2data(unsigned chara_val)intt;intseg;a_val = 0x55; t = (a_val & QUANT_MASK) SEG_SHIFT;if(seg=0) t += 8; t=(t3);if(seg0) t +=0x108; t=(t(4-seg);if(seg3)t+=0x108;t=(t=(seg-4);return (a_val & SIGN_BIT) ? t : -t);/* 结束 */ 5 语音信号扩

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服