Моделирование дискретных сигналов в Simulink

Генерирование сигналов в Simulink, естественно, имеет свои особенности. Рассмотрим их.

Возьмем из библиотеки блоков Simulink два блока: Sine Wave (из раздела Sources) и Scope (из раздела Sinks). Соединив их, получим простую схему (рис.4).

Рис.4. Схема генерации и отображения синусоидального сигнала

Затем двойным щелчком по блоку осциллоскопа (осциллографа) активизируем окно, имитирующее экран осциллоскопа, и запустим модель (кнопка Start simulation). В результате получим изображение отрезка синусоиды (рис.5).

Рис.5. Отображение отрезка синусоиды на экране осциллоскопа

Как видим, генерировать гармонический сигнал в среде Simulink даже проще, чем в среде MATLAB. Однако это первое впечатление весьма обманчиво. Действительно, ведь важно еще уметь управлять параметрами гармонического сигнала. То, что амплитуда гармонического сигнала оказалась равной единице – нам просто «повезло». Действительно, по умолчанию амплитуда генерируемого сигнала принята равной единице. Однако частотой, начальной фазой и длительностью сигнала мы пока не управляем.

Дважды щелкнем по блоку Sine Wave – в результате появится окно настроек параметров (рис.6). Щелкнув по кнопке Help, получим инструкцию по данному блоку, сущность которой сводится вкратце к тому, что в данном блоке выполняется операция

 

 

Из приведенной формулы и надписей на рис.6 становится понятным смысл четырех переменных: амплитуды, угловой частоты, начальной фазы и постоянной составляющей. Остается пока зашифрованным смысл переменной «время».

Останавливаясь на этом важном вопросе, отметим различие понятий «время» и «модельное время». Так, генерирование отрезка сигнала длительностью 1 с (модельное время) может длиться значительно, чем более короткий промежуток времени, например, 0.1 с (реальное время). Скорость генерирования зависит от объема вычислений, быстродействия компьютера, от выбранного «решателя», т.е. алгоритма моделирования и т.д. Кстати, вполне возможен обратный эффект – для сложного алгоритма процедура моделирования отрезка сигнала длительностью 0.1 с может растянуться на несколько секунд.

Сигнал может генерироваться двух типов: непрерывный time-based и дискретный sample-based. Соответственно, для моделирования работы непрерывных систем рекомендуют использовать непрерывный тип time-based, а для моделирования работы дискретных систем – дискретный тип sample-based.

Если установлен тип time-based, тогда параметр Sample time может принимать значения:

– 0 (по умолчанию) – блок работает в непрерывном режиме;

– > 0 – блок работает в дискретном режиме;

– -1 – блок наследует тот же режим, что и принимающий блок.

Как указывается в Help, работа в непрерывном режиме может приводить к большим погрешностям генерации на больших промежутках модельного времени.

 

Рис.6. Окно настроек параметров блока Sine Wave

 

Работа в дискретном режиме заставляет блок вести себя так, как если бы к выходу непрерывного генератора был присоединен блок Zero-Order Hold(из раздела Discrete). Действительно, собрав две схемы (рис.7) и задав в обоих случаях значение параметра Sample time, равное 0.5 (окно настройки блока Zero-Order Hold показано на рис.8), получаем идентичные результаты (рис.9).

Рис.7. Вставка в схему генерации и отображения синусоидального сигнала

блокаZero-Order Hold

 

Рис.8. Окно настройки блока Zero-Order Hold

 

Рис.9. Идентичность результата работы схем показанных на рис. 7

 

Таким образом, блок Zero-Order Hold можно трактовать как «дискретизатор», т.е. часть аналого-цифрового преобразователя (АЦП), ответственную за дискретизацию сигнала. Иногда блок Zero-Order Hold именуют АЦП. По нашему мнению, это не корректно, поскольку дискретизированный сигнал в «подлинном» АЦП подвергается еще и квантованию по уровню. В блоке Zero-Order Hold, однако, квантование не производится.

Несколько замечаний о способах построения графиков. Помимо блока Scope, график можно построить и с помощью блока X-Y-Graf, на верхний вход X которого нужно подать последовательность моментов времени с помощью блока Clock (часы), а на нижний вход Y – значения генерируемого сигнала (рис.10).

