Системные объекты по сравнению с функциями 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);

Задайте сумму аудиоданных к процессу когда-то и инициализируйте индекс цикла с условием продолжения.

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

Была ли эта тема полезной?