Получите непрерывные аудиоданные

В этом примере показано, как настроить непрерывный аудио захват с помощью микрофона.

Создайте DataAcquisition

Создайте DataAcquisition с directsound как поставщик и добавляют канал аудиовхода в него с помощью addinput.

dq = daq("directsound");
addinput(dq,"Audio0",1,"Audio");

Настройте график БПФ

hf = figure;
hp = plot(zeros(1000,1));
T = title('Discrete FFT Plot');
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
grid on;

Установите ScansAvailableFcn

Обновите фигуру с БПФ живого входного сигнала путем установки ScansAvailableFcn.

dq.ScansAvailableFcn = @(src, evt) continuousFFT(src, hp);

Запустите захват

Фигура обновляется, в течение 10 секунд, когда микрофон используется.

start(dq,"Duration",seconds(10));
figure(hf);

function continuousFFT(dataHandle, plotHandle)
% Calculate FFT(data) and update plot with it.
data = read(daqHandle, daqHandle.ScansAvailableFcnCount, "OutputFormat", "Matrix");
Fs = daqHandle.Rate;

lengthOfData = length(data);
% next closest power of 2 to the length
nextPowerOfTwo = 2 ^ nextpow2(lengthOfData);

plotScaleFactor = 4;
% plot is symmetric about n/2
plotRange = nextPowerOfTwo / 2; 
plotRange = floor(plotRange / plotScaleFactor);

yDFT = fft(data, nextPowerOfTwo); 

h = yDFT(1:plotRange);
abs_h = abs(h);

% Frequency range
freqRange = (0:nextPowerOfTwo-1) * (Fs / nextPowerOfTwo);
% Only plot up to n/2 (as other half is the mirror image)
gfreq = freqRange(1:plotRange);  

% Update the plot
set(plotHandle, 'ydata', abs_h, 'xdata', gfreq);
drawnow
end