https://blog.csdn.net/Filwl_/article/details/50503558

https://blog.csdn.net/lwsas1/article/details/54575668

https://blog.csdn.net/Inger_H/article/details/52790264

https://www.cnblogs.com/huaping-audio/archive/2011/04/04/2005379.html

人们能够分辨出声音的远近,方向,主要与声波到达双耳的能量,时间和相位差等信息密切相关。把声音经介质到达人耳的路径可以看成一个滤波的过程,到达两个耳朵的声波在不同的角度是不一样的。在不同的距离也是不一样的。如果能够模拟出这个传递声波的路径,模拟出这个滤波器,是不是对于同一个声音,我们就可以人为的给它产生不同的方位感呢。答案是肯定的。这个技术的全称就是HRTF.

1. HRTF 3D定位音频技术

要明白3D定位音频技术,首先必须明白人脑是如何使用耳朵来确定音源的位置的。让我们从人耳的结构开始说起:

人耳可分成三个部分:耳廓,耳道和鼓膜。当声音被外耳察觉,会通过耳道传递到耳膜。在这个时候,鼓膜背部会转换机械能量为生物和电能量,然后通过神经系统传送到大脑。当我们出生后,我们大脑所有的神经原都记录有曾经验过的任何数据,这些神经原具有非常快的分辨不同内容声波的能力。它让一只耳朵分析声波内容,让两只耳朵分析声波的位置。这和人眼看东西一样,一只眼睛无法看出对象的多面性。

尝试闭上您的一只眼,伸出您双手的食指。有意的拉开距离,然后慢慢的让您的左手食指去碰右手食指。

您左手的食指碰到了右手的食指了吗?您认为您可以两指毫不困难的相触,但实际上您惊奇的发现它们却“擦肩”而过了!实际上,一只眼看不会妨碍判断眼前的是手指,但是这样看却是没有立体空间感的。现在,您可以睁开另一只眼,别累坏了。既然视觉能够分辨不同位置的对象,那么听觉也能做到。那么,问题来了:我们耳朵的哪个部分负责处理声源的定位? 
声音定位的基本原理:

1) ITD(Inter Aural Time Delay)两耳时间延迟量差

声波在空气中以每秒345米每秒的速度传播。我们假设两耳的距离为20厘米,声源在左边。无疑声波会首先到达左耳,580us(声波走过二十厘米所需的时间),声音会到达右耳。如果声源从我们正前方传来,那么声波会同时到达双耳。至于声源从其他角度发出,很容易通过三角函数得出结果。因此,人脑通过ITD可以毫不困难分辨不同的方位。

2)IAD(Inter Aural Amplitude Difference)两耳音量大小差

我们都会有这样的经验:如果声音被物体挡住,我们听到的声音音量会变小。想象一下,如果声音从我们的正左方传来,那么我们的左耳觉察到的声音保留了原始声音,而我们的右耳察觉到的声音的音量会减小,因为我们的头吸收了一部分音量。理论上说,可以对人耳听到从360度的空间中任意一点传来的振幅进行测量,其相对关系可以描绘成图。

声波的耳廓绕射效应和耳道频率振动:

仅仅帮助我们的大脑分辨声源的方向的话,ITD和IAD就够了。但是,ITD和IAD不能描述声源从正前方和正后方传来的区别。在这样的情况下,两个数据值几乎是一样的。这种情况也会发生在当声源发声于我们的正头顶部和正脚下的时候。因此,只依靠ITD和IAD还不算很好。要解决这个问题,我们的耳廓扮演着关键的角色。

声波遇到物体的时候会反弹。我们的耳朵是内空的卵圆型,因此,不同波长的声波相应的在外耳产生不同的效应。按照频率分析的观点,当不同的声源从不同的角度传来,它们肯定会在鼓膜上产生不同的频率振动。正是因为耳廓的存在,才造成了从前面和从后面传来的声音截然不同。

鼓膜和耳廓之间是一段2厘米的通道,中空的结构造成的谐振会极大的增益5kHz的讯号,正好是人听觉的最敏感频段。因此,我们在别人耳边小声说话的时候必须很小心,因为这样说话我们的声音很可能被别人听到。

