现在看来,这篇文章狗屁不通,还有些概念错误的地方,大家随意看看就好
在空间音频尤其是声场重建的任务中,HOA绝对是最为重要的技术之一,但这个HOA涉及到调和分解等一系列概念,理解起来其实并不容易。最近要写一篇基于HOA的声场重建论文,但在background的时候就感到头疼,不知怎么下手,于是借着这篇文章,回头看看HOA,也好梳理一下自己的思路。
空间音频是什么?
空间音频很多地方也叫做三维音频,它源于我们人据有分辨声音来源方向的能力。虽然一直是比较冷门的研究方向,但在VR的发展下,空间音频也火了一把,很大程度是因为空间音频在在VR的应用所讲究的沉浸感中扮演着极为重要的作用,当声音的方向与画面不匹配的时候,沉浸感会荡然无存,所以高品质的空间音频也成为了VR研究中很重要的一环。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BUYA53DR-1634881353034)(https://i.loli.net/2018/07/14/5b4a0596b0e92.png)]
https://developers.google.com/resonance-audio/discover/overview
HOA?
HOA 全称是 Higher Order Ambisonics,强硬的翻译的话就是高次混响。它最初的目的是要重建空间中声场的分布。我们可以想象一个空间中的一个球面,我们在球的中心,那么从球外传来的声音会在这个球面上有一个投影,这让我们想到,我们可以把球面以外的声音都无视掉,并假设声源分布在这个球面上。用球面上的声源产生的声场来拟合原来生源产生的声场。HOA就是一个这样去拟合声场的方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGjBuwrT-1634881353037)(https://i.loli.net/2018/07/14/5b4a059786b90.png)]
https://developers.google.com/resonance-audio/discover/concepts
相关知识
球面调和函数 Spherical harmonics
球面调和函数也叫球谐函数,它并不好理解,有机会可以详细的聊一聊,这里只做最最最抽象的介绍,力求知其然不求知其所以然。
这里要做的是类比一下傅里叶变换。我们通常接触的函数都是分布在一维的,每一个 x x x 对应一个 f ( x ) f(x) f(x),我们对 f ( x ) f(x) f(x) 进行傅里叶变换会得到 F ( ω ) F(\omega) F(ω)。现在我们的目标是一个在球面上分布的函数,我们使用一个球坐标系,球面上的点 ( r , θ , ϕ ) (r,\theta,\phi) (r,θ,ϕ),而对于一个固定大小的球, r r r是一个定值,我们可以暂时只关注 θ \theta θ和 ϕ \phi ϕ,那么对于每一组 ( θ , ϕ ) (\theta,\phi) (θ,ϕ)对应一个 f ( θ , ϕ ) f(\theta,\phi) f(θ,ϕ)。傅里叶变换可以将时域信号转化到频域,这样方便我们分析特定频域的信号,对于 f ( θ , ϕ ) f(\theta,\phi) f(θ,ϕ),我们只想知道这个函数在空间中一个大概的分布,所以 f ( θ , ϕ ) f(\theta,\phi) f(θ,ϕ)记录的东西无疑太多了,所以我们可以把它转换为 F n m F_n^m Fnm,这里的 n n n 和 m m m 就类似与傅里叶中的 ω \omega ω。当我们只需要粗略的空间分辨率时,很小的 n n n就足够,当需要更精细的空间分辨率时,就需要较大的 n n n 时的 F n m F_n^m Fnm,它们会对小的 n n n的 F n m F_n^m Fnm的空间的缝隙中进行插值,使空间的分辨率增高。通过球谐分解,我们可以把球面上的函数用更少的数值表达。就如下面这张图,从上至下 n n n逐渐增大,对空间的描述能力也逐渐增强。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJbRfL74-1634881353040)(https://i.loli.net/2018/07/14/5b4a059ae5ed3.png)]
https://en.wikipedia.org/wiki/Spherical_harmonics
基于球谐函数,球面上的任意函数可以被分解为球谐系数:
p ( θ , ϕ ) = ∑ n = 0 ∞ ∑ m = − n n P n m Y n m ( θ , ϕ ) p(\theta,\phi) = \sum_{n=0}^\infty \sum_{m=-n}^{n} P_n^m Y_n^m(\theta,\phi) p(θ,ϕ)=n=0∑