В этом примере показано, как выполнять двоичное масштабирование точек в FI.
a = fi(v,s,w,f) возвращает fi со значением v, слабоумие s, длина слова w, и длина дроби f.
Если s true (со знаком), ведущий или старший бит (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_.. _ снова неиспользуемый бит и первый 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 бита, отображают масштабирование или вес, который каждому биту присваивается для заданной сигнатуры и длины дроби. fi Также отображаются код, вещественное значение двойной точности и атрибуты фиксированной точки.
Введите fibinscaling в подсказке MATLAB для запуска этого примера.
%#ok<*NOPTS,*NASGU>