TMS320C54XDSP语音信号处理_语音信号处理与分析
TMS320C54XDSP语音信号处理由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“语音信号处理与分析”。
《TMS320C54XDSP语音信号处理》
DSP课程设计报告
学
号:
0906030430
班
级:
通信四班
姓
名:
唐溧
同组姓名:
蒋双福,梁嘉杰
指导教师:
徐淑芳
二〇一二 年
四 月
十四 日
目录
《TMS320C54XDSP语音信号处理》..........................................1 DSP课程设计报告......................................................................1 1.课程设计目的...........................................................................3 2.课程设计题目背景描述和要求...................................................3 3.课程设计报告内容....................................................................4 4.总结.........................................................................................9
1.课程设计目的会使用TI公司的CCS集成开发工具。
熟悉CCS的界面环境,会使用其Simulator仿真功能并能将程序载入到开发板在线调试。
通过CCS和DSP实验箱设计出语音处理程序,掌握DSPC54x芯片的汇编语法和芯片结构,了解串口的使用原理。
通过C程序和汇编的结合,达到语音的采集,转换,处理和输出的目的。调试程序,掌握调试的基本操作。
2.课程设计题目背景描述和要求
2.1 DSP语音处理过程
DSP能实时处理大量讯号、处理速度快且成本低,其高品质的表现结果成为数字信息产品的核心,而现阶段音频讯号透过DSP进行处理的依赖程度也就日益加深。由于人类可接收的声音源是模拟环境,(图一)是说明将输入的模拟讯号转为数字讯号,再将处理过的数字讯号转为模拟讯号过程。
《图一 DSP系统的语音处理方块图 》
2.2 DSP 语音处理的应用
DSP的应用领用相当广泛,在音讯上的工程技术包括回音消除、噪音抑制、语音处理(语音辨识、合成)、VOIP及声音压缩解压;在应用产品上有DVD/CD播放机、音响合成器、数字录音机、电子语音玩具、助听器与网络电话等。其中,音讯处理主要部份又可分为声音的处理及合成、音讯编码及语音辨识。
在音乐播放过程中,数字数据的呈现结果最重要是要防止在模拟储存和运作时所造成的音质损耗。均衡器能将不同频率范围的讯号分别滤出,然后再各别放
大或缩小处理,最后再合成,所以能补偿讯号的频率衰减,使音质回复原音,或者也能补偿输入的不足,使音质达到理想状态。由于人类的听觉系统在低频及高频的接收上灵敏度较差,透过均衡器强化或补足声音的功能,能弥补人们在听觉上的盲点。例如:将频率为100Hz的组成泛音放大,就会让声音中100Hz左右的低频部份听起来震撼一些,若觉得声音的低频部份不够明显,也可以用均衡器加以补足。像目前MP3播放器几乎都有均衡器的功能,使用者可选定或自定不同的播放音场(摇滚、爵士、流行音乐、抒情),充份表现出音乐的个性化。另外,变声器是透过声音处理技术改变原始的音源呈现,此种技术可广泛应用在电话上做安全过滤或者调整播放音调及速度后,达到语音学习的目的,成为高级语言学习机的必备功能。
2.3 课题工作
本课题探讨了DSP在语音处理方面的实现方法,包括语音的有效采集,采集的方法和注意事项。并深入研究了语音识别和变声和特殊效果的实现方法。
2.4 任务分工
梁嘉杰:负责程序编写
唐
溧:负责算法优化
蒋双福:负责资料查找、课程设计进度报告编写
3.课程设计报告内容 3.1 接口电路
C5402 有两个McBsp 多通道缓冲串行口,提供了全双工的通信机制和双缓存的发送寄存器和三缓存的接受寄存器,允许连续传输的数据流传输,数据长度可以为8,12,16,20,24,32,同时还提供了A律和μ律的压缩扩展。
语音的输入是通过自制的两头耳机线从手机输入到DSP的ADC。
3.2 语音采集
实验首先的工作是采集语音信号,由于有效语音的开始时间并不是程序启动的时间,如果在程序已启动就开始采集语音,那么将有相当一段的时间采集的是无效的数据,那么纪录的将是杂音,而设备的存储空间是有限(AIC10EVM.cmd 文
件中定义),开始我们想通过语音幅度的判断由程序自动判别有效采集是否开始。
在程序开始后,先用一段较短的时间重复采集语音信号,并统计他们的平均值,如果他们的平均值大于某个值,就认定有效信号已经开始产生。
将计数控制部分转移到C语言中,这样能够在程序中更加明确,录制内容的长短。
_READAD50将读取一次多通道缓冲串行口的数据。并存储到0x3000。_READAD50: stm 0x3000,ar2 loopa: CALL IfRxRDY1 ldm McBSP1_DRR1,b stl
b,*ar2+ 3.3 语音转存
Cmd文件中定义了app Data 从0x3200 开始,大小为12k。
我们取的长度为0x8000,存储的首地址从0x5000开始,这样能保证数据存储的地址在指定的范围内。
为了获取更合适的数据,可以在正式读取之前插入空周期或者重复多次采样过程。
在0x5000开始的数据空间内,存储了语音的信息。for(k=0;k
{
READAD50();
px =(int*)(0x3000);
x_ad = *px;
y_da = x_ad;
py =(int*)(0x5000+k);
*py = y_da;
k++;
}
3.4 重复播放
重复播放只需要将存储的语音信息读取出来,过程和读入是相反的。Write程序也是将0x3100的数据输出,所以只要一直更新数据就可以播放出完整的声音。
for(;;)
{
for(k=0;k
{
px =(int*)(0x5000+k);
x_ad = *px;
y_da = x_ad;
py =(int*)(0x3100);
*py = y_da;
WRITEAD50();
k++;
}
} 3.5 实验改进方向
程序的整个过程都只是简单的数据转存,但却得到了很好的效果,最后的实验确实达到了重复播放的效果,用同样的原理,还可以实现声音倒着播放,以及限定重放次数等效果。
3.6 附录
/*********************************************************************** ** File Name: AIC10EVM.cmd **********************************************************************/ MEMORY { PAGE 0: /* program space */ VECS: origin = 0x0080, length = 0x007f /* 128bytes vector table space */ PROG: origin = 0x0100, length = 0x24ff /* 8K program memory space */ PAGE 1: /* data space */ SCRA: origin = 0x0060, length = 0x001f /* scratch pad mem space */ STCK: origin = 0x2600, length = 0x04ff /* 1K words for stack */ DAT1: origin = 0x2b00, length = 0x04ff /* 256 words for sys data */ DAT2: origin = 0x3200, length = 0x0e00 /* 12K words for appl data */ }
SECTIONS
{.vectors : {} > VECS PAGE 0 /* interrupt vector table */.text : {} > PROG PAGE 0 /* program code */
.data : {} > PROG PAGE 0 /* initialized data */.coeffs : {} > PROG PAGE 0 /* initialized parameters */.stack : {} > STCK PAGE 1 /* software stack section */.variable : {} > DAT1 PAGE 1 /* uninitialized vars for DSP&AIC10 */.b : {} > DAT2 PAGE 1 /* uninitialized vars for applications */ } /*********************************************************************** ** End of File –– AIC10EVM.cmd ***********************************************************************/
InitC5402.asm 中部分
_READAD50: stm 0x00ff,ar3 stm 0x3000,ar2
loopa: CALL IfRxRDY1 ldm McBSP1_DRR1,b stl
b,*ar2+;
banz loopa,*ar3-
nop nop
ret nop nop
_WRITEAD50: ; stm 0x00ff,ar3 stm 0x3100,ar2 loopb: CALL IfTxRDY1
ldu *ar2+,B and
#0fffeh,b;mask the LSB stlm
B, McBSP1_DXR1;banz loopb,*ar3-nop nop ret nop
nop
wait:
stm 20h,ar3 loop1:
stm 020h,ar4 loop2: banz loop2,*ar4-banz loop1,*ar3-ret
nop nop nop nop
.end
InitC5402();/* initialize C5402 DSP */
OpenMcBSP();
for(i=0;i
{
for(k=0;k
{
READAD50();
px =(int*)(0x3000);
x_ad = *px;
y_da = x_ad;
py =(int*)(0x5000+k);
*py = y_da;
k++;
}
}
for(;;)
{
for(k=0;k
{
px =(int*)(0x5000+k);
x_ad = *px;
y_da = x_ad;
py =(int*)(0x3100);
*py = y_da;
WRITEAD50();
k++;
}
}
4.总结
程序的整个过程都只是简单的数据转存,但却得到了很好的效果,最后的实验确实达到了重复播放的效果,用同样的原理,还可以实现声音倒着播放,以及限定重放次数等效果。
参考文献
[1] 周发,尉宇 基于DSP 的语音处理的硬件和软件实现 船舰电子工程 2010年10 期 [2] 湖天 DSP音频处理程序设计 中国电子在线网TI设计应用C5000超低功耗http://www.daodoc.com/