Сравнение системных объектов и Функций MATLAB

Системные объекты и Функции MATLAB

Многие системные объекты имеют MATLAB® аналоги функций. Для простых разовых расчетов используйте функции MATLAB. Однако, если необходимо спроектировать и моделировать систему с множеством компонентов, используйте системные объекты. Использование системных объектов также подходит, если ваши расчеты требуют управления внутренними состояниями, имеют входы, которые изменяются с течением времени или обрабатывают большие потоки данных.

Построение динамической системы с различными фазами выполнения и внутренними состояниями с использованием только функций MATLAB потребует комплексного программирования. Вам понадобится код, чтобы инициализировать систему, проверить данные, управлять внутренними состояниями, а также сбросить и завершить работу системы. Многие из этих управленческих операций системные объекты выполняют автоматически во время выполнения. Путем объединения Системных объектов в программе с другими функциями MATLAB, можно оптимизировать код и улучшить эффективность.

Обработка аудио Данных с использованием только кода функций MATLAB

В этом примере показов, как записать код только функции MATLAB для чтения аудио данных.

Код считывает аудио данных из файла, фильтрует его и воспроизводит отфильтрованные аудио данные. Аудио данных считывается системами координат. Этот код дает тот же результат, что и код системных объектов в следующем примере, что позволяет вам сравнить подходы.

Найдите исходный аудио файла.

fname = 'speech_dft_8kHz.wav';

Получите общее количество выборок и частоту дискретизации из исходного файла.

audioInfo = audioinfo(fname);
maxSamples = audioInfo.TotalSamples;
fs = audioInfo.SampleRate;

Определите фильтр, который будет использоваться.

b = fir1(160,.15);

Инициализируйте состояния фильтра.

z = zeros(1,numel(b)-1);

Задайте количество аудио данных для обработки в одно время и инициализируйте индекс цикла while.

frameSize = 1024;
nIdx = 1;

Задайте цикл while, чтобы обработать аудио данных.

while nIdx <= maxSamples(1)-frameSize+1
    audio = audioread(fname,[nIdx nIdx+frameSize-1]);
    [y,z] = filter(b,1,audio,z);
    sound(y,fs);
    nIdx = nIdx+frameSize;
end  

Цикл использует явное индексирование и управление состояниями, что может быть утомительным и подверженным ошибкам подходом. Вы должны иметь подробные знания о состояниях, таких как, размеры и типы данных. Другой проблемой этого кода MATLAB является то, что звуковая функция не предназначена для работы в режиме реального времени. Получившийся звук измельчен и едва слышен.

Обработка аудио Данных с использованием системных объектов

В этом примере показов, как записать код системных объектов для чтения аудио данных.

Код использует Системные объекты из программного обеспечения DSP System Toolbox™, чтобы считать аудио данных из файла, фильтровать его, а затем воспроизводить отфильтрованные аудио данные. Этот код дает тот же результат, что и код MATLAB, показанный ранее, позволяя сравнить подходы.

Найдите исходный аудио файла.

fname = "speech_dft_8kHz.wav";

Определите Системную object™, чтобы считать файл.

audioIn = dsp.AudioFileReader(fname,'OutputDataType','single');

Определите системный объект для фильтрации данных.

filtLP = dsp.FIRFilter('Numerator',fir1(160,.15));

Задайте Системный объект для воспроизведения отфильтрованного аудио данных.

audioOut = audioDeviceWriter('SampleRate',audioIn.SampleRate);

Задайте цикл while, чтобы обработать аудио данных.

while ~isDone(audioIn)
    audio = audioIn();    % Read audio source file
    y = filtLP(audio);   % Filter the data
    audioOut(y);         % Play the filtered data
end

Этот код системных объектов устраняет проблемы, существующие в коде только для MATLAB. Не требуя явной индексации, объект reader файла управляет форматами кадра данных, в то время как фильтр управляет состояниями. Объект аудио устройства средства записи воспроизводит каждый аудио системы координат по мере его обработки.