现在我们进行另外一项试验。仅封住耳廓,用一串钥匙在你面前抖动,你会发现您分辨声音上下位置的能力严重削弱了。试着将耳廓贴紧头部,你又发现你辨别前后左右的感觉和以前大不相同了。不过,我们的大脑很聪明,所以仍然能够辨别前后左右。所以,上述所有的差异仍然能够通过依靠视觉和房间反射效应来改善。这是心理学上的“听音辨位”。比如,当我们听到直升飞机的轰鸣,我们会抬头寻找音源。因此补上心理预测之后,就最终形成了整个声音定位的所有要点。

反射和吸收:

房间或者环境反射效应也是重要的参数。反射物体有其特有的声波吸收系数,如,瓦砖和木夹板就有不同的反射值。闭上眼睛您会毫不困难的分辨您是在浴室还是在日本式的卧室里,不是吗?

所以,如果我们想测量3D定位音频效应,最好考虑到所有的因素,如房间的大小,形状和建筑材料。以此增强声音的表现质量。

声源的心理预测:

其他因素如侧反射波,心理预测声源(比如,我们知道飞机在天上轰鸣,蟋蟀在草丛里歌唱)也是告诉我们声音方位的有用因素。

总结起来,我们有三个主要的因素:ITD、IAD和耳廓频率振动。

这三个元素是HRTF――头部相关传输函数的参数。其他元素如室内反射和吸收可通过音频物理学处理。

2.如何测量获得HRTF库?

首先我们提出一个设想,在人耳里放置一个麦克风,认为HRTF参数可通过这个方法进行测量。但是通过耳道的频率振动会有损失,如果把麦克风放在外耳,测量的参数就不够准确。因此,人为制造人头模型是解决这个问题最佳方案。

实际上,按照测量HRTF库的要求,人造耳朵的形状更为重要。有些研究机构使用塑料来做耳朵模子,更高级的使用CAD/CNC来重建电脑模拟耳朵模型,使其更适合人造头。在人造头里放入高品质的麦克风,就可以进行测量工作了。这类科技由英国中心研究实验室开发,称作“Digital Ear”。Digital Ear可帮助研究人员测量非常精确的HRTF参数,远比其他可用的商业解决方案要好。

从理论上说,正前方声源,频率振动对两耳的效应相同。就是说,红色和蓝色的曲线应该非常接近,甚至是重合。很显然,CRL的Digital Ear能获得比其他技术更精确的测量频率的振动。

在拥有了人造头之后,下一步开始进行测量工作。测量必须在回声环境中,虽然回声会增加从收集的数据中提取声音特征的难度。封闭的房间是合适的测量环境。在封闭的房间内放置人造头模型,在房间的四周、天花板和地板铺满锥形海绵,在房间内放入可在三维环境中任意移动的声源,就可以开始测量工作了。一般来说,一套完整的测量参数,包括后期的调整,需要数月的时间来完成。

当在三维空间内,从不同的位置录制了20Hz到20kHz波段的不同类型声波的时候,完整的HRTF原始数据就形成了。原始数据通过精确计算的EQ数学公式生成HRTF参数(因为测量装置可能不一定能够达到要求),得到我们想要的――HRTF库。通常,测量工作采用最高质量的采样,48kHz。为了适合硬体成本要求,也使用44.1kHz和22kHz。这并不是说选择的频率越高,质量就越高。但是,更高的频率需要更高的数字滤波器。因此,根据成本和质量的关系,权衡首选的频率。

3.HRTF形成虚拟环绕声

HRTF全称叫Head Related Transfer Function,可以看成是一个特定位置的声音传输到左右耳的频率响应,对应的时域响应叫HRIR,Head Related Impulse Response。

所以,HRTF其实就是一个滤波器。要得到经HRTF处理的特定位置声音,只需要与HRIR做卷积就好了,或者fft之后与HRTF相乘。MIT、CIPIC的HRTF库给出的dat,都是HRIR响应,CIPIC的文档里也告诉了我们最基本的处理方法。首先根据位置信息抽取对应的hiir,在将音源与其卷积即可。

