为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于虚拟环绕声的音频处理器设计技术报告

2017-10-06 44页 doc 361KB 22阅读

用户头像

is_963767

暂无简介

举报
基于虚拟环绕声的音频处理器设计技术报告基于虚拟环绕声的音频处理器设计技术报告 中南民族大学学术论文 第三届OpenHW开源硬件与嵌入式大赛 中南民族大学 2012年3月 1 基于虚拟环绕声的音频处理器 摘要 虚拟听觉空间(VAS)是一门新兴的边缘交叉学科,涉及听觉心理学、听觉生理学、多传感器集成与融合、人工智能、并行计算和高性能计算机系统等多个研究领域。VAS有时也称为虚拟听觉显示(Virtual Auditory Display)、三维声再现系统(3D Sound Rendering/Reproducing System)、虚拟声再现系统(Vi...
基于虚拟环绕声的音频处理器设计技术报告
基于虚拟环绕声的音频处理器技术 中南民族大学学术论文 第三届OpenHW开源硬件与嵌入式大赛 中南民族大学 2012年3月 1 基于虚拟环绕声的音频处理器 摘要 虚拟听觉空间(VAS)是一门新兴的边缘交叉学科,涉及听觉心理学、听觉生理学、多传感器集成与融合、人工智能、并行计算和高性能计算机系统等多个研究领域。VAS有时也称为虚拟听觉显示(Virtual Auditory Display)、三维声再现系统(3D Sound Rendering/Reproducing System)、虚拟声再现系统(Virtual Sound Rendering/Reproducing System)、空间声音再现系统(Spatial Sound Rendering System)、虚拟空间/三维听觉系统(Virtual Spatial/(3D)Auditory Systems)、声音空间化系统(Sound Spatialization System )和双耳技术(Binaural Technology)等,是通过对双耳的声音信号进行捡拾、模拟和重放,让倾听者在虚拟环境中听到的声信号逼近在真实环境声场中听到的声信号,因而在电影院、家庭影院中得到了很好的应用[15]。其中多通路环绕声经过许多年的发展,也获得了很好的效果,也先后出现了5.1、6.1、7.1甚至10.2通路的环绕声系统,而且5.1通路环绕声系统也为国际电信联盟(ITU)所推荐[2]。 此外,为了适应音频的播放,特构建了一款音频DSP处理器以适应本系统。 虚拟环绕声技术是区别于多通道环绕声技术的另一类声重放系统,它利用声源到双耳的传递函数(HRTF)通过双耳(即空间两点)声信号的传输与重放,实现声音空间信息的传输与重放,这种系统只需两路独立的传输信号和重放扬声器(或耳 机),因而在一些不便于安装多通道放声系统的环境下,对改善电视机、手机、MP3/MP4等等电子产品的音频声效有很大的帮助。 关键字:相关传递函数 虚拟环绕声 5.1通路 ABSTRACT 2 中南民族大学学术论文 Virtual hearing is a new space on the edge of the cross subject, involving hearing psychology, hearing multi-sensor integration and fusion, artificial intelligence, parallel computing and high performance computer systems, and other research field. Virtual hearing space sometimes called virtual hearing display, 3 D sound representation system, virtual sound representation systems, space sound representation systems, virtual space 3D auditory system, voice of space systems and ears technology, is through the ears voice signal collecting, simulation and replay, let the listener in the virtual environment heard the acoustic signal of the approaching in the real environment field hear acoustic signal, so in the cinema, home theater has found applications. More than one channel surround sound after many years of development, and also have the very good, also has appeared 5.1, 6.1, 7.1 or 10.2 channel surround system, and 5.1 channel surround system also for the international telecommunications union (ITU) recommendation. In addition, in order to adapt to the audio playback, especially the construction a audio DSP processors to adapt to the system. Virtual surround sound technology is different from multi-channel surround-sound technology another kind of sound replay system, it uses sound to the ears of the transfer function (HRTF) through the ears (i.e. space two) acoustic signal transmission and replay, achieves voice space information transmission and replay, the system only two road independent transmission signal and replay the speaker (or headset), so in some not for easy installation multi-channel laughed system environment, to improve television, mobile phones, MP3 / MP4 and so on electronic products audio sound effects, which are of great help. Keyword: Related transfer function ;virtual surround sound ;5.1 pathways 目录 3 基于虚拟环绕声的音频处理器 摘要........................................................................2 ABSTRACT...........................................................3 第一章 虚拟环绕声原理介绍..........................................5 本系统的基本组成............................................10 第二章 第三章 系统具体的实现..............................................18 总结...............................................................35 致谢...............................................................36 参考文献...........................................................37 附录...............................................................39 第一章 虚拟环绕声原理介绍 由于虚拟环绕是以人耳的声源定位为基础的,故在此主要对人耳的声源定位 予以介绍。心理声学的基本要素是到达人耳的声音的频率、强度和谱结构。以下 4 中南民族大学学术论文 将进一步讨论基于心理声学的声源定位、距离感知及包围感等。 1、人耳对声源的定位 在自然听音中,人的听觉系统对声源的定位取决于多个因素——双耳接收到的信号差异用来决定声源的水平位置,由外耳对高频信号的反射所引起的耳郭效应决定声源的垂直位置,而人耳的某些心理声学特性对于声源的定位也起到很大的作用。 2、双耳效应 在自然听音环境中,双耳信号之间的差异对于声源的定位是非常重要的。该因素可以在直达声场的听音环境中得到最好解释,如图1所示。 图1 声源S与镜像声源S′引入最大程度相似的双耳因素 声源位于水平面上,水平方位角为θ,与人头中心的距离为r,到达左右耳的距离分别为SL和SR。由于SL>SR,声音首先到达右耳,从而在到达双耳的时间先 后上形成时间差。这种时间差被定义为双耳时间差(interaural time difference,ITD),它与声源的水平方位角θ有关。当θ = 0?时, = 0;当θ = ?90?时,达到最大值,对一般人头来说,为0.6,0.7ms 的数量级。 在低中频(f <1.5kHz)情况下,双耳时间差是定位的主要因素,这时对固定频率的声音,双耳时间差与双耳相位差是相对应的。然而对于更高的频率,虽然 5 基于虚拟环绕声的音频处理器 双耳时间差的概念依然正确,但双耳相位差的概念将变得模糊不清。以正弦声音为例来进行解释,设双耳时间差的最大值为Δt,则角频率为ω的正弦声音在左、max 右两耳产生的相位差为ΔΦ = ωΔt。可以看出,当ω较小时,声音频率较低,max 波长较长,由时间差所造成的相位差有确定的意义,双耳可以根据它来判定声源的方位;当ω较大时,即声音频率较高、波长较短时,由时间差所形成的相位差数值将较大,甚至会超过180?,使人不能判断是超前还是滞后,因而失去了作为声源定位因素的意义。所以双耳相位差只对低频声的方位判断起主要作用,而双耳时间差(严格说是群延时)则可作为1.5,4.0kHz的一个定位因素。 另外一方面,人头对入射声波起到了阻碍作用,导致了两耳信号间的声级差(interaural intensity difference,IID)。声级差除与入射声波的水平方位角有关外,还与入射声波的频率有关。在低频时,声音波长大于人头尺寸,声音可以绕射过人头而使双耳信号没有明显的声级差。随着频率的增加,波长越来越短,头部对声波产生的阻碍越来越大,使得双耳信号间的声级差越来越明显——这就是我们常说的人头遮蔽效应。对于1.5,4.0kHz的频率范围来说,声级差和时间差是声源定位的共同因素,而当f > 5.0kHz时,双耳声级差是定位的主要因素,与时间差形成互补。总的来说,双耳时间差和声级差涵盖了整个声音频率范围。 但是如果只考虑双耳时间差和声级差两个因素,还不足以完全解释定位问,其中最典型的问题就是前后镜像声源的定位。假设人头是一个球体,不存在外耳,如图2所示,水平方位角为θ的声源和水平方位角为180?.θ的镜像声源在人耳处会产生相同的IID和ITD。对于实际的人头来说,虽然IID和ITD不会完全相同,但是它们会在很大程度上相似。当只考虑双耳时间差和声级差时,就会产生前后镜像声源的混淆,其实这只是空间锥形区域声像混淆(cones of confusion)的一种特例。为了解决这个问题,就要依赖于其他的因素进行声源定位了。 图2 空间锥形区域声像混淆 6 中南民族大学学术论文 3、耳郭效应 在听觉系统中用于对声源进行垂直定位的因素通常被认为是“单耳信号”。耳郭具有不规则的形状,形成一个共振腔。当声波到达耳郭时,一部分声波直接进入耳道,另一部分则经过耳郭反射后才进入耳道。由于声音到达的方向不同,反射声和直达声之间强度比不仅发生变化,而且反射声与直达声之间在不同频率上产生不同的时间差和相位差,使反射声与直达声在鼓膜处形成一种与声源方向位置有关的频谱特性,听觉神经据此判断声音的空间方向。耳郭效应的本质就是改变不同空间方向声音的频谱特性,也就是说人类听觉系统功能上相当于梳状滤波器,将不同空间方向的声音进行不同的滤波。 频谱特性的改变主要是针对于高频信号,由于高频信号波长短,经耳郭折向耳道的各个反射波之间会出现同相相加、反相相减,甚至相互抵消的干涉现象,形成频谱上的峰谷,也即耳郭对高频声波起到了梳状滤波作用。 耳郭效应对声源的垂直定位起到很重要的作用。图3显示的是声源位于中垂面,仰角φ分别为.10?、0?和10?在人头模型上测得的耳郭响应曲线。由图可以看出,在高频处响应曲线变化比较大,因此可以对声源进行定位。例如对位于前后镜像的声源进行定位时,虽然位于(r , θ , φ)的声源和位于(r , 180?.θ , φ)的镜像声源会在人耳处产生极相似的ITD和IID,但是可以通过耳郭效应对声源作精确定位。 7 基于虚拟环绕声的音频处理器 图3 人头模型测量的耳郭效应 耳郭效应进行声音定位,主要是将每次接收到的声音与过去存储在大脑里的重复声排列或梳状波动记忆进行比较,然后判断定位。因每个人耳郭尺寸不同,所以每个人在大脑中存储的记忆是不同的,这一点应引起注意。 4、人头转动因素 如图4所示在低频或较差的听音环境中,当双耳效应和耳郭效应对声源的定位不能给出明确的信息时,听音者会转动头部来消除不确定性。最经常使用这种方法的情况是出现空间锥形区域声像混淆现象时,因为这样会造成不确定的双耳效应。 8 中南民族大学学术论文 图4 头部转动避免声源位置前后混淆 5、 优先效应 声音的定位除了以上因素外还有其他因素。在混响环境中,优先效应起到重要作用。它是心理声学的特性之一。所谓的优先效应是指当同一声源的直达声和反射声被人耳听到时,听音者会将声源定位在直达声传来的方向上,因为直达声会首先到达人耳处,即使反射声的强度比直达声高达10dB。因此,声源可以在空间中进行正确的定位,而与来自不同方向的反射声无关。但是优先效应不会完全消除反射声的影响。反射声可以增加声音的空间感和响度感。 当优先效应用在混响环境中识别语音时,就产生了哈斯效应(Haas effect)。哈斯观察到,只要早期反射声到达人耳足够早就不会影响语音的识别,相反,由于增加了语音的强度,还会有利于语音的识别。而且哈斯发现,相对于音乐来说,语音对反射延时时间和混响的变化更为敏感。对于语言声来说,只有滞后直达声50ms以上的延迟声才会对语音的识别造成影响。所以50ms被称为哈斯效应的最大 9 基于虚拟环绕声的音频处理器 延时量。在哈斯的平衡实验证明,当延时为10,20ms时,先导声会对滞后声有最大程度的抑制。 第二章 本系统的基本组成 1、总体框图 大致如图5所示, 虚拟环绕声 音源 DSP音频处理器 DAC还原 其它新的功能 图5系统总体框图 DSP音频处理器是本系统的核心,负责音频解码,信号叠加等处理。虚拟环绕声模块,负责针对音频信号产生虚拟的环绕声音频效果。DAC负责还原出音频信号。在这些基本功能的础基上,实现诸如音频检索等新功能。 10 中南民族大学学术论文 2、 左后ls和右后环绕声生成器 左后ls和右后环绕声生成器内部结构 图6 左后ls和右后环绕声生成器内部框图 图7 左后ls和右后环绕声生成器原理图 经过研究我们发现,当左后和右后的两个声像在同一水平角度时,倾听者的声像刚好再在中间的位置,因此没有环绕声的效果。因此我们做了这个专门处理 11 基于虚拟环绕声的音频处理器 左后和右后的音频处理装置(如图6所示)。当左后的声源角度为240时(如图7所示),该声源与右后的135和150两声源之一叠加。以此类推,最后将说有声音叠加,形成环绕声的效果。 3、DSP音频处理器及虚拟环绕声处理器 DSP音频处理器及虚拟环绕声处理器内部构成 图8 环绕声生成及音频信号处理内部框图 我们系统的核心部分大致如图8所示,从sd卡读出的数据流有音频解码等处理,得到5.1个声道。 4、外设部分 NEXYS3开发板的外设接口如图9所示 12 中南民族大学学术论文 图9 开发板外设接口图 本项目的两个外设接口均采用了Pmod Port Expansion,PmodSD模块采用了12针进行衔接,CS4344采用了6针与开发板相衔接。 NEXYS3用来处理复杂的音频相关的计算问题,大概的处理过程就是从SD卡中选择合适的采用率读出音频数据,然后将数据放于开发板的缓存中,使用核心音频处理IP,进行音频数据处理,然后将数据通过CS4344将预先设想的声音给还原出来。 13 基于虚拟环绕声的音频处理器 开发板上4块Pmod Port Expansion的图示如下 图10 Pmod Port Expansion 每一块Pmod Port Expansion 12针的图示 14 中南民族大学学术论文 图11 Pmod 12个端口 PmodSD模块,它拥有两排六列的接触头和一个SD卡卡槽,它方便了SD卡和开发板的衔接。SD卡与开发板的通信是依靠那12个触头实现的。本项目是采用的SD卡的SPI协议驱动的,SPI协议简单,使用的引脚也比较少,只需要SS,MOSI,MISO,SCK。 图12 PmodSD的工作原理图 15 基于虚拟环绕声的音频处理器 自制音频接口的组成是: IC:CS4344, 电阻470欧姆2个,10K欧姆2个,0805封装 0.1uF电容,2个,0805封装, 3.3uF 3个 0805封装, 10uF 1个 B型装装, 2500 uH电感 ,个 0805封装, 耳机插座。 图13 音频接口原理图 图14 自制立体声音频接口图 16 中南民族大学学术论文 第三章 系统具体的实现 1、基于SPI的SD卡 FatFS是一个为FPGA系统设计的通用文件系统模块。对FatFs 的程序编写遵守ANSI C,并且完全与磁盘I/O层分开。因此,它并不依赖于当前的硬件架构。它可以嵌入到FPGA的微控制器中。 图15 FatFS原理图 17 基于虚拟环绕声的音频处理器 添加的SPI核: (1)axi_spi (2)spi_cntrl_reg (3)spi_core_interface (4)spi_fifo_ifmodule (5)spi_occupancy_reg (6)spi_receive_transmit_reg (7)spi_status_slave_sel_reg SDK spi接口函数 1.void XSpi_Abort(XSpi *InstancePtr); //在控制寄存器中设置停止位 2. int XSpi_CfgInitialize(XSpi *InstancePtr, XSpi_Config *Config, u32 EffectiveAddr) //初始化spi 3. int XSpi_Start(XSpi *InstancePtr) //使中断 4. int XSpi_Stop(XSpi *InstancePtr) //禁止中断 5. void XSpi_Reset(XSpi *InstancePtr) //重置 6. int XSpi_Transfer(XSpi *InstancePtr, u8 *SendBufPtr, u8 *RecvBufPtr, unsigned int ByteCount) //传输数据 7. int XSpi_SetSlaveSelect(XSpi *InstancePtr, u32 SlaveMask) //选择通信的从设 8. u32 XSpi_GetSlaveSelect(XSpi *InstancePtr) //获取当前通信从设的标识 9. void XSpi_SetStatusHandler(XSpi *InstancePtr, void *CallBackRef, XSpi_StatusHandler FuncPtr) //设置状态返回函数 10. void XSpi_SetStatusHandler(XSpi *InstancePtr, void *CallBackRef, XSpi_StatusHandler FuncPtr) //保存状态返回 11. void XSpi_InterruptHandler(void *InstancePtr) //中断进程 12. void XSpi_Abort(XSpi *InstancePtr) //异常终止 1.1.应用接口 (1)f_mount 在FatFs模块上注册/注销一个工作区(文件系统对象) FRESULT f_mount ( BYTE Drive, /* 逻辑驱动器号 */ FATFS* FileSystemObject /* 工作区指针 */ ); 18 中南民族大学学术论文 (2)f_open 创建/打开一个用于访问文件的文件对象 FRESULT f_open ( FIL* FileObject, /* 空白文件对象结构指针 */ const XCHAR* FileName, /* 文件名指针 */ BYTE ModeFlags /* 模式标志 */ ); 一 文件的访问类型和打开方法 模式 描述 指定读访问对象。可以从文件中读取数据。 FA_READ 与FA_WRITE结合可以进行读写访问。 指定写访问对象。可以向文件中写入数据。 FA_WRITE 与FA_READ结合可以进行读写访问。 FA_OPEN_EXISTI打开文件。如果文件不存在,则打开失败。(默认) NG FA_OPEN_ALWA如果文件存在,则打开;否则,创建一个新文件。 YS FA_CREATE_NE创建一个新文件。如果文件已存在,则创建失败。 W FA_CREATE_AL创建一个新文件。如果文件已存在,则它将被截断并 WAYS 覆盖。 注意:当 _FS_READONLY == 1 时,模式标志 FA_WRITE, FA_CREATE_ALWAYS, FA_CREATE_NEW, FA_OPEN_ALWAYS 是无 效的。 (3) f_close 关闭文件 FRESULT f_close ( FIL* FileObject /* 文件对象结构的指针 */ 19 基于虚拟环绕声的音频处理器 ); (4)f_read 读取数据 FRESULT f_read ( FIL* FileObject, /* 文件对象结构的指针 */ void* Buffer, /* 存储读取数据的缓冲区的指针 */ UINT ByteToRead, /* 要读取的字节数 */ UINT* ByteRead /* 返回已读取字节数变量的指针 */ ); (5) f_write 写入数据 FRESULT f_write ( FIL* FileObject, /* 文件对象结构的指针 */ const void* Buffer, /* 存储写入数据的缓冲区的指针 */ UINT ByteToWrite, /* 要写入的字节数 */ UINT* ByteWritten /* 返回已写入字节数变量的指针 */ ); (6)f_lseek 移动一个打开的文件对象的文件读/写指针。也可以被用来扩展文件大小(簇预分 配)。 FRESULT f_lseek ( FIL* FileObject, /* 文件对象结构指针 */ DWORD Offset /* 文件字节偏移 */ ); (7) f_truncate 截断文件大小 FRESULT f_truncate ( FIL* FileObject /* 文件对象结构指针 */ ); 20 中南民族大学学术论文 (8)f_sync 冲洗一个写文件的缓存信息 FRESULT f_sync ( FIL* FileObject /* 文件对象结构的指针 */ ); (9) f_opendir 打开一个目录 FRESULT f_opendir ( DIR* DirObject, /* 空白目录对象结构的指针 */ const XCHAR* DirName /* 目录名的指针 */ ); (10)f_readdir 读取目录项 FRESULT f_readdir ( DIR* DirObject, /* 指向打开的目录对象结构的指针 */ FILINFO* FileInfo /* 指向文件信息结构的指针 */ ); (11)f_getfree 获取空闲簇的数目 FRESULT f_getfree ( const XCHAR* Path, /* 驱动器的根目录 */ DWORD* Clusters, /* 存储空闲簇数目变量的指针 */ FATFS** FileSystemObject /* 文件系统对象指针的指针 */ ); (12)f_stat 获取文件状态 FRESULT f_stat ( const XCHAR* FileName, /* 文件名或目录名的指针 */ 21 基于虚拟环绕声的音频处理器 FILINFO* FileInfo /* FILINFO结构的指针 */ ); (13)f_mkdir 创建一个目录 FRESULT f_mkdir ( const XCHAR* DirName /* 目录名的指针 */ ); (14)f_unlink 移除一个对象 FRESULT f_unlink ( const XCHAR* FileName /* 对象名的指针 */ ); (15) f_chmod 修改一个文件或目录的属性。 FRESULT f_chmod ( const XCHAR* FileName, /* 文件或目录的指针 */ BYTE Attribute, /* 属性标志 */ BYTE AttributeMask /* 属性掩码 */ ); 表二 文件属性表 属性 描述 AM_RDO 只读 AM_ARC 存档 AM_SYS 系统 AM_HID 隐藏 22 中南民族大学学术论文 (16) f_utime f_utime函数修改一个文件或目录的时间戳。 FRESULT f_utime ( const XCHAR* FileName, /* 文件或目录路径的指针 */ const FILINFO* TimeDate /* 待设置的时间和日期 */ ); (17)f_rename 重命名一个对象。 FRESULT f_rename ( const XCHAR* OldName, /* 原对象名的指针 */ const XCHAR* NewName /* 新对象名的指针 */ ); (18)f_mkfs 在驱动器上创建一个文件系统 FRESULT f_mkfs ( BYTE Drive, /* 逻辑驱动器号 */ BYTE PartitioningRule, /* 分区规则 */ WORD AllocSize /* 分配单元大小 */ ); (19)f_forward 读取文件数据并将其转发到数据流设备。 FRESULT f_forward ( FIL* FileObject, /* 文件对象 */ UINT (*Func)(const BYTE*,UINT), /* 数据流函数 */ UINT ByteToFwd, /* 要转发的字节数 */ UINT* ByteFwd /* 已转发的字节数 */ ); 23 基于虚拟环绕声的音频处理器 (20)f_chdir f_chdir函数改变一个驱动器的当前目录。 FRESULT f_chdir ( const XCHAR* Path /* 路径名的指针 */ ); 21) f_chdrive ( f_chdrive函数改变当前驱动器。 FRESULT f_chdrive ( BYTE Drive /* 逻辑驱动器号 */ ); (22) f_gets f_gets从文件中读取一个字符串。 char* f_gets ( char* Str, /* 读缓冲区 */ int Size, /* 读缓冲区大小 */ FIL* FileObject /* 文件对象 */ ); (23) f_putc f_putc函数向文件中写入一个字符。 int f_putc ( int Chr, /* 字符 */ FIL* FileObject /* 文件对象 */ ); (24)f_puts f_puts函数向文件中写入一个字符串。 int f_puts ( const char* Str, /* 字符串指针 */ FIL* FileObject /* 文件对象指针 */ 24 中南民族大学学术论文 ); (25) f_printf f_printf函数向文件中写入一个格式化字符串。 int f_printf ( FIL* FileObject, /* 文件对象指针 */ const char* Foramt, /* 格式化字符串指针 */ ... ); 1.2.磁盘I/O接口 由于FatFs模块完全与磁盘I/O层分开,因此底层磁盘I/O需要下列函数去 读/写物理磁盘以及获取当前时间。由于底层磁盘I/O模块并不是FatFs的一部分, 因此它必须由用户提供。 (1)disk_initialize 初始化磁盘驱动器 DSTATUS disk_initialize ( BYTE Drive /* 物理驱动器号 */ ); (2)disk_status 获取当前磁盘的状态 DSTATUS disk_status ( BYTE Drive /* 物理驱动器号*/ ); 25 基于虚拟环绕声的音频处理器 (3)disk_read 从磁盘驱动器中读取扇区 DRESULT disk_read ( BYTE Drive, /* 物理驱动器号 */ BYTE* Buffer, /* 读取数据缓冲区的指针 */ DWORD SectorNumber, /* 起始扇区号 */ BYTE SectorCount /* 要读取的扇区数 */ ); (4)disk_write 向磁盘驱动器中写入扇区 DRESULT disk_write ( BYTE Drive, /* 物理驱动器号 */ const BYTE* Buffer, /* 写入数据缓冲区的指针(可能未对齐) */ DWORD SectorNumber, /* 起始扇区号 */ BYTE SectorCount /* 要写入的扇区数 */ ); (5)disk_ioctl 控制设备特定的功能以及磁盘读写以外的其它功能。 DRESULT disk_ioctl ( BYTE Drive, /* 驱动器号 */ BYTE Command, /* 控制命令代码 */ void* Buffer /* 数据传输缓冲区 */ ); 表三 磁盘命令 命令 描述 确保磁盘驱动器已经完成等待写过程。当磁盘I/O模块有一 CTRL_SYNC 个写回高速缓存时,立即冲洗脏扇区。在只读配置中,不需 要该命令。 26 中南民族大学学术论文 GET_SECTOR_SI返回驱动器的扇区大小赋给Buffer指向的WORD变量。在单 ZE 个扇区大小配置中(_MAX_SS 为 512),不需要该命令。 GET_SECTOR_C返回总扇区数赋给Buffer指向的DWORD变量。只在f_mkfs OUNT 函数中,使用了该命令。 返回以扇区为单位的存储阵列的擦除块大小赋给Buffer指向GET_BLOCK_SIZ的DWORD变量。当擦除块大小未知或是磁盘设备时,返回E 1。只在f_mkfs函数中,使用了该命令。 (6)get_fattime 获取当前时间 2、卷积部分 2.1 卷积方法 y(n)=x(n)h(n)的卷积可以通过以下几步来实现: , A.求H(k)=DFT[h(n)]; B.求X(k)=DFT[x(n)]; ,C.计算Y(k)=H(k)X(k); D.y(k)=IDFT[Y(k)]; 具体的卷积过程,我们采用分段卷积的方法来实现快速卷积。将x(n)分为多个x(n)(i>1),并对各段的x做如下的处理: ii A.与前一数据帧的N-1点取点,其中对第一帧的数据前加上N-1个0,做N1点hhFFT得到X(k); i B.在h(n)后补0到长度N11,做N点的FFT得到H(k); C.求Y(k)=H(k)*X(k); ii D.将Y(k)做IFFT得到y(n)。 ii 27 基于虚拟环绕声的音频处理器 E.将y(n)后的(N-N+1)个点作为该段卷积输出。 1hi 通过该分段的方法,计算两个数据的卷积只需要一次FFT变换和一次IFFT变换,比分开计算一次FFT变换和两次IFFT变换,减少了1/3的运算量,并且并不需要额外的内存空间。 2.2 接口说明 输入端口: CLK:采用10MHZ 的时钟。 Reset:复位信号。 start:因为RAM 的空间是有限的,当RAM 存满后采样和卷积都会停止。此时给一个start 的高电平脉冲将会开始下一次的卷积。 nbusy:从A/D 转换器来的信号表示转换器的忙或闲。 Indata:从A/D 转换器来的数据总线。 输出端口: wr:RAM 写控制信号。 enout1,enout2:enout1 是存储卷积低字节结果RAM 的片选信号;enout2 是存储卷积高字节结果RAM 的片选信号。 nconvst:给A/D 转换器的控制信号,命令转换器开始工作,低电平有效。 address:地址输出。 outdata:写到RAM 去的数据总线。 28 中南民族大学学术论文 图16 HRIR数据库的MATLAB显示界面 参数: hrir1,hrir2,hrir3:系统参数,即与语音信号发生卷积的参数,来自于加州大学戴维斯分校图像处理和集成计算中心(CIPIC)。 一点对比中:选取了HRTF数据库中1个点。取点(1,1)a=-80 e=-45 (水平角,方位角)。 多点对比中:选取了HRTF数据库中10个点。取点(1,1)(3,1) (6,1) (9,1) (12,1) (14,1) (17,1) (20,1) (23,1) (15,1) 10个点(水平角,方位角)。 2.3 仿真结果 29 基于虚拟环绕声的音频处理器 图17 卷积仿真结果 3、音频接口及I2C总线协议 3.1 音频接口 对于虚拟环绕声的播放问题,我们使用了一个音频立体声接口,该接口中,我们主要使用了IC:CS4344音频芯片,该音频芯片的接口如图18。 30 中南民族大学学术论文 图18 音频接口管脚图 其中,各管教的用途如下: SDIN:用于音频信号的输入; DSM/SCLK:时钟信号的输入; LRCK:左右时钟输入; MCLK::主时钟输入; VQ:静态电压 AOUTR:右声道模拟信号输出 GND:接地 AOUTL:左声道模拟信号输出 FILT+:正基准电压 图19 音频接口原理图 31 基于虚拟环绕声的音频处理器 3.2 I2C总线协议 I2C总线系统由两根总线即SCL(串行时钟)线和SDA(串行数据)线构成。这种总线可以设计成很多种通讯配置,但本文只讨论主从系统的应用。主器件控制总线通讯,开始,结束传送、发送信息并产生I2C系统时钟。在写操作过程中,从器件一旦被主控器件寻址,就执行特定的相应功能。在读操作过程中,主控器件从从器件那里获得数据。在整个主从传送过程中,所有的事件都通过主控器件的SCL时钟线达到同步。连到总线上的器件的接口形式必须是漏极开路或集电极开路输出状态。通过上拉电阻,使得两根总线在空闲的状态下都为高电平状态。因此I2C总线上具有线与功能,即总线上的所有器件都达到高电子状态时,I2C总线才能达到高电平状态,从而使总线上的高速器件和慢速器件工作同步。 在I2C协议中,从器件地址是一个唯一的7位地址。接下来是一个读写方向标志位,读状态是高电平、写状态是低电子。 根据I2C协议中传输过程的特点,I2C模块可以划分为字节发送模块、字节接收模块、开始条件模块、停止条件模块。其中,字节发送模块、字节接收模块和停止条件模块为基本模块。在开始条件模块中,因为需要发送从器件地址,所以要调用字节发送模块。 图20 总体外观图 32 中南民族大学学术论文 总结 本文是对我们近一年开对Xilinx公司举办的开源码比赛的“虚拟环绕声音频处理系统”项目的总结。该项目涉及的研究领域包括声学、信号处理、生理学及听觉心理学等。本次研究,在总结前人已有的研究成果的基础上,提出了自己的新观点。其中我们运用了目前所能获得的最大最全的HRIR公开数据库(CIPIC提供)。总的来说,我们的项目完成了预期的目标,成功实现了系统功能。我们主要完成了以下几方面的内容: (1)完成了基于SPI的SD卡的音频存取,底层文件系统的移植,及音频的编解码。 (2)完成了音频信号的处理,及快速卷积。 (3)完成了基于I2C的音频接口功能。 本次的项目研究为虚拟听觉空间搭建了一个系统框架,实际上还有许多地方值得我们继续探究和完善,主要表现在一下几个方面: (1)虚拟听觉的个人化研究。在前面我们曾提到人和人的差距,如耳廓的不同、及人头转动等因素,会造成不同对象在相同方位所测得的HRIR也存在着较大的差异。 (2)均衡系统的实现。均衡系统能对音频信号的频谱进行调节,使声音达到听者所满意的程度。 (3)混响系统的实现。混响系统的实现,能使声音具有方向性。听者能根据听到的声音,对声源进行定位。 33 基于虚拟环绕声的音频处理器 致谢 随着openwh开源大赛将要结题日期越来越近,不禁感慨时间如梭,将近一年的比赛就要结束,同学都有了些许的收获和感悟。 本次比赛项目是我们不断学习的知识积累的结果,也是我们对该项目研究工作的一个总结。 首先,我们将感谢我们的指导老师田莎莎。在这一年以来,田老师博学的学识和严禁求实的治学态度,让我们如沐春风。田老师不仅在专业知识方面给予我们孜孜不倦的教诲,在精神方面,她也给予我们坚持不懈将项目完成的决心。 其次,我们要感谢实验室的老师和同学们。在这一个激烈的比赛中,中南名族大学人工智能实验室给我们创造了良好的研究环境。在实验室研究期间,我们和实验室的其他成员缔结了深厚的友谊。在和他们交流的过程中,不仅加深了我们对专业知识的理解,也拓展我们知识的宽度和广度,我们要表示由衷的感谢。 最后,我们要感谢中南名族大学,“笃信好学 自然宽和”是对我们每一个民大学生的要求,感谢学校对我们的教育和培养。 34 中南民族大学学术论文 参考文献 [1] 田耘,徐文波 Xilinx FPGA开发实用教程.清华大学出版社.第一版,2008年.317-606. [2] 薛小刚,葛益敏 Xilinx ISE 9.x FPGA/GPLD设计指南.人民邮电出版社.第一版,2007年.303-376. [3] 赵峰,马迪铭,孙炜梁天翼 FPGA上的嵌入式系统设计实例.西安电子科技大学出版社.第一版,2008年.26-133. [4] 李宁.基于MDK的STM32处理器开发应用[M].北京航空航天大学出版社.第一版,2008. 398-410. [5] 吴振扬,空间听觉与四通听觉系统[J].1997,12:27-29 [6] 谢菠荪,多通路与虚拟环绕声问题 电声技术 5/1999 [7] 吴镇扬,与头相关联的传递函数的测量及数据分析[J].数据采集与处理,1996-12,11(4):315-318 [9]刘明业、蒋敬旗、刁岚松(硬件描述语言Verilog[M](北京(清华大学出版社,2001( [10]杨之廉、申明(超大规模集成电路设计方法学导论[M](第二版,清华大学出版社,2000( [11]王钿, 卓兴旺. Verilog H DL 的数字系统应用设计[M] . 北京: 国防工业出版社, 2007. [12]李石亮, 杨俊安, 叶春逢. 基于AD7656 的多路并行同步音频数据采集系统设计与实现[ J] . 现代电子技术, 2008, 31( 10) : 167?170. [13]李非一. 无线信道下误码控制和误码隐藏研究与实现[D]. 武汉:武汉大学,2005. [14]李桐宇, 杨家玮. 用SPI 总线实现DSP 和MCU 之间的高速通信[ J] . 电子元器件应用, 2006( 11) : 28- 30. [15]刘永平, 王威, 江豪, 等. 基于SPI 总线的PIC 与ISD4003 语音接口电路[ J] . 微计算机信息, 2006( 9-2) :95- 96. 35 基于虚拟环绕声的音频处理器 [16]Jan M(Rabaey(Digital Integrated Circuits-A Design Perspective,Second Edition[M](Prentice Hall,USA,2003,ISBN 7—3 02—07968—4( [16]J. C. Middlebrooks, ―Na rrow-band sound localization related to external ear acoustics,‖ J. Acoust. Soc. Amer., vol. 92, no. 5, pp. 2607–2624, Nov. 1992. [17]CML Microcircuits.CMX649 Recommended Settings[Z].2003. [18]Edward Kamen W, Bo nnie Heck S.Fundamentals of Signals and Systems Using Mat lab. Prent ice Hall Inter nat ional . Inc. , 1997 [19]ISOPIEC CD 13818 - 2 : Coding of moving pictures and associated audio- Part 2 : video , 1994. [20] F. L. Wightman and D. J. Kistler, ―Resolution of front-bac k ambiguity in spatial hearing by listener and source movement,‖ J. Acoust. Soc. Amer., vol. 105, no. 5, pp. 2841–2853, May 1999. [21] T. Ajdler, C. Faller, L. Sbaiz, and M. Vetterli, ―Sound field analysis along a circle and its application to HRTF interpolation,‖ J. Audio Eng. Soc., vol. 56, no. 3, pp. 156–175, Mar. 2008. [22] M. A. Gerzon, ―Ambisonics in multichannel broadcasting and video,‖ J. Audio Eng. Soc., vol. 33, no. 11, pp. 859–871, Nov. 1985. [23]戴红卫(面向高性能SOC应用的MP3解码器软硬件协同设计与验证[D](上海交 通大学硕士学位论文(2006年1月( 36 中南民族大学学术论文 附录 卷积代码: module conv(indata,outdata,address,CLK,reset,start,nconvst1,nconvst2,nconvst3,nbusy1,nbusy2,nbusy3,wr,enout1,enout2); input indata,CLK,reset,start,nbusy1,nbusy2,nbusy3; output outdata,address,nconvst1,nconvst2,nconvst3,wr,enout1,enout2; wire[7:0] indata; wire CLK,reset,start,nbusy1,nbusy2,nbusy3; reg[7:0] outdata; reg[10:0] address; reg nconvst1,nconvst2,nconvst3,wr,enout1,enout2; reg[6:0] state; reg[5:0] i; reg[1:0] j; reg[11:0] counter; reg[23:0] line; reg[15:0] result; reg high; 37 基于虚拟环绕声的音频处理器 reg k; reg EOC1,EOC2,EOC3; parameter hrir1=1,hrir2=2,hrir3=3; parameter IDLE = 7'b0000001, READ_PRE = 7'b0000010, READ = 7'b0000100, CALCU = 7'b0001000, WRREADY = 7'b0010000, WR = 7'b0100000, WREND = 7'b1000000; always @(posedge CLK) begin if(!reset) begin state<=IDLE; counter<=12'b0; wr<=1; enout1<=1; enout2<=1; outdata<=8'bz; address<=11'bz; 38 中南民族大学学术论文 line<=24'b0; result<=16'b0; high<=0; end // end of "if" else begin case(state) IDLE:if(start) begin counter<=0; state<=READ_PRE; end else state<=IDLE; READ_PRE: if(EOC1||EOC2||EOC3) //由于频率相对改进前的卷积 //器大大提高,所以加入 //READ_PRE 状态对取数操作 //予以缓冲。 state<=READ; else state<=READ_PRE; READ:begin 39 基于虚拟环绕声的音频处理器 high<=0; enout2<=1; wr<=1; if(j==1) begin if(EOC1) begin line<={line[15:0],indata}; state<=CALCU; end else state<=READ_PRE; end else if(j==2&&counter!=0) begin if(EOC2) begin line<={line[15:0],indata}; state<=CALCU; end else state<=READ_PRE; 40 中南民族大学学术论文 end else if(j==3&&counter!=0) begin if(EOC3) begin line<={line[15:0],indata}; state<=CALCU; end else state<=READ_PRE; end else state<=READ; end CALCU:begin result<=line[7:0]*hrir1+line[15:8]*hrir2+line[23:16]*hrir3; state<=WRREADY; end WRREADY:begin 41 基于虚拟环绕声的音频处理器 wr<=1; address<=counter; if(k==1)state<=WR; else state<=WRREADY; end WR: begin if(!high) enout1<=0; else enout2<=0; wr<=0; if(!high) outdata<=result[7:0]; else outdata<=result[15:8]; if(k==1) state<=WREND; else state<=WR; end WREND:begin wr<=1; enout1<=1; enout2<=1; if(k==1) if(!high) begin 42 中南民族大学学术论文 high<=1; state<=WRREADY; end else begin counter<=counter+1; if(counter[11]&&counter[0]) state<=IDLE; else state<=READ_PRE; end else state<=WREND; end default:state<=IDLE; endcase //end of the case end // end of "else" end // end of "always" //计数器i 用来时间 always @(posedge CLK) begin if(!reset) i<=0; else begin 43 基于虚拟环绕声的音频处理器 if(i==44) i<=0; else i<=i+1; end end //j 是控制信号,协调卷积器轮流从三片A/D 上读取数据。 always @(posedge CLK) begin if(i==4) j<=2; else if(i==10) j<=0; else if(i==19) j<=3; else if(i==25) j<=0; else if(i==34) j<=1; else if(i==40) j<=0; end //k 是计数器,用以控制写操作信号 always @(posedge CLK) begin if(state==WRREADY||state==WR||state==WREND) if(k==1) k<=0; else k<=1; else k<=0; 44 中南民族大学学术论文 end //根据计数器i 控制三片A/D 转换信号NCONVST1,NCONVST2,NCONVST3 always @(posedge CLK) begin if(!reset) nconvst1<=1; else if(i==0) nconvst1<=0; else if(i==3) nconvst1<=1; end always @(posedge CLK) begin if(!reset) nconvst2<=1; else if(i==15) nconvst2<=0; else if(i==18) nconvst2<=1; end always @(posedge CLK) begin if(!reset) nconvst3<=1; else if(i==30) nconvst3<=0; else if(i==33) nconvst3<=1; end always @(negedge CLK) 45 基于虚拟环绕声的音频处理器 begin EOC1<=nbusy1; EOC2<=nbusy2; EOC3<=nbusy3; end endmodule 46
/
本文档为【基于虚拟环绕声的音频处理器设计技术报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索