exponenta event banner

Данные с фиксированной точкой в диаграммах потока состояний

Числа с фиксированной точкой используют целые числа и целочисленную арифметику для аппроксимации вещественных чисел. Они являются эффективным средством для выполнения вычислений с использованием реальных чисел без необходимости поддержки с плавающей запятой в базовом оборудовании системы.

Номера с фиксированной точкой

Числа с фиксированной точкой представляют реальные числа с использованием схемы кодирования:

VVapprox = Λ + B.

  • V - точное действительное значение, которое требуется аппроксимировать числом с фиксированной точкой.

  • Vapprox - это приблизительное действительное значение, которое является результатом представления с фиксированной точкой.

  • Q - целое число, которое кодирует число с фиксированной точкой. Это значение называется квантованным целым числом.

  • S - коэффициент, определяющий точность представления с фиксированной точкой. Это значение называется уклоном.

  • B - аддитивная коррекция, называемая смещением.

Квантованное целое число Q является единственной частью представления с фиксированной точкой, которая изменяется по значению. В сгенерированном коде величины S и B являются постоянными и отображаются только в виде буквенных чисел или выражений. Если число с фиксированной точкой изменяется, его квантованное целое число Q изменяется, но S и B остаются неизменными.

Для определения квантованного целого числа Q, соответствующего вещественному значению V, округляют величину (V-B )/S до целого числа. Например, для представления числа V = 15,345 в типе с фиксированной точкой с наклоном S = 0,5 и смещением B = 0,1 используется квантованное целое число

Q = раунд ((V - B )/S) = раунд ((15,345 - 0,1 )/0,5) = раунд (30,49) = 30.

Так как вы округляете Q до целого числа, вы теряете некоторую точность в представлении числа 15.345. Число, которое фактически представляет Q, равно

Vapprox = SUN+ B = 0,5 ⨉ 30 + 0,1 = 15,1.

Использование чисел с фиксированной точкой для представления вещественных чисел целыми числами приводит к потере некоторой точности. Однако при подходящем выборе S и B можно минимизировать эти потери до приемлемых уровней. Например, изменяя схему кодирования на использование S = 0,25 и B = 0,1, можно представить число V = 15,345 с большей точностью как:

Q = раунд ((V - B )/S) = раунд ((15,345 - 0,1 )/0,25) = раунд (60,98) = 61

Vapprox = SUN+ B = 0,25 ⨉ 61 + 0,1 = 15,35.

Разница между Vapprox и V всегда меньше, чем наклон S.

Указание данных с фиксированной точкой

В обозревателе моделей можно задать кодировку с фиксированной точкой для объекта данных с помощью помощника по типам данных, как описано в разделе Свойства данных с фиксированной точкой. Установите в поле Mode значение Fixed point и укажите следующие свойства:

  • Подпись: Выбрать Signed или Unsigned.

  • Длина слова: Укажите битовый размер слова, которое содержит квантованное целое число Q.

  • Масштабирование: Выбрать Binary point или Slope and bias.

    • При выборе Binary pointв помощнике по типам данных отображается поле Длина дроби, в котором указывается местоположение двоичной точки. Выбор длины дроби n определяет кодирование с фиксированной точкой с наклоном S = 2-n и смещением B = 0.

    • При выборе Slope and biasПомощник по типам данных отображает поля для ввода значений уклона S и смещения B для схемы кодирования с фиксированной точкой.

Можно также указать кодировку для объекта данных с фиксированной точкой непосредственно с помощью fixdt (Simulink) функция. В Инспекторе свойств или Обозревателе моделей в поле Тип введите выражение в одном из следующих форматов:

fixdt(Signed, WordLength, FractionLength)
fixdt(Signed, WordLength, Slope, Bias)

Совет:

Некоторые схемы кодирования являются дорогостоящими в вычислительном отношении, особенно в операциях умножения и деления. Выбор крутизны, которая является целочисленной степенью двух и нулевым смещением, позволяет избежать этих дорогостоящих в вычислительном отношении команд. Рекомендуется использовать двоичное масштабирование точек.

Операции преобразования

Диаграммы Stateflow ® преобразуют реальные числа в числа с фиксированной точкой во время инициализации данных и в рамках операций литья в приложении. Эти преобразования вычисляют квантованное целое число Q из ввода вещественного числа. Тип преобразования зависит от языка действий для диаграммы.

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

В диаграмме, использующей MATLAB ® в качестве языка действий, определяется метод для всех преобразований с помощью свойств с фиксированной точкой для диаграммы. См. раздел Свойства фиксированной точки.

Например, если задана диаграмма MATLAB fimath свойство для Same as MATLAB, то диаграмма округляет полученное квантованное целое до его ближайшего целого значения.

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

