exponenta event banner

Просмотр кругов с фиксированным числом точек

В этом примере показано, как определить целочисленные и фиксированные числа без знака и со знаком «два».

Определения номеров с фиксированной точкой

Этот пример иллюстрирует определения целочисленных чисел без знака и чисел со знаком-2 и чисел с фиксированной точкой.

Целые числа без знака.

Целые числа без знака представлены в двоичной системе счисления следующим образом. Давайте

b = [b(n) b(n-1) ... b(2) b(1)]

быть двоичными цифрами n-разрядного беззнакового целого числа, где каждый b (i) равен единице или нулю. Тогда значение b равно

u = b(n)*2^(n-1) + b(n-1)*2^(n-2) + ... + b(2)*2^(1) + b(1)*2^(0)

Например, давайте определим 3-разрядный беззнаковый целочисленный квантователь и перечислим его диапазон.

originalFormat = get(0, 'format'); format

q = quantizer('ufixed',[3 0]);
[a,b] = range(q);
u = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,u)
u =

     0
     1
     2
     3
     4
     5
     6
     7


b =

  8x3 char array

    '000'
    '001'
    '010'
    '011'
    '100'
    '101'
    '110'
    '111'

Целочисленный кружок без знака.

Давайте замаскируем их круглой гранью с соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

Неподписанная фиксированная точка.

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

Если беззнаковое целое число u определено, как и раньше, и длина дробного числа равна f, то значение беззнакового числа с фиксированной точкой равно

  uf = u*2^-f

Например, давайте определим 3-битный беззнаковый квантователь с фиксированной точкой с длиной фракции 1 и перечислим его диапазон.

q = quantizer('ufixed',[3 1]);
[a,b] = range(q);
uf = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,uf)
uf =

         0
    0.5000
    1.0000
    1.5000
    2.0000
    2.5000
    3.0000
    3.5000


b =

  8x3 char array

    '000'
    '001'
    '010'
    '011'
    '100'
    '101'
    '110'
    '111'

Беззнаковый круг с фиксированным номером.

Давайте замаскируем их круглой гранью с соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

Неназначенная дробная фиксированная точка.

Неподписанные дробные числа с фиксированной точкой - это числа с фиксированной точкой, длина фракции f равна длине слова n, что приводит к масштабированию так, что диапазон чисел находится в диапазоне от 0 до 1-2 ^ -f включительно. Это наиболее распространенная форма чисел с фиксированной точкой, потому что она имеет хорошее свойство, что все числа меньше единицы, и произведение двух чисел меньше единицы является числом меньше единицы, и поэтому умножение не переполняется.

Таким образом, определение беззнаковой дробной фиксированной точки является таким же, как и беззнаковой фиксированной точки, с ограничением, что f = n, где n - длина слова в битах.

  uf = u*2^-f

Например, давайте определим 3-битный дробный квантователь с фиксированной точкой без знака, который подразумевает длину фракции 3.

q = quantizer('ufixed',[3 3]);
[a,b] = range(q);
uf = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,uf)
uf =

         0
    0.1250
    0.2500
    0.3750
    0.5000
    0.6250
    0.7500
    0.8750


b =

  8x3 char array

    '000'
    '001'
    '010'
    '011'
    '100'
    '101'
    '110'
    '111'

Беззнаковый дробный круг с фиксированными точками.

Давайте замаскируем их круглой гранью с соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

Signed Two's - дополнение целых чисел.

Подписанные целые числа представлены в двухмерном дополнении в двоичной системе счисления следующим образом. Давайте

b = [b(n) b(n-1) ... b(2) b(1)]

быть двоичными цифрами n-разрядного целого числа со знаком, где каждый b (i) равен единице или нулю. Тогда значение b равно

s = -b(n)*2^(n-1) + b(n-1)*2^(n-2) + ... + b(2)*2^(1) + b(1)*2^(0)

Следует отметить, что разница между этим и неподписанным числом является отрицательным весом самого значащего бита (MSB).

Например, давайте определим 3-разрядный целочисленный квантователь со знаком и перечислим его диапазон.

q = quantizer('fixed',[3 0]);
[a,b] = range(q);
s = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,s)

% Note that the most-significant-bit of negative numbers is 1, and positive
% numbers is 0.
s =

    -4
    -3
    -2
    -1
     0
     1
     2
     3


b =

  8x3 char array

    '100'
    '101'
    '110'
    '111'
    '000'
    '001'
    '010'
    '011'

Signed Two's - дополняющий целочисленный круг.

Давайте замаскируем их круглой гранью с соответствующими двоичными и десятичными значениями.

Причина этого нечестно выглядящего определения отрицательных чисел заключается в том, что сложение всех чисел, как положительных, так и отрицательных, осуществляется так, как если бы все они были положительными, и тогда бит переноса n + 1 отбрасывается. Результат будет верным, если переполнение отсутствует.

fidemo.numbercircle(q);

Подпись фиксированная точка.

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

Если целое число s со знаком определено, как раньше, и длина фракции равна f, то значение числа с фиксированной точкой со знаком равно

  sf = s*2^-f

Например, давайте определим 3-битный подписанный квантователь с фиксированной точкой с длиной фракции 1 и перечислим его диапазон.

q = quantizer('fixed',[3 1]);
[a,b] = range(q);
sf = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,sf)
sf =

   -2.0000
   -1.5000
   -1.0000
   -0.5000
         0
    0.5000
    1.0000
    1.5000


b =

  8x3 char array

    '100'
    '101'
    '110'
    '111'
    '000'
    '001'
    '010'
    '011'

Подписанный круг номеров с фиксированной точкой.

Давайте замаскируем их круглой гранью с соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

Подписанная дробная фиксированная точка.

Подписанные дробные числа с фиксированной точкой - это числа с фиксированной точкой, длина фракции f на единицу меньше длины слова n, что приводит к масштабированию так, что диапазон чисел находится в диапазоне от -1 до 1-2 ^ -f включительно. Это наиболее распространенная форма чисел с фиксированной точкой, потому что она имеет хорошее свойство, что произведение двух чисел меньше единицы является числом меньше единицы, и поэтому умножение не переполняется. Единственным исключением является случай, когда мы умножаем -1 на -1, потому что + 1 не является элементом этой системы счисления. Некоторые процессоры имеют специальную команду умножения для этой ситуации, а некоторые добавляют дополнительный бит в продукт, чтобы защитить от этого переполнения.

Таким образом, определение подписанной дробной фиксированной точки является таким же, как и у подписанной фиксированной точки, с тем ограничением, что f = n-1, где n - длина слова в битах.

  sf = s*2^-f

Например, давайте определим 3-битный дробный квантователь с фиксированной точкой со знаком, который подразумевает длину фракции 2.

q = quantizer('fixed',[3 2]);
[a,b] = range(q);
sf = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,sf)
sf =

   -1.0000
   -0.7500
   -0.5000
   -0.2500
         0
    0.2500
    0.5000
    0.7500


b =

  8x3 char array

    '100'
    '101'
    '110'
    '111'
    '000'
    '001'
    '010'
    '011'

Подписанный дробный круг с фиксированными точками.

Давайте замаскируем их круглой гранью с соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

set(0, 'format', originalFormat);
%#ok<*NOPTS,*NASGU>