exponenta event banner

Проектирование системы в MATLAB с использованием системных объектов

Проектирование и моделирование системы в MATLAB

Системные объекты позволяют проектировать и моделировать систему в MATLAB ®. Системные объекты используются в MATLAB, как показано на этой схеме.

  1. Создать отдельные компоненты - создание системных объектов для использования в системе. Создать отдельные компоненты. Помимо системных объектов, поставляемых с системными панелями инструментов, можно также создавать собственные системные объекты. См. раздел Создание системных объектов.

  2. Настройка компонентов - при необходимости измените значения свойств объектов для моделирования конкретной системы. Все свойства System object™ имеют значения по умолчанию, которые можно использовать без их изменения. См. раздел Настройка компонентов.

  3. Собрать компоненты в систему (Assemble Components Into System) - запись программы MATLAB, включающей эти системные объекты, с использованием переменных MATLAB в качестве входных и выходных данных для моделирования системы. См. раздел Подключение системных объектов.

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

Создание отдельных компонентов

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

В этом разделе показано, как настроить систему с помощью предварительно определенных компонентов DSP System Toolbox™ и Audio Toolbox™:

  • dsp.AudioFileReader - Чтение файла аудиоданных

  • dsp.FIRFilter - Фильтрация аудиоданных

  • audioDeviceWriter - Воспроизведение отфильтрованных аудиоданных

Сначала создайте объекты-компоненты, используя параметры свойств по умолчанию.

audioIn = dsp.AudioFileReader;
filtLP = dsp.FIRFilter;
audioOut = audioDeviceWriter;

Настройка компонентов

Когда конфигурировать компоненты

Если свойства объекта не были заданы при его создании и не требуется использовать значения по умолчанию, необходимо явно задать эти свойства. Некоторые свойства позволяют изменять их значения во время работы системы. Дополнительные сведения см. в разделе Реконфигурирование объектов.

Большинство свойств не зависят друг от друга. Однако некоторые свойства объекта System включают или отключают другое свойство или ограничивают значения другого свойства. Чтобы избежать ошибок или предупреждений, перед установкой зависимого свойства необходимо задать контролирующее свойство.

Отображение значений свойств компонента

Чтобы отобразить текущие значения свойств объекта, введите имя дескриптора этого объекта в командной строке (например, audioIn). Для отображения значения определенного свойства введите objecthandle.propertyname (например, audioIn.FileName).

Настройка значений свойств компонента

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

Используйте эту процедуру, если компоненты были созданы отдельно от их конфигурирования. Можно также создать и настроить компоненты одновременно, как описано в следующем примере.

Для объекта чтения файлов укажите файл для чтения и задайте тип выходных данных.

Для объекта фильтра задайте коэффициенты числителя фильтра с помощью функции fir1, которая задает порядок фильтра нижних частот и частоту отсечения.

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

audioIn.Filename = "speech_dft_8kHz.wav";
audioIn.OutputDataType = "single";
filtLP.Numerator = fir1(160,.15);
audioOut.SampleRate = audioIn.SampleRate;

Создание и настройка компонентов одновременно

В этом примере показано, как создать компоненты объекта System и одновременно настроить требуемые свойства. Укажите каждое свойство с парой аргументов Name и Value.

Создайте объект чтения файлов, укажите файл для чтения и задайте тип выходных данных.

audioIn = dsp.AudioFileReader("speech_dft_8kHz.wav",...
                              'OutputDataType',"single");

Создайте объект фильтра и укажите числитель фильтра с помощью функции fir1. Укажите порядок фильтрации нижних частот и частоту отсечения функции fir1.

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

Создайте объект аудиоплеера и установите частоту дискретизации той же скорости, что и входные данные.

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

Сборка компонентов в систему

Подключение системных объектов

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

Основное отличие использования системных объектов от функций состоит в том, что системные объекты используют двухшаговый процесс. Сначала создается объект, устанавливаются его параметры, а затем выполняется запуск объекта. Запуск объекта инициализирует его и управляет потоком данных и управлением состоянием системы. Как правило, объект System вызывается в цикле кода.

Выходные данные объекта используются в качестве входных данных для другого объекта. Для некоторых системных объектов можно использовать свойства этих объектов для изменения входных или выходных данных. Чтобы убедиться, что используется соответствующее количество входов и выходов, можно использовать nargin и nargout для любого объекта System. Сведения обо всех доступных функциях системных объектов см. в разделе Функции системных объектов.

Подключение компонентов в системе

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

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

Запуск системы

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

То, что нельзя изменить во время работы системы

Первый вызов объекта System инициализирует и запускает объект. Когда объект System начал обработку данных, невозможно изменить неперестраиваемые свойства.

В зависимости от объекта System также могут быть ограничены дополнительные спецификации:

  • Размер ввода

  • Сложность ввода

  • Тип входных данных

  • Настраиваемые типы данных свойств

  • Типы данных дискретного состояния

Если автор объекта System ограничил эти спецификации, при попытке изменить их во время использования объекта System появляется ошибка.

Перенастройка объектов

Изменить свойства

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

Некоторые свойства объекта настраиваются, что позволяет изменять их, даже если объект используется. Большинство свойств объекта System не настраиваются. Для определения возможности настройки отдельного свойства см. страницу ссылки на объект.

Изменение сложности ввода, размеров или типа данных

Во время использования объекта после вызова алгоритма некоторые системные объекты не допускают изменения сложности ввода, размера или типа данных. Если объект System ограничивает эти спецификации, можно вызвать release для изменения этих спецификаций. Запрос release также сбрасывает другие аспекты объекта System, такие как состояния и дискретные состояния.

Изменение настраиваемого свойства в системе

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

reset(audioIn);% Reset audio file
Wn = [0.05,0.1,0.15,0.2];
for x=1:4000
    Wn_X = ceil(x/1000);
    filtLP.Numerator = fir1(160,Wn(Wn_X),'high');
    audio = audioIn();    % Read audio source file
    y = filtLP(audio);    % Filter the data
    audioOut(y);          % Play the filtered data
end