Чтобы полностью понять результаты, сгенерированные Simulink с фиксированной точкой® блоки, вы должны быть в курсе этих проблем:
Когда числовые параметры блоков преобразуются из двойных в типы данных с фиксированной точкой
Когда входные сигналы преобразуются из одного типа данных с фиксированной точкой в другой (если вообще)
При выполнении арифметических операций по входным сигналам и параметрам
Например, предположим, что блок Simulink с фиксированной точкой выполняет арифметическую операцию над своим входным сигналом и параметром, а затем генерирует выход, имеющий характеристики, которые заданы блоком. Следующая схема иллюстрирует, как эти проблемы связаны.
В следующих разделах описываются преобразования параметров и сигналов. Правила для арифметических операций обсуждают арифметические операции.
Параметры блоков с фиксированной точкой, которые принимают числовые значения, всегда преобразуются из double
к типу данных с фиксированной точкой. Параметры могут быть преобразованы в тип входных данных, тип выходных данных или в тип данных, явно заданный блоком. Например, блок Discrete FIR Filter преобразует свой параметр Initial states в тип входных данных и преобразует его параметр Numerator coefficient в тип данных, явно заданный вами в диалоговом окне блока.
Параметры всегда преобразуются перед выполнением каких-либо арифметических операций. Кроме того, параметры всегда преобразуются в автономный режим с помощью округления в ближайшее и насыщения. Оффлайн-преобразования обсуждаются ниже.
Примечание
Потому что параметры блоков с фиксированной точкой начинаются как double
, они никогда не являются точными к более чем 53 битам. Поэтому, если выход вашего блока с фиксированной точкой больше 53 битов, ваш результат может быть менее точным, чем вы ожидали.
Автономное преобразование - это преобразование, выполняемое вашей платформой разработки (для примера, процессором на вашем ПК), а не процессором с фиксированной точкой, на который вы нацелены. Например, предположим, что вы используете ПК для разработки программы, которая будет работать на процессоре с фиксированной точкой, и вам нужен процессор с фиксированной точкой, чтобы вычислить
снова и снова. Если a, b и c являются постоянными параметрами, процессору с фиксированной точкой неэффективно каждый раз вычислять ab/ c. Вместо этого процессор ПК должен один раз вычислять ab/ c в автономном режиме, а процессор с фиксированной точкой вычисляет только C· u. Это устраняет две дорогостоящие арифметические операции с фиксированной точкой.
Рассмотрим преобразование реального значения из одного типа данных с фиксированной точкой в другой. В идеале значения до и после преобразования равны.
где Vb - вход значение, а Va - выход значение. Чтобы увидеть, как реализуется преобразование, два идеальных значения заменяются общей схемой кодирования [Slope Bias], описанной в масштабирование:
Решая для сохраненного целого значения типа выходных данных, Qa получается:
где Fs - скорректированный дробный наклон, а Bnet - смещение сети. Оффлайн-преобразования и онлайн-преобразования и операции обсуждаются ниже.
Оба Fs и Bnet вычисляются в автономном режиме с использованием округления к ближайшему и насыщения. Bnet хранится с использованием типа выходных данных, а Fs - с помощью автоматически выбранного типа данных.
Остальные преобразования и операции выполняются в оперативном режиме процессором с фиксированной точкой и зависят от наклонов и смещений для типов входных и выходных данных. Преобразования и операции определяются следующими шагами:
Начальное значение для Qa определяется смещением сети, Bnet:
Входное целое значение, Qb, умножается на скорректированный наклон, Fs:
Результат шага 2 преобразуется в измененный тип выходных данных, где наклон равен единице, а смещение равно нулю:
Это преобразование включает любую необходимую перемену битов, округление или обработку переполнения.
Операция суммирования выполняется:
Это суммирование включает любую необходимую обработку переполнения.
Обратите внимание, что максимальное количество преобразований и операций выполняется, когда наклоны и смещения входного сигнала и выходного сигнала различаются (несовпадают). Если масштабирование этих сигналов идентично (совпадает), количество операций уменьшается с худшего (наиболее неэффективного) случая. Для пример, когда вход имеет тот же дробный наклон и смещение, что и выход, требуется только шаг 3:
Исключительное использование двоичного масштабирования только для точек как для входных сигналов, так и для выходных сигналов является общим способом устранения несоответствий склонов и смещений, и приводит к наиболее эффективным симуляциям и сгенерированному коду.