在我的Android智能手机的一侧,我使用AudioRecord.read()录制音频流。对于录音我使用以下规格
另一方面,我有三个扬声器使用WebAudio API和以下规格发出不同的声音
我的目标是确定发出的声音之间的到达时间差(TDoA)。所以在每次迭代中,我从我的AudioRecord缓冲区读取100个字节,然后我想确定时差(如果我发现了我的一个声音)。到目前为止,我已经使用一个简单的频率滤波器(使用fft)来确定TDoA,但这在现实世界中确实是不准确的。
到目前为止,我发现我可以使用互相关来更好地确定TDoA值(http://paulbourke.net/miscellaneous/correlate/和SO上的一些线程)。现在我的问题是:目前我认为我必须将录制的信号(我的短阵列)与上面三种声音中的每一种产生的信号相关联。但是我很难产生这个信号。使用(http://repository.tudelft.nl/view/ir/uuid%3Ab6c16565-cac8-448d-a460-224617a35ae1/部分B1.1。genTone())中找到的代码并没有明确解决我的问题,因为这将生成比我记录的样本更大的数组。到目前为止,我知道互相关需要两个相同大小的数组才能工作。那么我该如何生成样本数组?
另一个问题:到目前为止,如何确定TDoA是否正确?
答案 0 :(得分:0)
以下是我过去几天学到的一些课程:
因此,我使用this code found on SO生成线性啁啾(啁啾比简单的sin波(见文献)更好)。为了一个简单的例子,并检查我的实验是否有效,我保存我的记录以及我生成的啁啾声音为.wav文件(有很多代码示例如何执行此操作)。然后我使用MatLab作为计算xcorr的简单方法:see here
另一点:" xcorr的输入必须是相同的大小?"我对此部分不太确定,但我认为必须这样做。我们可以通过零填充两个信号到相同的长度(最好是2的幂,所以我们可以使用FFT的高效Radix-2实现)然后使用FFT来计算xcorr(参见SO的另一个链接)来实现这一点。
我希望到目前为止这是正确的并涵盖了其他人的一些问题: - )