Системные объекты позволяют вам проектировать и моделировать систему в MATLAB®. Системные объекты используются в MATLAB, как показано на этой схеме.
Создание отдельных компонентов - создание системных объектов для использования в системе. Создание отдельных компонентов. В дополнение к системным объектам, поставляемым с Системными тулбоксами, можно также создать собственные Системные объекты. См. «Создание системных объектов».
Сконфигурируйте компоненты - при необходимости измените значения свойств объектов, чтобы смоделировать конкретную систему. Все свойства System object™ имеют значения по умолчанию, которые можно использовать, не меняя их. См. «Настройка компонентов».
Собрать компоненты в систему - Написание программы MATLAB, которая включает эти системные объекты, соединяя их с помощью переменного MATLAB в качестве входов и выходов для симуляции вашей системы. См. Раздел «Соединение системных объектов»
Запуск системы - Запуск программы. Можно изменять настраиваемые свойства во время работы системы. См. «Запуск системы» и «Перенастройка объектов».
Пример в этом разделе показывает, как использовать системные объекты, предопределенные в программном обеспечении. Если вы используете функцию для создания и использования Системного объекта, задайте создание объекта с помощью условного кода. Обусловливания создания предотвращает ошибки, если эта функция вызывается в цикле. Можно также создать собственные системные объекты, см. раздел «Создание системных объектов».
В этом разделе показано, как настроить систему с помощью предопределенных компонентов из 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