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

Разработка системыATLAB

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

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

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

  3. Собрать компоненты в систему - Написание программы MATLAB, которая включает эти системные объекты, соединяя их с помощью переменного MATLAB в качестве входов и выходов для симуляции вашей системы. См. Раздел «Соединение системных объектов»

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

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

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

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

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

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

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

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

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

Сконфигурируйте компоненты

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

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

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

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

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

Сконфигурируйте значения свойств компонентов

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

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

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

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

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

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

Создание и конфигурирование компонентов в одно и то же время

В этом примере показано, как создать компоненты системного объекта и сконфигурировать требуемые свойства одновременно. Задайте каждое свойство с парой аргументов 'Name', значение.

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

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 в системные объекты и вне них.

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

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

Соединение компонентов в системе

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

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

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

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

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

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

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

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

В этом примере показано, как изменить тип фильтра на фильтр верхних частот, когда код работает, изменяя 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