Много Системных объектов имеют дубликаты функции 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);
Задайте сумму аудиоданных к процессу одновременно и инициализируйте индекс цикла с условием продолжения.
frameSize = 1024; nIdx = 1;
Задайте цикл с условием продолжения, чтобы обработать аудиоданные.
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 ~isDone(audioIn) audio = audioIn(); % Read audio source file y = filtLP(audio); % Filter the data audioOut(y); % Play the filtered data end
Этот код Системных объектов избегает проблем, существующих в коде только для MATLAB. Не требуя явной индексации, объект средства чтения файлов управляет форматами кадра данных, в то время как фильтр управляет состояниями. Объект средства записи аудио устройства проигрывает каждую аудио систему координат, когда это обрабатывается.