是否可以使用 DSP 系统工具箱(MATLAB)实时处理两个麦克风输入?
Is it possible to process two microphones input in real time using DSP System Toolbox(MATLAB)?
我一直在尝试使用数字系统处理系统工具箱来实现主动降噪 (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)
。我收到一条错误消息说
Error using AudioRecorder/step A given audio device may only be opened once.
是DSP系统工具箱的限制一次只能在一台录音机设备上操作,还是可以同时使用两台录音机设备?
有规定可以对同一音频设备进行多声道处理,但是如何实时处理来自两个独立设备的音频?
当您录制信号时,您应该从 2 个麦克风(每个称为 channel/observation - 即左声道和右声道)进行录制,并且您应该在传递信号之前将这两个观察结果合并为一个流对于 Matlab,您应该只将 1 个双通道信号输入传递到 dsp AudioRecorder 工具箱中——我认为它不接受两个信号源。当您读入数据时,它应该是一个包含 2 个向量的矩阵(假设您在 AudioRecorder 设置中指定了 2 个通道)。
查兰赛,
这不是 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);
希望对您有所帮助。
迪内什
我一直在尝试使用数字系统处理系统工具箱来实现主动降噪 (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)
。我收到一条错误消息说
Error using AudioRecorder/step A given audio device may only be opened once.
是DSP系统工具箱的限制一次只能在一台录音机设备上操作,还是可以同时使用两台录音机设备?
有规定可以对同一音频设备进行多声道处理,但是如何实时处理来自两个独立设备的音频?
当您录制信号时,您应该从 2 个麦克风(每个称为 channel/observation - 即左声道和右声道)进行录制,并且您应该在传递信号之前将这两个观察结果合并为一个流对于 Matlab,您应该只将 1 个双通道信号输入传递到 dsp AudioRecorder 工具箱中——我认为它不接受两个信号源。当您读入数据时,它应该是一个包含 2 个向量的矩阵(假设您在 AudioRecorder 设置中指定了 2 个通道)。
查兰赛,
这不是 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);
希望对您有所帮助。
迪内什