Диаграммы, использующие C в качестве языка действий, используют два метода преобразования данных с фиксированной точкой:

  • Автономные преобразования инициализируют данные во время создания кода. Автономные преобразования предназначены для максимизации точности. Эти преобразования округляют полученное квантованное целое до его ближайшего целого значения. Автономные преобразования выполняются для инициализации данных (переменных и констант) в иерархии Stateflow и из рабочей области MATLAB.

  • Онлайн-преобразования выполняют операции литья во время выполнения. Онлайн-преобразования предназначены для максимизации вычислительной эффективности. Они быстрее и эффективнее, но менее точны, чем автономные преобразования. Вместо округления Q до ближайшего целого числа, онлайн-преобразования округляются до пола (за исключением деления, которое может округляться до 0, в зависимости от компилятора Си).

Например, эта таблица иллюстрирует разницу между оффлайн и онлайн преобразованиями вещественных чисел в числа с фиксированной точкой, определенные с наклоном S = 2-4 и смещением B = 0. Для каждого действительного значения V диаграмма вычисляет квантованное целое число Q путем округления (V-B )/S до ближайшего целого числа (при оффлайн-преобразовании) или до нижнего значения (при онлайн-преобразовании). Для каждого преобразования Vapprox = QS + B является приблизительным действительным значением, полученным из Q.

Реальная ценность

Автономное преобразование

Преобразование в режиме онлайн

V

(V-B )/S

Q

Vapprox

Q

Vapprox

15.345

245.52

246

15.375

245

15.3125

3.45

55.2

55

3.4375

55

3.4375

1.0375

16.6

17

1.0625

16

1

2.06

32.96

33

2.0625

32

2

Контекстно-зависимые константы с фиксированной точкой

В диаграммах, использующих C в качестве языка действий, можно избежать явных слепков типов, используя контекстно-зависимые константы с фиксированной точкой. Эти константы выводят свой тип из контекста, в котором они встречаются. Они пишутся как обычные числа с суффиксом C или c. Например, 4.3C и 123.4c являются допустимыми контекстно-зависимыми константами с фиксированной точкой, которые можно использовать в операторах действий.

Хотя контекстно-зависимые константы с фиксированной запятой могут появляться в выражениях с любыми типами данных (включая целые числа и данные с плавающей запятой), их основное использование - с числами с фиксированной запятой. Алгоритм, интерпретирующий контекстно-зависимую константу, вычисляет тип, обеспечивающий максимальную точность без переполнения. Алгоритм зависит от:

  • Операции в выражении

  • Другие типы данных в контексте

  • Значение константы

Контекстно-зависимые константы с фиксированной точкой определяют их тип в соответствии со следующими правилами:

  • В операции литья константа имеет тип, к которому она отливается.

  • В простой операции присвоения формы a = b:

    • Если b является контекстно-зависимой константой, имеет тот же тип, что и a.

    • Если b является операцией сложения или вычитания, то константа имеет тот же тип, что и другой операнд.

    • Если b является операцией умножения или деления с операндом с фиксированной точкой, то константа имеет тип, который обеспечивает наилучшую возможную точность для результата с фиксированной точкой, как определено fixptbestexp (Simulink) функция.

    • Если b - операция умножения или деления с операндом с плавающей запятой типа double или single, то константа имеет тот же тип, что и операнд с плавающей запятой.

  • В операции специального назначения формы a := b:

    • Если b является контекстно-зависимой константой, имеет тот же тип, что и a.

    • Если b - арифметическая операция с операндом с плавающей запятой типа double или single, или если a является объектом данных с плавающей запятой, то константа имеет тот же тип, что и число с плавающей запятой.

    • Если b - операция сложения или вычитания с операндом с фиксированной точкой и a является объектом данных с фиксированной точкой, то константа имеет тот же тип, что и a.

    • Если b - операция умножения или деления с операндом с фиксированной точкой и a является объектом данных с фиксированной точкой, то константа имеет тип, который обеспечивает наилучшую возможную точность для результата с фиксированной точкой.

  • В качестве аргумента в вызове функции константа имеет тот же тип, что и формальный аргумент.

Контекстно-зависимые константы нельзя использовать в качестве обоих операндов двоичной операции или в качестве крайнего левого операнда операции назначения.

