我一直在尝试使用数字系统处理系统工具箱实现主动噪音消除(ANC)系统。我也使用了dsp.AudioRecorder
和dsp.AudioPlayer
。这是我的初始化代码:
mic_reference = dsp.AudioRecorder('NumChannels',1);
mic_reference.DeviceName='ASIO4ALL v2';
mic_error = dsp.AudioRecorder('NumChannels',1);
mic_error.DeviceName='ASIO4ALL v2';
sink1_2 = dsp.AudioPlayer;
sink1_2.DeviceName='ASIO4ALL v2';
我为每个麦克风拨打step(frame)
。我收到错误说
使用AudioRecorder /步骤时出错。给定的音频设备只能打开一次。
DSP系统工具箱的限制是一次只能在一台录音机设备上运行,还是一次可以使用两台录音设备?
有同一音频设备的多声道处理,但如何实时处理来自两个独立设备的音频?
答案 0 :(得分:2)
Charansai,
这不是DSP系统工具箱的限制,而是ASIO驱动程序的行为。 ASIO驱动程序授予对应用程序进行独占访问以进行回放或录制。因此,第二个对象试图重新使用相同的设备进行记录,从而导致错误。
在您的情况下,如果您的参考信号是通道1而错误信号是通道2,则需要记录2个通道的数据,而不是使用两个记录器对象。
har = dsp.AudioRecorder('NumChannels', 2);
har.DeviceName = 'ASIO4ALL v2';
hap = dsp.AudioPlayer;
hap.DeviceName = 'ASIO4ALL v2';
data = step(har);
refData = data(:, 1);
errData = data(:, 2);
outData = doSomething(refData, errData);
step(hap, outData);
希望这有帮助。
的Dinesh
答案 1 :(得分:0)
当您录制信号时,您应该从2个麦克风(每个麦克风称为通道/观察 - 即左右声道)录制它,您应该将这两个观察结果合并为一个流,然后再将其传递给Matlab,你应该只将1个双通道信号输入传递到dsp AudioRecorder工具箱 - 它不接受我不认为的两个来源。当您读入数据时,它应该是一个包含2个向量的矩阵(假设您在AudioRecorder设置中指定了2个通道)。