В этом примере показано, как выполнить двоичное масштабирование точек в 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
Это интерактивный пример, который позволяет пользователю изменить длину дроби 3-битного номера с фиксированной точкой путем перемещения двоичной точки с помощью ползунка. Длина дроби может варьироваться от -3 до 5, и пользователь может изменить значение 3 бит на '0' или '1' для подписанных или неподписанных чисел.
«Коэффициенты масштабирования» выше 3 битов отображают масштабирование или вес, который каждый бит дается для заданной сигнальности и длины дроби. The fi
код, значение двойной точности в реальном мире и атрибуты с фиксированной точкой также отображаются.
Введите fibinscaling в подсказке MATLAB, чтобы запустить этот пример.
%#ok<*NOPTS,*NASGU>