Многие системные объекты имеют 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 файла управляет форматами кадра данных, в то время как фильтр управляет состояниями. Объект аудио устройства средства записи воспроизводит каждый аудио системы координат по мере его обработки.