谢谢您的指导加布里埃莱!我也一直在努力解决这个问题。
按照你的意见,我使用的是多声道音频接口(百灵U型隐斜UMC404HD),音响系统工具箱。下面是我发现。我在这里提到的数字和驱动程序可能是其他用户不同。
当“deviceReader”对象如下被实例化,
deviceReader = audioDeviceReader(“司机”,'ASIO','NumChannels',2);
我发现有样品比应该减少22-27%。这可以通过下面的代码中找到:
[Y,FS] = audioread(文件名);
sampleDifference = Fs的* recordDuration - 长度(y)的
percentDifference = sampleDifference /(FS * recordDuration)* 100
有了如此巨大的错误,音频本地化无法做到的。相反,如果“deviceReader”与“设备”指定(百灵在我的情况下,在其网站上提供的驱动程序)实例化,“sampleDifference”大大降低!它可以微调也通过使用“SamplesPerFrame”参数。
deviceReader = audioDeviceReader(“司机”,'ASIO','设备','UMC ASIO驱动','NumChannels',2,'SamplesPerFrame',128);
我发现,通过使这种变化,“percentDifference”可以一致地降低到0.01%!
我也建议关闭所有非必要的应用程序,把所有无线设备关闭(的Wi-Fi,蓝牙等),并增加Matlab的优先级。在Windows 10,这是通过任务管理器来完成。
使用具有接地,正和负导线3针音频设备时,此最后的步骤是有帮助的。正和负导线都携带音频,但具有相反的极性,以从外界干扰噪声抵消。测试表明每个麦克风都会有不同的噪声特性。它们的极性将降低到准确找到音频接收之间的样本数在麦克风1和麦克风2,它是由对两个输入执行互相关发现的能力。
一个简单的解决方法是在执行互相关时找到的两个输入的绝对值以供使用。
[Y,FS] = audioread(文件名);
Y = ABS(Y);
下面是脚本高达互相关的点。
关所有
明确
文件名='myTwoChannelRecording.wav';
deviceReader = audioDeviceReader(“司机”,'ASIO','设备','UMC ASIO驱动','NumChannels',2,'SamplesPerFrame',128);
设置(deviceReader);
的FileWriter = dsp.AudioFileWriter(文件名);
recordDuration = 5;
DISP('记录...')
抽动;
而TOC
acquiredAudio = deviceReader();
的FileWriter(acquiredAudio);
结束
DISP(“录制完成。”)
释放(deviceReader);
释放(FileWriter的);
[Y,FS] = audioread(文件名);
Y = ABS(Y);
sampleDifference = Fs的* recordDuration - 长度(y)的
percentDifference = sampleDifference /(FS * recordDuration)* 100
leftAudio = Y(:,1);
rightAudio = Y(:,2);
[xCorrResult,滞后] = xcorr(leftAudio,rightAudio);
修正这些错误已经采取了相当长一段时间,所以我希望这可以帮助别人的工作,通过其中的一些问题。声学定位的一个很好的解释可以在YouTube上的视频在这里找到:
那个是从哪里来的?介绍了声本地化
。
0评论
登录发表评论。