Выполните двоичное масштабирование точек

В этом примере показано, как выполнить двоичное масштабирование точек в FI.

Конструкция FI

a = fi(v,s,w,f) возвращает fi со значением v, сигнальность s, размер слова w, и длина дроби f.

Если s true (signed) - начальный или самый значащий бит (MSB) в полученном fi всегда является битом знака.

Длина дроби f - масштабирование 2^(-f).

Например, создайте подписанный 8-битный fi со значением 0,5 и масштабированием 2 ^ (-7):

a = fi(0.5,true,8,7)
a = 

    0.5000

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7

Длина дроби и положение двоичной точки

Длина дроби или масштабирование определяет положение двоичной точки в fi объект.

Длина дроби положительная и меньше, чем размер слова

Когда длина дроби f положительный и меньше, чем размер слова, двоичная точка лежит f места слева от наименее значимого бита (LSB) и внутри слова.

Для примера в 3-битном fi со знаком с длиной дроби 1 и значением -0,5, двоичная точка лежит 1 место слева от LSB. В этом случае для каждого бита задано значение 1 и двоичный эквивалент fi с его двоичной точкой 11.1 .

Значение реального мира -0,5 получается путем умножения каждого бита на его масштабный коэффициент, начиная с LSB и работая до подписанного MSB.

(1*2^-1) + (1*2^0) +(-1*2^1) = -0.5

storedInteger(a) возвращает сохраненное значение целого числа со знаком без масштаба -1.

(1*2^0) + (1*2^1) +(-1*2^2) = -1

a = fi(-0.5,true,3,1)
bin(a)
storedInteger(a)
a = 

   -0.5000

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: 1

ans =

    '111'


ans =

  int8

   -1

Длина дроби положительная и больше, чем размер слова

Когда длина дроби f положительно и больше, чем размер слова, лежит двоичная точка f места слева от LSB и вне слова.

Для примера двоичный эквивалент подписанного 3-битного слова с длиной дроби 4 и значением -0.0625 ._111 Вот _ в ._111 обозначает неиспользованный бит, который не является частью 3-битного слова. Первый 1 после _ - MSB или бит знака.

Значение реального мира -0.0625 вычисляется следующим образом (LSB - MSB).

(1*2^-4) + (1*2^-3) + (-1*2^-2) = -0.0625

bin (b) вернется 111 в приглашении MATLAB ® и storedInteger(b) = -1

b = fi(-0.0625,true,3,4)
bin(b)
storedInteger(b)
b = 

   -0.0625

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: 4

ans =

    '111'


ans =

  int8

   -1

Длина дроби является отрицательным целым числом и меньше, чем размер слова

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

Для образца в c = fi(-4,true,3,-2) двоичная точка лежит 2 места справа от LSB 111__.. Здесь два правых большинства пространств являются неиспользованными битами, которые не являются частью 3-битного слова. Самый правый 1 является LSB и ведущим 1 - бит знака.

Значение реального мира -4 получается путем умножения каждого бита на его коэффициент масштабирования 2^(-f), т.е. 2(-(-2)) = 2^(2) для LSB, а затем добавления продуктов вместе.

(1*2^2) + (1*2^3) +(-1*2^4) = -4

bin(c) и storedInteger(c) все еще даст 111 и -1 как в предыдущих двух примерах.

c = fi(-4,true,3,-2)
bin(c)
storedInteger(c)
c = 

    -4

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: -2

ans =

    '111'


ans =

  int8

   -1

Длина дроби автоматически устанавливается на лучшую возможную точность и отрицательная

В этом примере мы создадим 3-битную fi со знаком где длина дроби устанавливается автоматически в зависимости от значения fi предполагается, что он будет содержать. Результат fi имеет значение 6, с длиной слова 3 бита и длиной дроби -1. Здесь двоичная точка находится на 1 месте справа от LSB: 011_.. The _ снова неиспользованный бит и первый 1 перед _ - LSB. Ведущий 1 - бит знака.

Значение реального мира (6) получается следующим образом:

(1*2^1) + (1*2^2) + (-0*2^3) = 6

bin(d) и storedInteger(d) даст 011 и 3 соответственно.

d = fi(5,true,3)
bin(d)
storedInteger(d)
d = 

     6

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 3
        FractionLength: -1

ans =

    '011'


ans =

  int8

   3

Интерактивный пример масштабирования двоичных точек FI

Это интерактивный пример, который позволяет пользователю изменить длину дроби 3-битного номера с фиксированной точкой путем перемещения двоичной точки с помощью ползунка. Длина дроби может варьироваться от -3 до 5, и пользователь может изменить значение 3 бит на '0' или '1' для подписанных или неподписанных чисел.

«Коэффициенты масштабирования» выше 3 битов отображают масштабирование или вес, который каждый бит дается для заданной сигнальности и длины дроби. The fi код, значение двойной точности в реальном мире и атрибуты с фиксированной точкой также отображаются.

Введите fibinscaling в подсказке MATLAB, чтобы запустить этот пример.

%#ok<*NOPTS,*NASGU>