В этом примере показано, как создать график Stateflow ®, которая использует данные с фиксированной точкой для реализации низкочастотного фильтра Баттерворта. Разработав фильтр с данными с фиксированной точкой вместо данных с плавающей точкой, можно симулировать модель, используя меньше памяти. Для получения дополнительной информации смотрите Данные с Фиксированной Точкой в Диаграммах Stateflow.
Lowpass Filter графика является графиком потока без гражданства, которая принимает один вход и обеспечивает один выход. График содержит следующие символы данных:
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 Filter графика:
Создайте модель Simulink ® с пустой диаграммой Stateflow путем ввода sfnew
в командной строке MATLAB ®.
На диаграмме Stateflow добавьте блок-схему с одной ветвью, которая присваивает значения y
, x_n1
, и y_n1
.
Добавьте входные, выходные, локальные и параметрические данные к графику, как описано в Add Stateflow Data.
Перед загрузкой модели MATLAB вызывает butter
(Signal Processing Toolbox) функция для вычисления значений параметров b0
, b1
, и a1
. Функция создает низкочастотный фильтр Баттерворта первого порядка с нормализованной частотой среза (2*pi*Fc/(Fs/2))
радианы в секунду, где:
Частота дискретизации Fs
= 1000 Гц.
Частота среза 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)
В диалоговом окне Свойства модели на вкладке Коллбэки выберите PreLoadFcn.
Введите код MATLAB для вызова функции предварительной загрузки.
Нажмите кнопку ОК.
Чтобы загрузить значения параметров в рабочее пространство MATLAB, сохраните, закройте и снова откройте модель.
Чтобы завершить модель, добавьте блок Sine Wave (Simulink), блок Data Type Conversion (Simulink) и блок Scope (Simulink). Соедините и пометьте блоки в соответствии с этой схемой.
Блок Sine wave
Блок Sine Wave выводит сигнал с плавающей точкой. Блок имеет следующие настройки:
Тип синуса: Time based
Время: Use simulation time
Амплитуда: 1
Смещение: 0
Частота: 2*pi*Fc
Фаза: 0
Шаг расчета: 1/Fs
Интерпретируйте параметры вектора как 1-D: On
Блок преобразования типа данных
Блок Data Type Conversion преобразует сигнал с плавающей точкой от блока Sine Wave в сигнал с фиксированной точкой. Преобразовав сигнал в тип с фиксированной точкой, можно симулировать модель, используя меньше памяти. Блок имеет следующие настройки:
Выходной минимум: []
Выходной максимум: []
Выход данных: fixdt(1,16,14)
Блокируйте настройку типа выходных данных от изменений с помощью инструментов с фиксированной точкой: Off
Вход и выход равны: Real World Value (RWV)
Целое число целочисленного округления: Floor
Насыщение при целочисленном переполнении: Off
Шаг расчета: -1
Блок Scope
Блок Возможности имеют два порта входа, которые соединяются с входом и выходными сигналами для Lowpass Filter графика. Чтобы отобразить два сигнала отдельно, выберите размещение возможностей с двумя строками и одним столбцом.
Поскольку ни один из блоков в модели не имеет непрерывного шага расчета, используйте дискретный решатель с этими параметрами конфигурации:
Время остановки: 0.1
Тип: Fixed-step
Решатель: discrete (no continuous states)
Размер фиксированного шага (основной шаг расчета): 1/Fs
Чтобы сконфигурировать модель:
На вкладке Моделирование (Modeling) в разделе Настройка (Setup) выберите Настройки модели (Model Settings).
На панели Решатель установите параметры дискретного решателя.
Нажмите кнопку ОК.
Когда вы моделируете модель, блок Scope отображает два сигнала. Верхний сигнал показывает версию синусоиды с фиксированной точкой, вход на график. Нижний сигнал соответствует отфильтрованному выходу с графика. Фильтр удаляет высокочастотные значения из сигнала, но позволяет низкочастотным значениям проходить через график без изменений.
sfnew
| butter
(Signal Processing Toolbox) | Data Type Conversion (Simulink) | Scope (Simulink) | Sine Wave (Simulink)