HRTF学习笔记
来源:互联网 发布:淘宝充值红包退款 编辑:程序博客网 时间:2024/05/16 07:48
最近在研究HRTF的相关知识,在这里做个笔记记录一下(博主qq,1204802552,欢迎交流)
HRTF(Head Related Transfer Function):头相关变换函数,是一种音效定位算法,对应时域的HRIR(Head Related Inpulse Response),头相关冲击响应。
由上定义可以知道,HRTF是一种关于音效定位的算法。其实,说是算法,不如说是一种人体物理现象的数学表达。为什么说是人体的物理现象呢,因为这跟人体的生物体型构造有关,音效定位又是一种物理现象,所以说是人体的物理现象(强行一波瞎说)。
好,言归正传,有关HRTF研究很多,首先我来说下HRTF的现象(百度就行),一下来自百度(勿喷):
===============================================
说了一大堆,是不是觉得有点头大,其实简而言之,就是:声音从声源发出到被我们听到,中间经过了一系列的动作比如反射声波重叠等等,而这些,可以通过各种数学函数合成变换来模拟。但是,单纯用函数来做,太难太难以至于几乎不可能。比较简单的函数比如时差和声波能量衰减还是可以实现的,但是更多的关于人耳构造的这些,就很难去模拟了。
于是乎,万能的科学家们另辟蹊径,不去模拟,而是通过人头模型在实验室测试收集各个声源点到人耳的数据,比较出名的测试数据有CIPIC和MIT数据集,合成数据即是HRIR(不知道我的说法对不对),然后,直接把音频数据通过HRIR滤波得到我们想要的效果。
上面我说的很简略,如果大家有兴趣可以在网上找找相关论文,有很详细的解释。
下面我们来说说比较关键的,大家比较关心的部分:编程怎么实现?
首先,我们要有音频数据,这个应该没问题。假设我们现在有10000帧的PCM数据,备用。
然后,我们要获取到一组HRIR数据,这个大家可以去下载CIPIC或者MIT,我用的是CIPIC,它是把数据以三维数组的形式保存在mat文件中的。
接着关键部分来了;CIPIC的数据是25*50*200的,为什么会这样呢,它的测试方位角点总共有25*50个,每个点的数据是200帧,这下明白了吧,不清楚的可以查查资料,很多
我们先选一个方位点,就去【0,0】吧,然后我们可以去到200帧的测试数据,我们用数组A[200]表示
然后,我们要把前面的10000帧音频数据和这200帧的HRIR数据做卷积运算。what?卷积是什么鬼?不明白的可以上网查
考虑到数据量比较大,我们可以用分段卷积的方式来处理。分段卷积又是什么鬼?百度百度
卷积完了之后呢,输出的数据就是我们要的了,完事。
完事了?感觉啥也没做就完事了?对,你没看错,最简单的HRTF程序,到此就可以完成了,就是这么简单,网上很多论文洋洋洒洒几十页,看的你晕头转向却依然无处下手,在我这儿就这么简单的解决了,当然,我说的只是最简单的一个程序了,如果需要用到环绕移动的效果,肯定还要额外的工作来完成;还有一些性能优化的问题,需要用到FFT这些的,我这里也没有作介绍。
本文目的,主要是记录一下自己的研究工作,并向大家捋一捋编程思路,看论文的话大家容易迷糊,而且有些论文里的废话也不少,毕竟有些要凑字数。
附带的文件是我自己做的一个样例,添加了移动环绕的效果。但是大家会发现,有个地方突然从耳朵的一边跑到了另一边,这不是程序bug,是因为我使用的数据是CIPIC的数据,在水平方位角上,该数据库的测试点并不是360度的,在人头正前方的部分区域是没有采样测试点的,所以才造成了这个效果
- HRTF学习笔记
- HRTF音频处理
- 3D音效-HRTF
- HRTF:Head Related Transfer Function
- HRTF音频3D定位技术
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 模板方法设计模式
- 电脑经常自动断网掉线
- UVa 11218 - KTV
- Java通过JNI调用C语言
- 136----current 获取指针当前单元
- HRTF学习笔记
- 一、系统准备工作
- 【C语言】LeetCode 234. Palindrome Linked List
- 微信小程序开发基础篇之工具介绍(二)
- HDU 1568 犀利的fibonacci数列(log 科学记数法)
- arcgis中脚本工具调用公用的python脚本
- strip后调试符号单独保存文件
- SqlServer--bat批处理执行sql语句2-sqlcmd
- Nginx流媒体支持配置