В этом примере показано, как построить диаграмму Stateflow ®, использующую данные с фиксированной точкой для реализации фильтра Butterworth нижних частот. При проектировании фильтра с данными с фиксированной запятой вместо данных с плавающей запятой можно моделировать модель с использованием меньшего объема памяти. Дополнительные сведения см. в разделе Фиксированные данные в диаграммах потока состояний.

Диаграмма фильтра нижних частот представляет собой блок-схему без состояния, которая принимает один вход и обеспечивает один выход. Диаграмма содержит следующие символы данных:
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 - коэффициенты фильтра Баттерворта нижних частот.
Чтобы построить диаграмму фильтра нижних частот, выполните следующие действия.
Создание модели Simulink ® с пустой диаграммой Stateflow путем вводаsfnew в командной строке MATLAB ®.
В диаграмме Stateflow добавьте блок-схему с одной ветвью, которая назначает значения y, x_n1, и y_n1.
Добавьте входные, выходные, локальные данные и данные параметров в диаграмму, как описано в разделе Добавление данных потока состояний.
Перед загрузкой модели MATLAB вызывает butter(Панель инструментов обработки сигналов) для вычисления значений параметров 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, сохраните, закройте и снова откройте модель.
Чтобы завершить модель, добавьте блок синусоидальной волны (Simulink), блок преобразования типа данных (Simulink) и блок области (Simulink). Подключите и промаркируйте блоки в соответствии с этой схемой.

Блок синусоидальной волны
Блок синусоидальной волны выдает сигнал с плавающей запятой. Блок имеет следующие настройки:
Тип синуса: Time based
Время: Use simulation time
Амплитуда: 1
Смещение: 0
Частота: 2*pi*Fc
Этап: 0
Время выборки: 1/Fs
Интерпретировать векторные параметры как 1-D: On
Блок преобразования типов данных
Блок преобразования типа данных преобразует сигнал с плавающей запятой из блока синусоидальной волны в сигнал с фиксированной запятой. Преобразуя сигнал в тип с фиксированной точкой, можно моделировать модель с использованием меньшего объема памяти. Блок имеет следующие настройки:
Минимальный выходной сигнал: []
Максимальная выходная мощность: []
Тип выходных данных: fixdt(1,16,14)
Блокировка параметров типа выходных данных от изменений с помощью инструментов с фиксированной точкой: Off
Вход и выход должны быть равны: Real World Value (RWV)
Режим округления целых чисел: Floor
Насыщение при целочисленном переполнении: Off
Время выборки: -1
Блок области
Блок Scope имеет два входных порта, которые подключаются к входному и выходному сигналам для диаграммы фильтров нижних частот. Для раздельного отображения двух сигналов выберите формат области с двумя строками и одним столбцом.
Поскольку ни один из блоков в модели не имеет непрерывного времени выборки, используйте дискретный решатель со следующими параметрами конфигурации:
Время остановки: 0.1
Тип: Fixed-step
Решатель: discrete (no continuous states)
Фиксированный размер шага (основное время выборки): 1/Fs
Чтобы настроить модель, выполните следующие действия.
На вкладке Моделирование (Modeling) в разделе Настройка (Setup) выберите Параметры модели (Model Settings).
На панели Решатель (Solver) задайте параметры дискретного решателя.
Нажмите кнопку ОК.
При моделировании модели в блоке Область (Scope) отображаются два сигнала. Верхний сигнал показывает фиксированную версию синусоидального входа в диаграмму. Нижний сигнал соответствует отфильтрованному выходу из диаграммы. Фильтр удаляет высокочастотные значения из сигнала, но позволяет низкочастотным значениям проходить через диаграмму без изменений.

sfnew | butter (Панель инструментов обработки сигналов) | Преобразование типов данных (Simulink) | Область (Simulink) | Синусоидальная волна (Simulink)