Этот пример показывает, как получить частотную характеристику моделей Simulink, когда аналитическая линеаризация блока блоком не предоставляет точный ответ из-за основанной на событии динамики в пути к линеаризации. Примерами таких систем являются модели с инициированными подсистемами или модели с помощью входных сигналов Модуляции ширины импульса (PWM).
Откройте модель Simulink для синхронизации механизма. Обратите внимание на то, что аналитическая линеаризация блока блоком этой модели от угла дросселя до скорости вращения двигателя дает результат линеаризации нуля из-за инициированной подсистемы "Сжатие" в пути к линеаризации.
scdengine
mdl = 'scdengine';
io = getlinio(mdl);
linsys = linearize(mdl,io)
linsys = D = ThrottleAngl EngineSpeed 0 Static gain.
Входной сигнал Sinestream является самым надежным входным сигналом для оценки точной частотной характеристики модели Simulink с помощью FRESTIMATE. Это - сигнал, который состоит из отдельных синусоидальных сигналов, которые добавлены в конец друг друга. Команда FRESTIMATE моделирует модель для каждой частоты в sinestream входном сигнале, заданном в параметре "Частоты", для соответствующей суммы периодов, заданных в параметре "NumPeriods". После симуляции FRESTIMATE использует выходной сигнал, чтобы вычислить ответ на каждой частоте. Обратите внимание на то, что FRESTIMATE использует только периоды после того, как система достигнет к устойчивому состоянию той входной частоты, заданной в параметре "SettlingPeriods". Создайте сигнал sinestream с логарифмически распределенными отличными частотами между 0,1 и 10 рад/с:
in = frest.Sinestream('Frequency',logspace(-1,1,50),'Amplitude',1e-3)
The sinestream input signal: Frequency : [0.1 0.10985 0.12068 0.13257 ...] (rad/s) Amplitude : 0.001 SamplesPerPeriod : 40 NumPeriods : 4 RampPeriods : 0 FreqUnits (rad/s,Hz): rad/s SettlingPeriods : 1 ApplyFilteringInFRESTIMATE (on/off) : on SimulationOrder (Sequential/OneAtATime): Sequential
Обратите внимание на то, что по умолчанию каждая частота в sinestream входном сигнале моделируется в течение 4 периодов, т.е. "NumPeriods" 4 для всех частот, и конец первого периода задан, чтобы быть, где система достигает к устойчивому состоянию, т.е. "SettlingPeriods" 1 для всех частот, таким образом FRESTIMATE использует последние 3 периода выходных сигналов.
Используя этот sinestream входной сигнал, выполните оценку частотной характеристики с помощью команды FRESTIMATE и отобразите получившиеся данные о частотной характеристике на графике:
[sys,simout] = frestimate(mdl,io,in); bode(sys)
Можно осмотреть результаты оценки с помощью Средства просмотра Результатов симуляции FRESTIMATE. Средство просмотра показывает временной интервал и результаты симуляции частотного диапазона для выбранной частоты (частот) и итоговой диаграммы Боде, где можно в интерактивном режиме переключиться между частотами. На частоты сигнала sinestream наносят цветную маркировку во всех графиках.
frest.simView(simout,in,sys);
Можно использовать средство просмотра в качестве инструмента, чтобы диагностировать проблемы. Примеры проблем, которые влияют на точность оценки частотной характеристики, включают:
Не достижение устойчивого состояния
Возбуждение нелинейности
Столкновение с нестабильностью
Другой входной сигнал, который можно использовать при оценке данных о частотной характеристике из модели Simulink, является щебетом частоты. Щебет частоты отличается от sinestream, по которому мгновенно отличается частота.
Можно использовать входные сигналы щебета, чтобы получить более быструю оценку частотной характеристики. Однако результаты оценки частоты, полученные с входом щебета, могли быть менее надежными, чем те полученные с входом sinestream, потому что каждая частота не моделируется достаточно долго, чтобы управлять системой к устойчивому состоянию на той частоте. Создайте сигнал щебета что развертки между частотами 0.1 и 10 рад/с логарифмически:
in_chirp = frest.Chirp('FreqRange',[0.1 10],'Amplitude',1e-3,... 'SweepMethod','logarithmic','NumSamples',3000);
Используя сигнал щебета, выполните оценку частотной характеристики:
sys_chirp = frestimate(mdl,io,in_chirp);
Постройте результаты, полученные с sinestream и входными сигналами щебета вместе:
bode(sys,sys_chirp,'r')
Закройте модель:
bdclose('scdengine');