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

Этот пример показывает, как выполнить двоичную точку, масштабирующуюся в FI.

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

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

Если s верен (подписал) продвижение, или старший значащий бит (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

интервал (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 с wordlength 3 битов и дробной длиной-1. Здесь двоичная точка является 1 местом справа от LSB: 011_.. _ является снова неиспользованным битом и первым 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 битов отображают масштабирование или вес, который каждый бит дан для заданной и дробной длины со знаком. Код fi, двойная точность реальное значение и атрибуты фиксированной точки также отображен.

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

%#ok<*NOPTS,*NASGU>