编写软件来分辨声音的来源(定向收听)

Sam*_*Sam 6 audio speech-recognition waveform wav

我一直对此感到好奇,所以我想在这里发帖我可以得到一些好的答案.

到目前为止我所知道的:

人类可以用他们的两只耳朵来获取听起来"听起来像"的声音,以及它们来自哪里.音高是我们听到的音符,类似人声的音高有多种音高(不是纯音).

我想知道的是什么:

我如何编写一个可以知道声音来自何处的程序?从理论的角度来看,我需要两个麦克风,然后我会记录进入麦克风的声音数据并存储音频数据,以便将一瞬间的音频数据放入像[streamA,streamB]这样的元组中.

我觉得可能有一种公式/数学方法可以根据声音的来源进行计算.我也觉得可以获取流数据并训练学习者(给它采样音频并告诉它来自音频的位置)并让它以这种方式对传入的音频进行分类.

这样做的最佳方式是什么?是否有足够的资源可以从中学到更多关于这个主题的知识?

编辑:

例:

          front
Run Code Online (Sandbox Code Playgroud)

左(麦克风)x ======== x(麦克风)对

          back

                            x (sound source should return "back" or "right" or "back right")
Run Code Online (Sandbox Code Playgroud)

我想写一个程序,它可以返回前/后左/右声音听到的大部分声音.根据我的理解,设置两个指向"前进"的麦克风应该很简单.基于此,我试图找出一种方法,我们可以对声音进行三角测量,并知道与麦克风相关的来源.

Ada*_*vis 5

如果你研究一下多相麦克风阵列的研究论文,特别是那些用于水下测向的研究论文(即冷战期间潜艇研究的一大部分 - 电机声音来自哪里,我们可以瞄准鱼雷?)然后你将找到在给定两个或更多麦克风输入的情况下找到声音位置所需的技术和数学.

这不是一件轻而易举的事情,也不是可以在这里广泛讨论的东西,所以你不会找到一个简单的代码片段和/或库来做你需要的东西.

主要问题是消除回声和阴影.一种简单的方法是从单音开始,滤除除该音之外的所有音调,然后测量该音调的两个麦克风之间的相位差.相位差将为您提供有关音调位置的大量信息.

然后,您可以选择是否要处理回声和多路径问题(其中许多问题可以通过删除除最强音调之外的所有内容来消除)或者转移到由单个音调以外的其他内容组成的相关声音 - 一个人说话,或者例如,玻璃破碎.从小开始,从那里开始扩展.