В этом примере показано, как создать график Stateflow®, который использует данные фиксированной точки, чтобы реализовать Фильтр Баттерворта lowpass. Путем разработки фильтра с данными фиксированной точки вместо данных с плавающей точкой можно симулировать модель с помощью меньшей памяти. Для получения дополнительной информации смотрите Данные Фиксированной точки в диаграммах Stateflow.
График Фильтра Lowpass является блок-схемой не сохраняющей состояние, которая принимает вход того и предоставляет тому выход. График содержит эти символы данных:
x
Осциллограф: Input
Ввод: Inherit:Same as Simulink
y
Осциллограф: Output
Ввод: fixdt(1,16,10)
x_n1
Осциллограф: Local
Ввод: fixdt(1,16,12)
y_n1
Осциллограф: Local
Ввод: fixdt(1,16,10)
b0
Осциллограф: Parameter
Ввод: fixdt(1,16,15)
b1
Осциллограф: Parameter
Ввод: fixdt(1,16,15)
a1
Осциллограф: Parameter
Ввод: fixdt(1,16,15)
Значения b0
, b1
, и a1
коэффициенты Фильтра Баттерворта lowpass.
Создавать график Фильтра Lowpass:
Создайте модель Simulink® с пустой диаграммой Stateflow путем ввода sfnew
в командной строке MATLAB®.
В диаграмме Stateflow добавьте блок-схему с одной ветвью, которая присваивает значения y
, x_n1
, и y_n1
.
Добавьте вход, выведите, локальный, и данные о параметре к графику, как описано в Добавляют Данные Stateflow.
Прежде, чем загрузить модель, MATLAB вызывает butter
функция, чтобы вычислить значения для параметров b0
, b1
, и a1
. Функция создает Фильтр Баттерворта lowpass первого порядка с нормированной частотой среза (2*pi*Fc/(Fs/2))
радианы в секунду, где:
Частотой дискретизации является Fs
= 1 000 Гц.
Частотой среза является Fc
= 50 Гц.
Функциональный выход B
содержит коэффициенты числителя фильтра в убывающих степенях z
. Функциональный выход A
содержит коэффициенты знаменателя фильтра в убывающих степенях z
.
Fs = 1000; Fc = 50; [B,A] = butter(1,2*pi*Fc/(Fs/2)); b0 = B(1); b1 = B(2); a1 = A(2);
Задавать коллбэк предварительной нагрузки для модели:
Во вкладке Modeling, при Setup, выбирают Model Settings> Model Properties.
В диалоговом окне Model Properties, на вкладке Callbacks, выбирают PreLoadFcn.
Введите код MATLAB для вызова функции предварительной нагрузки.
Нажать ОК.
Чтобы загрузить значения параметров к рабочему пространству MATLAB, сохраните, закройте и вновь откройте модель.
Чтобы завершить модель, добавьте блок Sine Wave, блок Data Type Conversion и блок Scope. Соедините и пометьте блоки согласно этой схеме.
Блок Sine Wave
Блок Sine Wave выводит сигнал с плавающей точкой. Блок имеет эти настройки:
Тип синуса: Time based
Время: Use simulation time
Амплитуда: 1
Смещение: 0
Частота: 2*pi*Fc
Фаза: 0
'SampleTime' : 1/Fs
Интерпретируйте векторные параметры как 1D: On
Блок Data Type Conversion
Блок Data Type Conversion преобразует сигнал с плавающей точкой от блока Sine Wave до сигнала фиксированной точки. Путем преобразования сигнала в фиксированную точку можно симулировать модель с помощью меньшей памяти. Блок имеет эти настройки:
Выходной минимум: []
Выходной максимум: []
Тип выходных данных: fixdt(1,16,14)
Заблокируйте установку типа выходных данных против изменений Fixed-Point Tool: Off
Ввод и вывод, чтобы иметь равный: Real World Value (RWV)
Целочисленный режим округления: Floor
Насыщайте на целочисленном переполнении: Off
'SampleTime' : -1
Блок Scope
Блок Scope имеет два входных порта, которые соединяются с сигналами ввода и вывода для графика Фильтра Lowpass. Чтобы отобразить два сигнала отдельно, выберите размещение осциллографа с двумя строками и одним столбцом.
Поскольку ни один из блоков в модели не имеет время непрерывной выборки, используйте дискретный решатель с этими параметрами конфигурации:
Время остановки: 0.1
Ввод: Fixed-step
Решатель: discrete (no continuous states)
Размер фиксированного шага (основной шаг расчета): 1/Fs
Сконфигурировать модель:
В редакторе Stateflow выберите Simulation> Model Configuration Parameters.
В панели Решателя, установленной дискретные параметры решателя.
Нажать ОК.
Когда вы симулируете модель, блок Scope отображает два сигнала. Главный сигнал показывает версию фиксированной точки входа синусоиды к графику. Нижний сигнал соответствует отфильтрованному выходу из графика. Фильтр удаляет высокочастотные значения из сигнала, но позволяет низкочастотным значениям проходить через неизменный график.
Data Type Conversion | Scope | Sine Wave | butter
| sfnew