虚拟环绕立体声系统的与研究与dsp实现Word文件下载.docx
- 文档编号:16852704
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:9
- 大小:113.03KB
虚拟环绕立体声系统的与研究与dsp实现Word文件下载.docx
《虚拟环绕立体声系统的与研究与dsp实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《虚拟环绕立体声系统的与研究与dsp实现Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
Keyword:
virtualsurroundsoundDSPRTDX
1引言
虚拟环绕声的英文是VirtualSurround,也有叫SimulatedSurround,人们把这种技术称为非标准环绕声技术。
在环绕声的实现上,无论是杜比AC3还是DTS,都有一个特点,就是回放时需要多个音箱,但由于价格及空间方面的原因,有的使用者,如多媒体电脑的用户,并没有足够的音箱。
这时候就需要一种技术,能够把多声道的信号经过处理,在两个平行放置的音箱中回放出来,并且能够让人感觉到环绕声的效果,这就是虚拟环绕声技术[1]。
为了获得极高音质的音响效果,家庭放音设备是必不可少的。
然而,按照杜比定向逻辑环绕立体声的要求,影院系统至少需要五个扬声器、相应的功率放大器和杜比定向逻辑解码器,同时杜比AC.3对扬声器和功放的要求也是相当高的。
要购置一套这样的放音设备,不仅价格昂贵,而且对听音环境、校调技术的要求也是比较高。
因此,对于普通的家庭,这是可望而不可及的。
有没有能够利用较简单的设备也可以实现类似于杜比定向逻辑或杜比AC.3的听音效果呢?
虚拟环绕立体声技术能够解决这样的问题。
虚拟环绕立体声技术是在立体声增强技术(即3D空间增强)的基础上发展起来的,不仅具有立体声增强技术的空间感和包围感,还具有社比定向逻辑的声像定位效果,完全符合人们对家庭影院效果的要求,因此应用十分广泛。
相对于多声道环绕声系统,虚拟环绕声系统只需两个声道就可以实现环绕声的效果,这使得希望享受“家庭影院”的用户的愿望得以满足。
2TMS320VC5510简介
TMS320VC5510DSP是主频为200MHz的定点16-bitDSP,属于德州仪
器C55x系列。
性能方面,C55xCPU的内部总线结构包含l条程序总线,3条数据读总线,2条数据写总线和用于外围器件与DMA操作的总线;
2个17bitX17bit的乘累加器(MAc);
1个40bit的算术逻辑运算单元(ALu)和1个16bR的ALU,等等。
功能方面,C55xCPU包含4个主要单元:
指令缓冲单元(InstructionbufferUnit)、程序流单元(ProgramflowUnit)、地址数据流单元(Address-dataflowUnit)和数据计算单元(DatacomputationUnit)。
图1TMS320VC5510DSK硬件结构
另外,C5510有别于其它DSP的特征主要是包括1个160Kwords的快速片内存储器,3个多通道缓冲串行端口(Multi.channelbufferedserialports,MCBSPs),两个片上定时器和一个6通道直接内存访问(Directmemoryaccess,DMA)控制器和一个灵活的外部存储器接口(externalmemoryinterface,EMIF)。
因为C55x系列的成员都有相同的特征,所以很容易将C5510的开发软件应用于C55x系列的其它开发板,它们都是拥有5510资源的子集。
TMS320VC5510DSK的性能指标如表1所示。
[2]
表1TMS320VC5510DSP的性能指标
模块
指标
DSP
芯片型号
TMS320VC5510,BGA封装,240引脚
工作电压
I/O电压3.3V,核心电压1.6V
内部工作时钟
200MHZ(5ns)
计算能力
400MMACS
外部总线时钟
100MHz
音频
芯片信号
TLV320AIC23
音频输入
立体声或单声道输入
音频输出
立体声或单声道输出
音频带宽
48Khz带宽
音频采用速率
8khz-96khz
音频编码方式
16或32-btPCM编码
C5510有很多的内部存储器,可以将应用程序的代码和数据存放到片上。
但是,当C5510需要进行外部访问的时候,它会利用32bit的外部存储接口EMIF来进行外部存储器访问,这时EMIF可以设置为异步模式或者同步模式。
DSK包括一个外部非易失Flash芯片,用来存储启动程序,另外还有一个外部SDRAM,作为系统配置外部存储器的例子。
开发板上还有标准的11扩展总线(ExpansionBus),可以通过它在开发板上再添加其它的子卡。
DSK上有一个复杂的可编程逻辑器件CPLD)。
CPLD有4个可编程寄存器,是使用者与DSK板的接口。
通过它们来进行DSK的配置。
这4个寄存器用来访问板上的LED和DIP,以及控制子卡接口。
3虚拟环绕立体声原理简介
虚拟环绕声系统是根据心理听觉的特征,利用声源到双耳的传输函数HRTF对双通路立体声信号进行处理,通过双耳声信号来再现声源的空间信息。
这种系统只需要两个重放声道就可以再现环绕声的效果,与其它环绕声系统相比,环绕感强,动态范围大,还可在一定程度上改善节目源的信噪比,而且成本低。
虚拟环绕声系统的基础是听觉传输技术,即通过与头相关传递函数来实现声场空间信息的传输重发。
现在主要应用的是多通路虚拟环绕声系统。
这类系统多采用听觉传输技术中的虚拟声源的方法,通过HRTF的模拟,利用一对前方扬声器虚拟出部分扬声器,从而实现环绕声的效果。
值得一提的是,这类系统也存在听音域窄和声像前后倒置的缺陷。
[3]这类系统的代表有SRSTru—Surround.SpatializerN-N-2和Qsurround,等等。
图2通路环绕声系统的扬声器布置
图2所示为通路环绕声系统的扬声器布置,在通路重发中,前方左声道(L)、中置声(c)、右声道(R).以及左环绕(SL),右环绕(SR)五路独立信号分别馈给相应的五个扬声器进行重发。
在通路虚拟重发中五路信号经过处理,利用前方一对左右扬声器(L和R)进行重发,重发信号可以写为:
(1)
(2)
即E、R、c信号经过一定的衰减馈送给左右扬声器,gL、gI、gc是衰减因子,gt、勘分别表示对SL、Sn的虚拟处理,以产生前方范围的立体声声像分布,也可以对L、R、C信号进行与其相对应方位的HRTF处理后再利用扬声器重发。
对于SL、SR要经过相应的HRTF处理后再送到左右扬声器重发。
4系统的硬件设计
本系统的DSP实现中使用了中断机制,对音频信号进行采集并逐帧处理。
具体流程如图3所示。
AIC23采集音频PCM信号,并连续的送向与其相连的C5510的多通道缓冲串口(McBSP)。
MeBSPI用来控制AIC23内部配置寄存器,McBSP2是AIC23发送和接收音频采样数据的缓冲嚣,当到达的数据填满McBSP2的缓冲区后,系统将产生一个硬中断,把数据从McBSP2的缓冲区以DMA方式送到Pipe对象(PIP)中去,这一过程不会影响到系统主程序的运行。
这里的Pipe对象是一个缓冲区,这个缓冲区具有一定个数的数据帧(numframes),并且数据帧的长度(framesize)是一定的。
图3系统硬件框图
5系统软件实现
5.1实现音频信号的采集与处理
PIP的存储实体设在DSP的片内RAM中,设定PIP由两个缓冲区构成,一个数据发送缓冲区(pipTx),一个数据接收缓冲区(pipRx)。
初始时两个缓冲区的状态都为“空闲”,来自McBSP2的数据可以通过DMA方式连续地填入“空闲”的pipRx缓冲区。
当pipRx缓冲区被填满时,PlP管理模块将此缓冲区标为“写满”,同时发出一个软中断信号,通知CPU一帧数据已经采集完毕,可供处理。
CPU读出这帧数据后,PIP管理模块再将此pipRx缓冲区的状态置为“空闲”。
CPU处理完当前帧数据之后,将处理后的音频数据放入pipTx缓冲区通过DSK上的lineout或speakerout播放出来。
。
这一音频信号采集和处理的过程完全由触发的软中断服务程序DataProO来实现。
下面是其实现代码[5]:
VoidDataPro(Void)
{
Inti,size;
unsignedshort*src.*dst;
if(PIP_getReaderNumFrames(&
pipRx)<
=0
LOG_error(”echo:
Noreaderframe!
”,o);
//接收缓冲区pipRx是否有数//据
return;
}
if(PIP_getWriterNumFrames(&
pipTx)<
=0){
Nowriterframe!
”,0);
//发送缓冲区pipTx是否有数//据
PIP_get(&
pipRx);
//A接收缓冲区pipRx中读出一帧数据
src=PIP_getReaderAddr(&
//返回所读数据帧的起始地址
size=PIP_getReaderSize(&
pipRx)+sizeof(short);
//返回所读数据帧的有效字节//数
PIP_aUoc(&
pipTx);
//从发送缓冲区pipTx中获得一个空数据帧
dst=PiP_getWriterAddr(&
//返回所得数据帧的起始地址
for(i=0;
i<
size/2;
i++)
LeflDataln[i]=*sfc++;
RightDataIn[i]=*src++;
)
RevPr00;
//对接收数据帧进行定位与混响算法处理
*dst++=LeflDataOut[i];
*dst++=RightDataOut[i];
PIPsetWriterSize(&
pipTx,PIP_getReaderSize(&
pipRx));
//确认将要播放的数//据帧有效字节数
PIP_free(&
//释放数据接收缓冲区供下次数据采集之用
PIP_put(&
//发送已处理数据
5.2RIDX实现Host与Target端通信
图4Host端与Target端程序流程图
利用RTDX技术进行数据传输能够不打断Target上运行的程序,而且数据的传输速度非常快,这也是RTDX的优势所在。
本系统的DSP实现中,Host与Target端的通信流程示意图如图4。
这里我们实现了Host到Target的数据流。
对于Target端.首先使用RTDX_CreatelnputChannel()创建RTDX数据输入通道,同时定义RTDXreadFlag(初始值为0)变量记录当前是否有数据读取操作存在。
如果RTDXreadFlag为0,则表示数据通道现在没有数据读取操作,这时使用RTDX_readNB()函数从通道中读取一组参数,并将RTDXreadFlag置l。
此后Target端程序会继续运行,并根据所读取的参数处理一帧音频数据。
处理完后,继续判断RTDXreadFlag的值。
如果是l,那么就通过RTDX_channelBusy()函数查询通道是否忙碌来判断这组参数是否读取完毕,如果未完毕,那么等待一帧信号处理后继续查询{如果完毕,则表示已经成功接收本组参数。
值得注意的是,在此过程中,每进行一次读操作,都要关闭数据输入通道,直到下次读操作开始时再重新创建新的数据通道。
具体实现过程如下[6]:
voidGetRTDXDataO
intstatus;
if(RTDXreadFlag=0)
RTDX_enablelnput(&
ichan);
//使能数据输入通道
status=RTDX_readNB(&
ichan,RTDX_data,sizeof(RTDX_data)1∥将数//据读取到RTDX_data所指向的存储区
if(status!
-RTDX_OK)
printf(”ERROR:
RTDXreadNBfailed!
、n”);
//数据读取失//败
exit(-1);
RTDXreadFlag=1;
else
status=RTDX_ehannetBusy(&
∥查询数据输入通道是//否忙碌,返回0表示通道空闲,反之忙
if(statu=0)
status=RTDXsizeoflnput(&
if(status==sizeof(RTDX_data))
RTDXreadFlag=0//数据读取完毕,则对
//RTDXreadFlag清零
RTDX-disabIeInpup(&
ichan);
∥关闭数据输入通道
6结论
虚拟环绕立体声的研究涉及物理听觉、心理听觉、声学以及数字信号处理技术等众多研究领域。
本文在总结己有的研究成果的基础上,介绍了虚拟环绕立体声系统及其计算机仿真,并在DSP5510平台上实现了虚拟环绕立体声系统。
总的说来,本文搭建了虚拟环绕立体声的一个系统框架,取得了较好的效果,但是通过此算法实现的混响效果仍然不可避免地具有人工混响的特征,离真实的混响效果还有一定的差距,还需要改进。
参考文献
[1]J.Banck,D.H.Coppe,GeneralizedTranaauralStereoAnd
Application,J.A.E.S.,1996:
683-705
[2]Stereoenhancementsystem,PatentNo:
us04748669
[3]谢菠荪,多通路平面环绕声系统的研究,同济大学博士学位论文,1998.10
[4]张素卿,虚拟环绕立体声系统的研究与DSP实现,东南大学硕士学位论文,20070109:
40-51
[5]张承云,谢菠荪,谢志文,立体声耳机重发中头中定位效应的消除,电声技术,2000(8):
4-6
[6]王鑫,常京生,关于声源的定位,音响技术,2006
(1):
48-50
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟 环绕 立体声 系统 研究 dsp 实现