Максимизация точности

Точность ограничена наклоном. Чтобы достичь максимальной точности, вы должны сделать уклон как можно меньшим, сохраняя область значений адекватно большим. Смещение регулируется в координации с уклоном.

Предположим, что максимальное и минимальное значения реального мира заданы max (V) и min (V), соответственно. Эти пределы могут быть известны на основе физических принципов или инженерных факторов. Чтобы максимизировать точность, вы должны принять решение о схеме округления и о том, насыщаются ли переполнения или оборачиваются. Для упрощения, этот пример принимает, что минимальное значение реального мира соответствует минимальному закодированному значению, а максимальное значение реального мира соответствует максимальному закодированному значению. Используя схему кодирования, описанную в масштабирование, эти значения заданы как

max(V)=F2E(max(Q))+Bmin(V)=F2E(min(Q))+B.

Решая для склона, вы получаете

F2E=max(V)min(V)max(Q)min(Q)=max(V)min(V)2ws1.

Эта формула не зависит от проблем округления и переполнения и зависит только от размера слова, ws.

Колодка с конечными нулями

Заполнение конечными нулями включает расширение наименее значимого бита (LSB) числа с дополнительными битами. Этот способ включает переход от низкой точности к более высокой точности.

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

1.0000000×2q1.1111111×2q1,

где q является целым числом. Чтобы выполнить эту операцию, степени должны быть равными:

1.0000000×2q0.1111111×2q0.0000001×2q.

Если верхнее число заполнено двумя нулями, а нижнее число заполнено одним нулем, то вышеприведенное уравнение становится

1.000000000×2q0.111111110×2q0.000000010×2q,

который дает более точный результат. Пример заполнения конечными нулями в Simulink® модель проиллюстрирована в Digital Controller Realization.

Постоянное масштабирование для лучшей точности

Следующие блоки Simulink с фиксированной точкой обеспечивают режим для параметров масштабирования, значения которых являются постоянными векторами или матрицами:

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

Постоянное масштабирование для лучшей точности доступно только для типов данных с фиксированной точкой с неопределенным масштабированием. Все другие типы данных с фиксированной точкой используют заданное масштабирование. Можно использовать Data Type Assistant (см. «Задание типов данных с помощью помощника по типам данных») в диалоговом окне блока, чтобы включить лучший режим точного масштабирования.

  1. В диалоговом окне блока нажмите кнопку Show data type assistant.

    Появляется Data Type Assistant.

  2. В Data Type Assistant и из списка Mode выберите Fixed point.

    В Data Type Assistant отображаются дополнительные опции, связанные с типами данных с фиксированной точкой.

  3. Из списка Scaling выберите Best precision.

Чтобы понять, как вы можете использовать этот режим масштабирования, рассмотрите матрицу 3 на 3 двойников, M, заданную как

  3.3333e-003  3.3333e-004  3.3333e-005
  3.3333e-002  3.3333e-003  3.3333e-004
  3.3333e-001  3.3333e-002  3.3333e-003

Теперь предположим, что вы задаете M как значение параметра Gain для блока Gain. Результаты определения собственного масштабирования по сравнению с использованием режима постоянного масштабирования описаны здесь:

  • Specified Scaling

    Предположим, что элементы матрицы преобразуются в 10-битный обобщенный тип данных с фиксированной точкой с двоичным масштабированием только на точку 2-7 (то есть двоичная точка расположена на семи местах слева от самого правого бита). С этим форматом данных M становится

    0            0            0
    3.1250e-002  0            0
    3.3594e-001  3.1250e-002  0

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

  • Constant Scaling for Best Precision

    Если M масштабируется на основе его наибольшего матричного значения, вы получаете

    2.9297e-003  0            0
    3.3203e-002  2.9297e-003  0
    3.3301e-001  3.3203e-002  2.9297e-003

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

Похожие темы