Рис.10. Применение для построения графиков блока X-Y-Graf

В результате предварительно настроенный (в соответствующем окне настройки задаются граничные значения аргумента и функции, а также указывается значение параметра Sample time) графопостроитель выдаст показанный на рис.11 график, если для блока X-Y-Graf задано Sample time=-1(т.е. период дискретизации наследуется).

Рис.11. Отображение синусоиды блоком X-Y-Graf

 

График будет несколько иным (рис.12), если для блока X-Y-Graf задано Sample time=0.5.

 

 

Рис.12. Отображение синусоиды блоком X-Y-Graf, Sample time=0.5

Еще об одном способе построения графиков. Массивы отсчетов моментов времени и соответствующих значений сигнала можно с помощью блока To Workspace экспортировать из среды Simulink в среду MATLAB (рис.13).

Рис.13. Применение блока To Workspace

 

При этом, как показывает практика, лучше всего задать формат array для экспортируемых данных (рис.14).

 

Рис.14. Задание форматаarrayдля блока To Workspace

 

Дальнейшее построение графика в среде MATLAB с помощью команды plot(x,y) не представляет никакого труда (рис.15).

Рис.15. Построение графика данных, экспортированных

с помощью блока To Workspace

 

Подытожим полученные результаты.

Сигнал типа time-based при работе блока генерации в режиме непрерывного времени имеет вид гладкой функции времени, а в режиме дискретного времени – вид ступенчатого сигнала, такого, как если бы к выходу генератора плавного сигнала был подсоединен блок Zero-Order Hold, являющийся дискретизатором типа «отсчет-хранение».

Иными словами, задавая режим дискретного времени, мы уходим от необходимости в использовании блока Zero-Order Hold.

А теперь сгенерируем в Simulink отрезок дискретного гармонического сигнала с темы же параметрами, что были заданы в MATLAB: амплитуда 1, частота 100 Гц, частота дискретизации 1000 Гц, начальная фаза π/2, количество отсчетов 20.

Собираем снова схему из генератора и осциллоскопа. В окне-маске настройки генератора производим указание нужных числовых значений параметров, задаем тип time-based и присваиваем значение Sample time = 0.001 (рис.16).

Рис.16. Окно настройки генератора

После запуска модели получаем на экране осциллоскопа совсем не ту картину, которую ожидали (рис.17).

Рис.17. Результат осциллоскопа

Причина проста – нужно еще настроить параметры моделирования: задать начало и конец модельного времени (в нашем случае это 0 и 0.02 с, соответственно), а также выбрать алгоритм моделирования (тип «решателя»). На рис.18 показано окно настроек параметров моделирования, активизирующееся при выборе позиции меню Simulation/Simulation parameters. Зачастую эти параметры настраиваются автоматически, но для выделения отдельных частей функции знание их необходимо.

 

Рис.18. Окно настроек параметров моделирования

Кроме того, настроим параметры осциллоскопа, щелкнув по кнопке Parameters на окне Scope (рис.19 а,б).

а) б)

Рис.19. Настройка параметров осциллоскопа:

а) настройка вкладки General; б) настройка вкладки Data history

После запуска модели на экране осциллоскопа появится изображение (рис.20).

 

Рис.20. Результат осциллоскопа после проведенных настроек

 

Поскольку параметры осциллоскопа были заданы так, чтобы в рабочее пространство выводился двумерный массив ScopeDataзначений аргумента и функции, с помощью команд

>> y1=ScopeData(:,1);

>> y2=ScopeData(:,2);

>> plot(y1,y2)

можно построить график сгенерированной функции средствами MATLAB (рис.21).

Рис.21. График сгенерированной функции средствами MATLAB

 

Сравнивая рис.21 и рис.2, замечаем лишь одно отличие – при моделировании в Simulink сгенерирована 21 точка, тогда как в MATLAB генерировалось 20 точек. Причина различия проста: на интервале модельного времени при частоте дискретизации Fs находится TFs+1 моментов времени, для которых будет сгенерирован сигнал. Очевидно, это обстоятельство легко учесть, добившись полного совпадения результатов моделирования в средах MATLAB и Simulink.