是否可以使用DSP System Toolbox(MATLAB)实时处理两个麦克风输入?

时间:2015-09-29 10:59:21

标签: matlab audio signal-processing noise-reduction

我一直在尝试使用数字系统处理系统工具箱实现主动噪音消除(ANC)系统。我也使用了dsp.AudioRecorderdsp.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系统工具箱的限制是一次只能在一台录音机设备上运行,还是一次可以使用两台录音设备?

有同一音频设备的多声道处理,但如何实时处理来自两个独立设备的音频?

2 个答案:

答案 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个通道)。