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

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

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

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

<reservedrangesplaceholder4> ≈ <reservedrangesplaceholder3> = <reservedrangesplaceholder2> <reservedrangesplaceholder1> + 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 = round ((V - B )/ S) = round ((15.345 - 0,1 )/0,5) = round (30.49) = 30.

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

Vapprox = <reservedrangesplaceholder2> <reservedrangesplaceholder1> + B = 0,5 ⨉ 30 + 0.1 = 15.1.

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

Q = round ((V - B )/ S) = round ((15.345 - 0,1 )/0,25) = round (60.98) = 61

Vapprox = <reservedrangesplaceholder2> <reservedrangesplaceholder1> + B = 0,25 ⨉ 61 + 0.1 = 15.35.

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

Задайте данные с фиксированной точкой

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

  • Signedness: Выбор Signed или Unsigned.

  • Word length: Задайте размер бита слова, содержащего квантованное целое Q.

  • Scaling: Выбор Binary point или Slope and bias.

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

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

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

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

Совет:

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

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

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

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

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

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

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

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

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

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

Например, эта таблица иллюстрирует различие между автономным и онлайн-преобразованиями вещественных чисел в числа с фиксированной точкой, заданные с наклоном S = 2-4 и смещение B = 0. Для каждого V значений реального мира график вычисляет квантованное целое число Q путем округления (V - B )/ S до ближайшее целого числа (при оффлайн-преобразовании) или до этажа (при онлайн-преобразовании). Для каждого преобразования Vapprox = Q S + 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 Параметры Конфигурации на панели Hardware Implementation установите целочисленный размер слова для среды симуляции равным целому размеру предполагаемого целевого окружения. Код, сгенерированный Stateflow, использует этот целый размер для выбора типов результатов для ваших операций с фиксированной точкой. См. раздел Панель аппаратной реализации (Simulink).

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

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

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

    Для получения дополнительной информации см. раздел «Нарушения области значений данных».

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

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

    Примечание

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

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

Автоматические инструменты масштабирования могут изменять настройки данных Stateflow с фиксированной точкой. Вы можете предотвратить автоматическое масштабирование, выбрав параметр Тип данных блокировки от изменений с помощью опции инструментов с фиксированной точкой для объекта данных с фиксированной точкой. См. Раздел «Блокировка типа данных для инструментов с фиксированной точкой». Для методов автоматического масштабирования данных с фиксированной точкой смотрите Выбор метода набора областей значений (Fixed-Point Designer).

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

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

  • Используйте те же значения свойств, чтобы задать данные на диаграмме Stateflow и в модели Simulink. Для примера этого метода совместного использования входными данными из модели Simulink, смотрите Model Bang-Bang Temperature Control System.

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

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

    Для примера можно задать блок Constant, чтобы наследовать его тип от порта Input to Simulink Stateflow, который он поставляет. Установите Output data type параметров блоков равной Inherit via back propagation.

Реализация данных с фиксированной точкой в Stateflow

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

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

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

    S = <reservedrangesplaceholder0> ⨉ 2E.

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

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

См. также

(Simulink) | (Simulink)

Похожие темы