首页 文章

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

提问于
浏览
0

我一直在尝试使用数字系统处理系统工具箱实现主动噪声消除(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 回答

  • 2

    Charansai,

    这不是DSP系统工具箱的限制,而是ASIO驱动程序的行为 . ASIO驱动程序授予对应用程序进行独占访问以进行回放或录制 . 因此,第二个对象是尝试重新使用相同的设备进行记录,从而导致错误 .

    在您的情况下,如果您的参考信号是通道1并且错误信号是通道2,则需要记录2个通道的数据而不是使用两个 Logger 对象 .

    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);
    

    希望这可以帮助 .

    迪内希

  • 0

    当您录制信号时,您应该从2个麦克风(每个麦克风称为通道/观察 - 即左右声道)录制它,并且您应该将这两个观察结果合并为一个流,然后再将其传递给Matlab,您应该只通过1个双通道信号输入到dsp AudioRecorder工具箱 - 它不接受我不认为的两个来源 . 当您读入数据时,它应该是2个向量的矩阵(假设您在AudioRecorder设置中指定了2个通道) .

相关问题