陈淑瑜
(枣庄学院 机电工程学院,山东 枣庄 277160)
随着现场音乐与KTV等的发展,以及社交软件如微信,skype等的普及,人们对于语音信号处理的需求日益提高.与此同时,利用数字系统实现语音信号的各种处理,如语音变调,算法混响,语音识别,语音增强,语音合成等,比起曾经的模拟系统,数字系统对于信号的处理具有抗干扰能力强,实现简单,效果好等优势.随着数字信号处理技术与算法的发展[1,2],DSP数字信号处理专用芯片性能的提高[3],数字系统处理各种信号成为信号处理领域的首要选择.结合对于语音信号处理的需求以及数字信号处理的优点,本文使用数字信号处理技术实现了混响效果器,因为效果器对于实时性具有要求,所以采用了Ti的DSP芯片来作为系统的核心处理器.
AIC的管脚与内部框图如图1所示.
该系统需要同时完成音频的采集与播放的功能.为了采集音频,需要使AIC23进入AD工作状态,这就需要设置AIC23对应的内部寄存器,之后AD开始工作,将AD转换得到的数据传入McBSP,通过读取McBSP的数据就可以获得PCM编码的音频采样数据,最后将该数据存入SDRAM就完成了音频采集工作.
核心从SDRAM中读取音频数据,并且实现混响算法,并将处理后的数据写入McBSP.将AIC23对应的寄存器进行设置,就可以使其内部的DA开始工作.AIC23将McBSP中的数据读入DA转换得到模拟信号后经过功放完成音频的播放.
因为McBSP为多通道缓冲串口,所以数据之间是以流的形式传递.同时AIC23的AD与DA可以并行工作,结合这两种特性,系统可以在人耳难以察觉的时延(毫秒级)内完成对新输入音频数据的处理以及播放,因此可以称本系统为实时效果器.
图1 系统硬件框
当声波在一个相对狭小的空间内传播时,在碰到如墙壁,天花板,地板的障碍物时会发生反射,同时,声波也会被这些障碍物所吸收.所以,一个声源所发出的声音后,这些声音会在数次的反射与吸收后才会消失.对于室内的人来说,所有的声音会先后传入耳中,这种声学现象被称作混响.
在录音棚中,为了保持声音最原始的效果,会采用吸音材料来保证没有混响的产生,在录音结束后,通过软件来人为添加与调整混响效果.没有混响的声音被称作干音,添加混响后声音的音色会有大幅度的改善[4].
现在的软件混响的实现主要有两种.一种是卷积混响.该类混响通过在自然的建筑中播放扫频信号进行采样,然后将采样所得信号与音频信号进行卷积来达到混响的效果.该类混响效果的实现具有自然的优点,但是对于采样的要求较高且无法根据需要进行调整.
另一种是算法混响.该效果通过模拟声波的反射与吸收来实现.该实现方法实现简单且效果可调和成本较低等优点[5].
2.2.1 算法介绍
本文选择使用算法混响的方法来实现混响效果器.自然界的混响效果主要由反射物的材质和声源与反射物之间的距离来决定.在数学意义上,这两点决定了声音的时延时间与吸收系数.
其中n决定了反射面的个数,时延参数决定了反射面与声源的距离,m决定了反射次数,决定了材料对于声音的吸收.
通过调整以上三个参数,可以改变卷积效果,可以调整空间的大小,改变可以改变混响的材料.通过以上参数的共同作用可以实现诸如在水中,浴室内,音乐厅,报告厅等不同场景的混响效果.
图2 算法实现框图
2.2.2 算法仿真
图3 延时器仿真波形
假设输入函数为
图4 输入函数图
设置n为2,m为3,t0=1,t1=0.5则输出波形为
该部分主要需要设置AIC23的状态即其内部的寄存器.在初始化中需要关注的寄存器是5号寄存器与9号寄存器.因为本设计是从mac口采集数据,所以要将5号寄存器的值设置为0x0015采样率选择使用32kHZ,所以9号寄存器设置为0x0019;所以config结构体的最终参数为
图5 输入波形图
#define DSK6416_AIC23_DEFAULTCONFIG {
0x0017, 0x0017,
0x00d8,
0x00d8, 0x0015,
0x0000,
0x0000,
0x0043,
0x0019,
0x0001
}
MCBSP_config(DSK6416_AIC23_DATAHANDLE,&AIC23CfgData); MCBSP_start(DSK6416_AIC23_DATAHANDLE, MCBSP_XMIT_START | MCBSP_RCV_START |
MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, 220);
之后调用的三个库函数是初始化DSP与AIC23传递数据的通道McBSP.至此初始化工作完毕.
主要通过一下两个库函数来实现
MCBSP_write(DSK6416_AIC23_DATAHANDLE,AIC_data.uint)
MCBSP_read(DSK6416_AIC23_DATAHANDLE)
AIC_data结构体的定义为
union {
Uint32 uint;
short channel[2];
} AIC_data;
左声道占用前16位,右声道占用后16位,所以采用一个联合体共用一个内存空间来实现.MCBSP_write的功能是向MCBSP写入数据也就是向AIC23的DA转换器写入数据来达到输出的目的.MCBSP_read的功能是读入MCBSP的数据,也就是读AIC23的AD转换器获得的采样值,该函数返回一个无符号32位整型数据.将这两个函数进行封装使数据分别写入前16位或者后16位或者整个32位,来实现左声道输入输出,右声道输入输出,和双声道输入输出.封装后的函数为
void output_sample(Uint32);
void output_left_sample(short);
void output_right_sample(short);
Uint32 input_sample();
short input_left_sample();
short input_right_sample();
所以录音的实现为:
while(设置条件)
{
buffer[i++]=input_sample();
}
播放的实现为:
while(设置条件)
{
output_sample(buffer[i++]);
}
本文从混响的原理出发,重点对混响算法的设计进行了阐述并在matlab上对多种语音信号进行了仿真与实验.并且在TMS320C6416上搭建了相关电路与程序编写,完成了整机的测试与设计.通过测试可以实现实时的混响效果且声音清晰,并且可以通过改变参数完成不同材质不同空间的混响效果.其在演唱会现场或者报告厅具有实用意义.
[1]段文斌.对数字信号处理技术的应用和发展的探讨[J].电子测试,2017(6).
[2]陈文灵.数字信号处理技术的发展及其思考[J].电子技术与软件工程没,2015(1).
[3]李鑫.浅谈数字信号处理器DSP的发展和应用[J].硅谷,2008(14).
[4]杨晓晔.浅谈人工延时和人工混响在录音中的作用[J].内蒙古广播与电视技术,1998(2).
[5]陈伟,汤乐民,王伟,等.基于数字信号处理技术的人工混响模型设计和研究[J].广西师范大学学报(自然科学版).2015(3).