Советы по использованию данных с фиксированной точкой

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

  • В диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) на панели Аппаратная реализация (Hardware Implementation) задайте целочисленный размер слова для среды моделирования, равный целому размеру целевой среды. Код, созданный Stateflow, использует этот размер целого числа для выбора типов результатов для операций с фиксированной точкой. См. раздел Панель внедрения оборудования (Simulink).

  • При моделировании модели используйте обнаружение переполнения, чтобы предупредить, когда результат операции с фиксированной точкой превышает числовую емкость ее типа с фиксированной точкой. В диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) на панели Диагностика (Diagnostics) > Валидность данных (Data Validity) установите значение Переносить при переполнении (Wrap on overflow) и Насыщать при переполнении (Satrate on error или warning. При возникновении ошибок переполнения в данных с фиксированной точкой увеличьте диапазон данных на:

    • Увеличение значения длины Word для переполненных данных с фиксированной точкой. Например, измените количество битов, используемых для кодирования данных с фиксированной точкой, с 16 на 32. Это действие изменяет базовый целочисленный тип для Q с int16 кому int32.

    • Уменьшение значения длины дроби (при использовании Binary point масштабирование) или увеличение значения «Уклон» (при использовании Slope and bias масштабирование). Например, уменьшите значение длины фракции с 4 до 1 (или, эквивалентно, увеличьте значение откоса с S = 2-4 = 0,0625 до S = 2-1 = 0,5). Это действие увеличивает диапазон данных с фиксированной точкой, но снижает доступную точность.

    Дополнительные сведения см. в разделе Нарушения диапазона данных.

  • Если возникают проблемы с поведением модели, вызванные недостаточной точностью данных с фиксированной точкой, увеличьте точность данных, увеличив значение длины дроби (при использовании Binary point масштабирование) или уменьшение значения «Уклон» (при использовании Slope and bias масштабирование). Например, увеличьте значение длины фракции с 2 до 3 (или, эквивалентно, уменьшите значение откоса с S = 2-2 = 0,25 до S = 2-3 = 0,125). Это действие повышает точность данных с фиксированной точкой, но уменьшает доступный диапазон.

  • В диаграммах, использующих C в качестве языка действий, можно использовать специальную операцию присвоения. := и контекстно-зависимые константы для поддержания максимально возможной точности. См. разделы Переопределение продвижения с фиксированной точкой в диаграммах C и контекстно-зависимые константы с фиксированной точкой.

    Примечание

    Если контекстно-зависимые константы не используются с типами с фиксированной точкой, неинтегренные числовые константы (константы с десятичной точкой) могут принудительно выполнять операции с фиксированной точкой для получения результатов с плавающей точкой.

Автоматическое масштабирование данных с фиксированной точкой

Инструменты автоматического масштабирования могут изменять настройки данных с фиксированной точкой Stateflow. Автоматическое масштабирование можно предотвратить, выбрав параметр Блокировать тип данных с учетом изменений с помощью инструментов с фиксированной точкой для объекта данных с фиксированной точкой. См. раздел Блокировка типа данных по инструментам с фиксированной точкой. Методы автоматического масштабирования данных с фиксированной точкой см. в разделе Выбор метода сбора значений диапазона (Конструктор с фиксированной точкой).

Совместное использование данных с фиксированной точкой с моделями Simulink

Для совместного использования данных с фиксированной точкой с моделями Simulink ®:

  • Те же значения свойств используются для указания данных в диаграмме Stateflow и в модели Simulink. Пример этого метода совместного использования входных данных из модели Simulink см. в разделе Система управления температурой Bang-Bang модели.

    Для некоторых блоков Simulink можно указать тип входных или выходных данных напрямую. Например, можно указать тип данных с фиксированной точкой для блока константы непосредственно в поле Тип данных вывода с помощью fixdt (Simulink) функция.

  • Определите данные как Входные (Input) или Выходные (Output) в диаграмме Stateflow и проинструктируйте передающий или принимающий блок в модели Simulink наследовать его тип из данных диаграммы. Во многих блоках можно задать типы данных посредством наследования из управляющего блока или обратного распространения из следующего блока. Можно задать тип данных блока Simulink в соответствии с типом данных порта Stateflow, к которому он подключается.

    Например, можно задать блок «Константа» для наследования его типа из поставляемого им порта «Ввод состояния в Simulink» (Stateflow Input to Simulink). Задайте для параметра блока Тип выходных данных значение Inherit via back propagation.

Внедрение данных с фиксированной точкой в потоке состояний

Диаграммы потока состояний определяют типы данных с фиксированной точкой из значений, заданных для S, B и базового целого типа для Q.

  • Для всех данных с фиксированной точкой диаграмма определяет целочисленную переменную для Q в сгенерированном коде. Это целое число является единственной частью числа с фиксированной точкой, которая изменяется в значении. Доступные базовые типы для Q - это целочисленные типы без знака uint8, uint16, и uint32и целочисленные типы со знаком int8, int16, и int32. Если число с фиксированной точкой имеет наклон S = 1 и смещение B = 0, оно эквивалентно его квантованному целому числу Q и ведет себя точно так же, как его базовый целый тип.

  • Наклон S учитывается в коэффициенте F с 1 ≤ F < 2 и целой степенью два с экспонентой E:

    S = F2E.

    Если дробный уклон F больше 1, он преобразуется в число с фиксированной точкой. Схемы кодирования с F > 1 могут быть дорогостоящими в вычислительном отношении, особенно в операциях умножения и деления. Установка F = 1 позволяет избежать этих дорогостоящих в вычислительном отношении команд. В этой установке масштабирование на степень 2 реализуется как битовые сдвиги, которые более эффективны, чем команды умножения. Поэтому рекомендуется использовать только двоичное масштабирование, при котором F = 1 и B = 0.

  • Операции для типов с фиксированной точкой реализуются с решениями для квантованного целого числа, как описано в разделе Арифметические операции для данных с фиксированной точкой. Чтобы создать эффективный код, правила продвижения с фиксированной точкой выбирают значения наклона и смещения, которые отменяют сложные термины в решениях. См. раздел Правила продвижения для операций с фиксированными точками.

См. также

(Simulink) | (Симулинк)

Связанные темы