如何在matlab中实时处理多个mics输入音频流
我需要得到3个输入音频流到matlab同时使用3个USB麦克风,并找出实时的最高振幅 这是mics初始化如何在matlab中实时处理多个mics输入音频流,matlab,audio,signals,Matlab,Audio,Signals,我需要得到3个输入音频流到matlab同时使用3个USB麦克风,并找出实时的最高振幅 这是mics初始化 mic1= dsp.AudioRecorder('DeviceName','ÇáãíßÑæÝæä (10- USB PnP Sound Device)', 'SampleRate', 48000, 'NumChannels', 1); mic2= dsp.AudioRecorder('DeviceName','ÇáãíßÑæÝæä (9- USB PnP Sound Device)', 'S
mic1= dsp.AudioRecorder('DeviceName','ÇáãíßÑæÝæä (10- USB PnP Sound Device)', 'SampleRate', 48000, 'NumChannels', 1);
mic2= dsp.AudioRecorder('DeviceName','ÇáãíßÑæÝæä (9- USB PnP Sound Device)', 'SampleRate', 48000, 'NumChannels', 1);
mic3= dsp.AudioRecorder('DeviceName','ÇáãíßÑæÝæä (8- USB PnP Sound Device)', 'SampleRate', 48000, 'NumChannels', 1);
frame1=step(mic1);
frame2=step(mic2);
frame3=step(mic3);
接下来的步骤是什么?通过检查您的代码,您有三个音频信号,每个信号有一个通道。如果我正确地理解了您想要的,那么您希望找到随时间推移任何一个信号发出的最高声音。但是,如果我理解正确,您不能实时执行此操作,因为
AudioWriter
的step
一次只能捕获一帧。由于您专门尝试从所有三个音频设备捕获音频,并且捕获音频的唯一方法是使用步骤
,因此您必须连续调用步骤
因此,您需要分别捕获所有三个音频信号,然后进行分析。您还需要在某一点后剪辑声音,因此可能需要5秒左右的时间。因此,您可以这样做:
time_end = 5;
%// Capture audio signal 1
tic;
frame1 = [];
while toc < time_end
audio_in = step(mic1);
frame1 = [frame1; audio_in(:)];
end
%// Capture audio signal 2
tic;
frame2 = [];
while toc < time_end
audio_in = step(mic2);
frame2 = [frame2; audio_in(:)];
end
%// Capture audio signal 3
tic;
frame3 = [];
while toc < time_end
audio_in = step(mic3);
frame3 = [frame3; audio_in(:)];
end
max_振幅
将包含三个信号中每个信号在特定时间点的整体最高点,loc
将告诉您在阵列中找到它的位置。如果您想找到实际发生的时间,只需取loc
并乘以采样时间(1/48000)
。请记住,loc
将被1索引而不是0索引,因此您需要在乘以采样率之前减去1
因此:
%// Find lengths for all three signals
l1 = numel(frame1);
l2 = numel(frame2);
l3 = numel(frame3);
max_length = max([l1, l2, l3]);
%// Zero pad signals to make same length
frame1_pad = zeros(max_length,1);
frame2_pad = zeros(max_length,1);
frame2_pad = zeros(max_length,1);
frame1_pad(1:l1) = frame1;
frame2_pad(1:l2) = frame2;
frame3_pad(1:l3) = frame3;
%// Find maximum among each sample
max_signal = max([frame1_pad, frame2_pad, frame3_pad], [], 1);
%// Find the maximum amplitude overall and location
[max_amplitude, loc] = max(max_signal);
time_it_happened = (loc-1)*(1/48000);
发生的时间
将包含发生最大振幅的时间
祝你好运 我很难理解这句话:
实时找出最高振幅
。您想单独查看每个音频信号,并找到它们的最高振幅吗?请解释。我想在三个音频信号输入系统时比较它们,找出特定时间最高的一个(最大的声音)。非常感谢。我想投票支持你的答案,但我没有足够的声誉。@senox-没问题:)你的接受足够好。谢谢你,祝你好运!