基于虚拟环绕声的音频处理器
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
技术报告
第三届OpenHW开源硬件与嵌入式大赛
基于虚拟环绕声的音频
处理器
设计方案
中南民族大学
2012年3月
摘要
虚拟听觉空间VAS是一门新兴的边缘交叉学科涉及听觉心理学听觉生理学多传感器集成与融合人工智能并行计算和高性能计算机系统等多个研究领域VAS有时也称为虚拟听觉显示 Virtual Auditory Display 三维声再现系统 3D Sound RenderingReproducing System 虚拟声再现系统 Virtual Sound RenderingReproducing System 空间声音再现系统 Spatial Sound Rendering
System 虚拟空间三维听觉系统 Virtual Spatial 3D Auditory Systems 声音空间化系统 Sound Spatialization System 和双耳技术 Binaural Technology
等是通过对双耳的声音信号进行捡拾模拟和重放让倾听者在虚拟环境中听到的声信号逼近在真实环境声场中听到的声信号因而在电影院家庭影院中得到了很好的应用[15]其中多通路环绕声经过许多年的发展也获得了很好的效果也先后出现了5161com环绕声系统而且51通路环绕声系统也为国际电信联盟 ITU 所推荐[2]
此外为了适应音频的播放特构建了一款音频DSP处理器以适应本系统
虚拟环绕声技术是区别于多通道环绕声技术的另一类声重放系统它利用声
源到双耳的传递函数 HRTF 通过双耳 即空间两点 声信号的传输与重放实现声
音空间信息的传输与重放这种系统只需两路独立的传输信号和重放扬声器 或耳
机 因而在一些不便于安装多通道放声系统的环境下对改善电视机手机MP3MP4
等等电子产品的音频声效有很大的帮助
关键字相关传递函数 虚拟环绕声 51通路
ABSTRACT
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 51 61 71 or 102 channel surround system and 51 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 ie 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 51 pathways
目录
摘要2
ABSTRACT3
第一章 虚拟环绕声原理介绍5
第二章 本系统的基本组成10
第三章 系统具体的实现18
总结35
致谢36
参考文献37
附录39
第一章 虚拟环绕声原理介绍
由于虚拟环绕是以人耳的声源定位为基础的故在此主要对人耳的声源定位予以介绍心理声学的基本要素是到达人耳的声音的频率强度和谱结构以下将进一步讨论基于心理声学的声源定位距离感知及包围感等
人耳对声源的定位
在自然听音中人的听觉系统对声源的定位取决于多个因素双耳接收到的信号差异用来决定声源的水平位置由外耳对高频信号的反射所引起的耳郭效应决定声源的垂直位置而人耳的某些心理声学特性对于声源的定位也起到很大的作用
2双耳效应
在自然听音环境中双耳信号之间的差异对于声源的定位是非常重要的该因素可以在直达声场的听音环境中得到最好解释如图1所示
图声源S与镜像声源S引入最大程度相似的双耳因素
图 空间锥形区域声像混淆
图3 人头模型测量的耳郭效应
耳郭效应进行声音定位主要是将每次接收到的声音与过去存储在大脑里的重复声排列或梳状波动记忆进行比较然后判断定位因每个人耳郭尺寸不同所以每个人在大脑中存储的记忆是不同的这一点应引起注意
图 头部转动避免声源位置前后混淆
图5系统总体框图
DSP音频处理器是本系统的核心负责音频解码信号叠加等处理虚拟环绕声
模块负责针对音频信号产生虚拟的环绕声音频效果DAC负责还原出音频信号在这些基本功能的础基上实现诸如音频检索等新功能
左后ls和右后环绕声生成器
左后ls和右后环绕声生成器内部结构
图6 左后ls和右后环绕声生成器内部框图
图7 左后ls和右后环绕声生成器原理图
经过研究我们发现当左后和右后的两个声像在同一水平角度时倾听者的声像刚好再在中间的位置因此没有环绕声的效果因此我们做了这个专门处理左后和右后的音频处理装置如图6所示当左后的声源角度为240时如图7所示该声源与右后的135和150两声源之一叠加以此类推最后将说有声音叠加形成环绕声的效果
3DSP音频处理器及虚拟环绕声处理器
DSP音频处理器及虚拟环绕声处理器内部构成
图8 环绕声生成及音频信号处理内部框图
我们系统的核心部分大致如图8所示从sd卡读出的数据流有音频解码等处理得到51个声道
外设部分
NEXYS3开发板的外设接口如图9所示
图9 开发板外设接口图
本项目的两个外设接口均采用了Pmod Port ExpansionPmodSD模块采用了12针进行衔接CS4344采用了6针与开发板相衔接
NEXYS3用来处理复杂的音频相关的计算问题大概的处理过程就是从SD卡中
选择合适的采用率读出音频数据然后将数据放于开发板的缓存中使用核心音频处理IP进行音频数据处理然后将数据通过CS4344将预先设想的声音给还原出来
开发板上4块Pmod Port Expansion的图示如下
图10 Pmod Port Expansion
每一块Pmod Port Expansion 12针的图示
图11 Pmod 12个端口
PmodSD模块它拥有两排六列的接触头和一个SD卡卡槽它方便了SD卡和开发板的衔接SD卡与开发板的通信是依靠那12个触头实现的本项目是采用的SD卡的SPI
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
驱动的SPI协议简单使用的引脚也比较少只需要SSMOSIMISOSCK
图12 PmodSD的工作原理图
自制音频接口的组成是
ICCS4344
电阻470欧姆2个10K欧姆2个0805封装
01uF电容2个0805封装
33uF 3个 0805封装
10uF 1个 B型装装
2500 uH电感 ,个 0805封装
耳机插座
图13 音频接口原理图
图14 自制立体声音频接口图
第三章 系统具体的实现
1基于SPI的SD卡
FatFS是一个为FPGA系统设计的通用文件系统模块对FatFs 的程序编写遵
守ANSI C并且完全与磁盘IO层分开因此它并不依赖于当前的硬件架构它可以嵌
入到FPGA的微控制器中
图15 FatFS原理图
添加的SPI核
axi_spi
spi_cntrl_reg
spi_core_interface
spi_fifo_ifmodule
spi_occupancy_reg
spi_receive_transmit_reg
spi_status_slave_sel_reg
SDK spi接口函数
1void 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 异常终止
com
1f_mount FatFs模块上注册注销一个工作区 文件系统对象 FRESULT f_mount
BYTE Drive 逻辑驱动器号
FATFS FileSystemObject 工作区指针
2f_open
创建打开一个用于访问文件的文件对象
FRESULT f_open
FIL FileObject 空白文件对象结构指针
const XCHAR FileName 文件名指针
BYTE ModeFlags 模式标志
表一 文件的访问类型和打开方法
模式 描述 FA_READ 指定读访问对象可以从文件中读取数据 与FA_WRITE结合可以进行读写访问 FA_WRITE 指定写访问对象可以向文件中写入数据
与FA_READ结合可以进行读写访问 FA_OPEN_EXISTING 打开文件如果文件不存在则打开失败 默认 FA_OPEN_ALWAYS 如果文件存在则打开否则创建一个新文件 FA_CREATE_NEW 创建一个新文件如果文件已存在则创建失败 FA_CREATE_ALWAYS 创建一个新文件如果文件已存在则它将被截断并覆盖 _FS_READONLY 1 时模式标志 FA_WRITE FA_CREATE_ALWAYS FA_CREATE_NEW FA_OPEN_ALWAYS 是无效的
3 f_close
FRESULT f_close
FIL FileObject 文件对象结构的指针
4f_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 返回已写入字节数变量的指针
6f_lseekFRESULT f_lseek
FIL FileObject 文件对象结构指针
DWORD Offset 文件字节偏移
7 f_truncate
FRESULT f_truncate
FIL FileObject 文件对象结构指针
8f_sync
FRESULT f_sync
FIL FileObject 文件对象结构的指针
9 f_opendir
FRESULT f_opendir
DIR DirObject 空白目录对象结构的指针
const XCHAR DirName 目录名的指针
10f_readdir
FRESULT f_readdir
DIR DirObject 指向打开的目录对象结构的指针
FILINFO FileInfo 指向文件信息结构的指针
11f_getfreeFRESULT f_getfree
const XCHAR Path 驱动器的根目录
DWORD Clusters 存储空闲簇数目变量的指针
FATFS FileSystemObject 文件系统对象指针的指针
12f_stat
FRESULT f_stat
const XCHAR FileName 文件名或目录名的指针
FILINFO FileInfo FILINFO结构的指针
13f_mkdir
FRESULT f_mkdir
const XCHAR DirName 目录名的指针
14f_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 隐藏 16 f_utime f_utimeFRESULT f_utime
const XCHAR FileName 文件或目录路径的指针
const FILINFO TimeDate 待设置的时间和日期
17f_rename
FRESULT f_rename
const XCHAR OldName 原对象名的指针
const XCHAR NewName 新对象名的指针
18f_mkfs
FRESULT f_mkfs
BYTE Drive 逻辑驱动器号
BYTE PartitioningRule 分区规则
WORD AllocSize 分配单元大小
19f_forward
FRESULT f_forward
FIL FileObject 文件对象
UINT Func const BYTEUINT 数据流函数
UINT ByteToFwd 要转发的字节数
UINT ByteFwd 已转发的字节数
20f_chdir
f_chdirFRESULT f_chdir
const XCHAR Path 路径名的指针
21 f_chdrive
f_chdriveFRESULT f_chdrive
BYTE Drive 逻辑驱动器号
22 f_gets
f_getschar f_gets
char Str 读缓冲区
int Size 读缓冲区大小
FIL FileObject 文件对象
23 f_putc
f_putcint f_putc
int Chr 字符
FIL FileObject 文件对象
24f_puts
f_putsint f_puts
const char Str 字符串指针
FIL FileObject 文件对象指针
25 f_printf
f_printfint f_printf
FIL FileObject 文件对象指针
const char Foramt 格式化字符串指针
comO接口
由于FatFs模块完全与磁盘IO层分开因此底层磁盘IO需要下列函数去读写
物理磁盘以及获取当前时间由于底层磁盘IO模块并不是FatFs的一部分因此它
必须由用户提供
1disk_initialize
DSTATUS disk_initialize
BYTE Drive 物理驱动器号
2disk_status
DSTATUS disk_status
BYTE Drive 物理驱动器号
3disk_read
DRESULT disk_read
BYTE Drive 物理驱动器号
BYTE Buffer 读取数据缓冲区的指针
DWORD SectorNumber 起始扇区号
BYTE SectorCount 要读取的扇区数
4disk_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 数据传输缓冲区
表三 磁盘命令
命令 描述 CTRL_SYNC 确保磁盘驱动器已经完成等待写过程当磁盘IO模块有一个写回高速缓存时立即冲洗脏扇区在只读配置中不需要该命令
GET_SECTOR_SIZE 返回驱动器的扇区大小赋给Buffer指向的WORD变量在单个扇区大小配置中 __SS 为 512 不需要该命令 GET_SECTOR_COUNT
返回总扇区数赋给Buffer指向的DWORD变量只在f_mkfs函数中使用了该命令 GET_BLOCK_SIZE 返回以扇区为单位的存储阵列的擦除块大小赋给Buffer指向的DWORD变量当擦除块大小未知或是磁盘设备时返回1只在f_mkfs函数中使用了该命令 6get_fattime
图18 音频接口管脚图
其中各管教的用途如下
SDIN用于音频信号的输入
DSMSCLK时钟信号的输入
LRCK左右时钟输入
MCLK主时钟输入
VQ静态电压
AOUTR右声道模拟信号输出
GND接地
AOUTL左声道模拟信号输出
FILT正基准电压
图19 音频接口原理图
32 I2C总线协议
I2C总线系统由两根总线即SCL 串行时钟 线和SDA 串行数据 线构成这种总线可以设计成很多种通讯配置但本文只讨论主从系统的应用主器件控制总线通讯开始,结束传送发送信息并产生I2C系统时钟在写操作过程中从器件一旦被主控器件寻址就执行特定的相应功能在读操作过程中主控器件从从器件那里获得数据在整个主从传送过程中所有的事件都通过主控器件的SCL时钟线达到同步连到总线上的器件的接口形式必须是漏极开路或集电极开路输出状态通过上拉电阻使得两根总线在空闲的状态下都为高电平状态因此I2C总线上具有线与功能即总线上的所有器件都达到高电子状态时I2C总线才能达到高电平状态从而使总线上的高速器件和慢速器件工作同步
在I2C协议中从器件地址是一个唯一的7位地址接下来是一个读写方向标志位读状态是高电平写状态是低电子
根据I2C协议中传输过程的特点I2C模块可以划分为字节发送模块字节接收模块开始条件模块停止条件模块其中字节发送模块字节接收模块和停止条件模块为基本模块在开始条件模块中因为需要发送从器件地址所以要调用字节发送模块Jan M(Rabaey(Digital Integrated Circuits-A Design PerspectiveSecond
Edition[M](Prentice HallUSA2003ISBN 73 02079684(
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 MicrocircuitsCMX649 Recommended Settings[Z]2003
[18]Edward Kamen W Bo nnie Heck SFundamentals 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月(
附录
卷积代码
module conv
indataoutdataaddressCLKresetstartnconvst1nconvst2nconvst3nbusy1nbusy2
nbusy3wrenout1enout2
input indataCLKresetstartnbusy1nbusy2nbusy3 output outdataaddressnconvst1nconvst2nconvst3wrenout1enout2
wire[70] indata
wire CLKresetstartnbusy1nbusy2nbusy3 reg[70] outdata
reg[100] address
reg nconvst1nconvst2nconvst3wrenout1enout2 reg[60] state
reg[50] i
reg[10] j
reg[110] counter
reg[230] line
reg[150] result
reg high
reg k
reg EOC1EOC2EOC3
parameter hrir1 1hrir2 2hrir3 3
parameter IDLE 7b0000001
READ_PRE 7b0000010
READ 7b0000100 CALCU 7b0001000 WRREADY 7b0010000 WR 7b0100000
WREND 7b1000000 always posedge CLK
begin
if reset
begin
state IDLE
counter 12b0
wr 1
enout1 1
enout2 1
outdata 8bz
address 11bz
line 24b0
result 16b0
high 0
end end of "if"
else
begin
case state
IDLEif start
begin
counter 0
state READ_PRE
end
else state IDLE
READ_PRE if EOC1EOC2EOC3 由于频率相对改进前的卷积 器大大提高所以加入
READ_PRE 状态对取数操作
予以缓冲
state READ
else
state READ_PRE
READbegin
high 0
enout2 1
wr 1
if j 1
begin
if EOC1
begin
line line[150]indata
state CALCU
end
else state READ_PRE
end
else if j 2counter 0
begin
if EOC2
begin
line line[150]indata
state CALCU
end
else state READ_PRE
end
else if j 3counter 0
begin
if EOC3
begin
line line[150]indata
state CALCU
end
else state READ_PRE
end
else state READ
end
CALCUbegin
result
line[70]hrir1line[158]hrir2line[2316]hrir3
state WRREADY
end
WRREADYbegin
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[70]
else outdata result[158]
if k 1 state WREND
else state WR
end
WRENDbegin
wr 1
enout1 1
enout2 1
if k 1
if high
begin
high 1
state WRREADY
end
else
begin
counter counter1
if counter[11]counter[0]
state IDLE
else state READ_PRE
end
else state WREND
end
defaultstate 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
if i 44 i 0
else i i1
end
end
j 是控制信号协调卷积器轮流从三片AD 上读取数据 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 WRREADYstate WRstate WREND
if k 1 k 0
else k 1
else k 0
end
根据计数器i 控制三片AD 转换信号NCONVST1NCONVST2NCONVST3
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
begin
EOC1 nbusy1
EOC2 nbusy2
EOC3 nbusy3
end
endmodule
基于虚拟环绕声的音频处理器
中南民族大学学术论文
2
1
虚拟环绕声
DSP音频处理器
DAC还原
音源
其它新的功能