Я написал простую программу MATLAB ниже для демодуляции аудиосигнала, который ранее был частотно модулирован с несущей частотой 10000 Гц.Программа записывает частотно-модулированный сигнал, сохраняет его на диске (для возможного последующего использования), затем извлекает и демодулирует его.Теперь я хотел бы иметь возможность демодулировать (и отображать) сигнал непрерывно по мере его поступления, без необходимости сначала сохранять его.Любые предложения о том, как изменить код MATLAB ниже?
% FM Demodulate an Audio File June 5, 2018
%% Record the previously frequency-modulated signal for a few seconds.
Fs = 44100; % Sample frequency of the sound wave
duration = 5; % Duration of recording in seconds
recObj = audiorecorder(Fs,16,1); % Sets up the recording conditions
pause(4) % Pause before recording
disp('Start recording.')
recordblocking(recObj,duration);
disp('End of recording.');
%% Store data in double-precision array.
filename = 'RecordedWave.wav';
myRecording = getaudiodata(recObj);
Fs = get(recObj, 'SampleRate');
audiowrite(filename,myRecording,Fs) % Writes the y and Fs as a .wav file
%% Read it back into memory
[y,Fs] = audioread(filename);
% The above statement reads the stored .wav file and loads the y vector
% as well as the stored value of Fs for that .wav file.
%% Demodulate the recorded high-frequency FM sound signal
z = demod(y,10000,44100,'fm');
%% Make and then apply a bandpass filter
filterOrder = 2;
fcutlow = 2;
fcuthigh= 10;
[b,a] = butter(filterOrder,[fcutlow,fcuthigh]/(Fs/2),'bandpass');
z_filtered = filter(b,a,z); % Apply the bandpass filter
%% Plot the demodulated and filtered signal
figure
t_sec = (0:1/Fs:duration-1/Fs); % here is the vector of time
plot(t_sec,z_filtered)