CIPIC的HRTF库是将不同位置的HRIR信息存储在同一个mat文件中,而MIT则是一个位置对应一个dat或wav文件,因此不需要squeeze直接根据文件名索引就好。

5.1 ch或7.1 ch的音频,Ls ch数据使用相应位置的两个HRTF滤波器,得到传递到左耳和右耳的声音。

转载:HRTF virtaul surround的更多相关文章

  1. hrtf virtual surround matlab实现

    将5.1 ch的数据经过hrtf处理,然后downmix到2ch,使得2ch的数据有virtual surround的效果. function output = hrir_process(input) ...

  2. 【转载】HRTF音频3D定位技术综述

    1. 序 您一定有过这样的经验:在一个炎热的夏夜,讨厌的蚊子在你的耳边飞舞.此时,没有比除掉这个祸害更急所的了,对吧?做到这一点,不必睁大了眼去找蚊子,只需依靠敏锐的听力,一样可以确定蚊子的方位,在漆 ...

  3. 转载:Android Studio 快捷键

    Android Studio使用技巧系列教程(一) 分类: android studio2015-07-08 10:04 4774人阅读 评论(6) 收藏 举报 android开发ideandroid ...

  4. VLC命令参数(转载)

    转载自: http://blog.csdn.net/bytxl/article/details/6613449 http://www.cnblogs.com/MikeZhang/archive/201 ...

  5. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  6. USACO环绕岛屿Surround the Islands 并查集 枚举暴力

    题目描述 Farmer John has bought property in the Caribbean and is going to try to raise dairy cows on a b ...

  7. Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)

    作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...

  8. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

  9. 《Walking the callstack(转载)》

    本文转载自:https://www.codeproject.com/articles/11132/walking-the-callstack Download demo project with so ...

随机推荐

  1. Dalsa 8K彩色相机Camera link C#采图

    一个采图工具,所以界面做的很简单. private SapAcquisition m_Acquisition; private SapBuffer m_Buffers; private SapAcqT ...

  2. 在CSS中,link里 的rel="stylesheet"是什么意思?

    rel是relationship的英文缩写,它描述了当前页面与href所指定文档的关系:stylesheet就是样式表的意思:CSS是 Cascading Style Sheet(级联样式表)的缩写 ...

  3. 【Unity|C#】基础篇(12)——反射(Reflection)(核心类:Type、Assembly)

    [学习资料] <C#图解教程>(第24章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu. ...

  4. php 公众号开发

    思考: 1,优先使用php扩展库的sdk,配合微信文档. 2,公众号开发比较简单,重在业务. 公众号关联与消息分发 <?php namespace app\wap\controller; use ...

  5. git保存仓库的账号密码

    1.执行保存账号命令 # 保存本地仓库的账号git config --local credential.helper store # 保存git全局账号git config --global cred ...

  6. eclipse unable to start within 45 seconds

    在eclipse4.8.2中运行tomcat8.5项目时,提示出错: Server Tomcat v8.0 Server at localhost was unable to start within ...

  7. 解决pjax加载页面不执行js插件的问题

    个人博客 地址:http://www.wenhaofan.com/article/20180913220425 介绍 在使用jquery.pjax的时候发现加载页面时不会执行其中的layui以及jqu ...

  8. git本地仓库远程仓库地址更改

    git remote rm origingit remote add origin git@52.82.8.87:iot3.0-service/test.gitgit push -u origin - ...

  9. vue学习指南:第十二篇(详细) - Vue的 路由 第二篇 ( 路由按需加载(懒加载))

    各位朋友 因 最近工作繁忙,小编停更了一段时间,快过年了,小编祝愿 大家 事业有成 学业有成 快乐健康 2020开心过好每一天.从今天开始 我会抽时间把 Vue 的知识点补充完整,以及后期会带给大家更 ...

  10. 爬虫 urllib

    内置http请求库 模块 urllib.request 请求模块 urllib.error  异常处理模块 urllib.parse     url解析模块 urllib.robotparser    ...