2016-02-19 11 views

ответ

0

Чтобы генерировать поток битов, вы можете использовать следующий подход:

  1. Раздельные реальную и мнимую часть.
  2. Преобразуйте число в его шестнадцатеричное представление с num2hex и используйте каждый символ как одну строку (транспонируйте его с помощью .').
  3. Преобразование каждой строки в десятичную с hex2dec. Это необходимо для следующего шага.
  4. Создайте двоичное представление для каждого десятичного знака с помощью dec2bin. Нам нужно установить минимальную длину 4, так как один символ в шестнадцатеричном слове занимает 4 бита.
  5. Поместите значения каждой строки друг в друга. Теперь мы превратили шестигранного строку в его двоичном представлении длины 64.
  6. Append мнимую часть после действительной части, которая дает нам поток битов длины 128.

Чтобы декодировать поток битов и получить число обратно, вы можете поменять местами шаги, описанные выше:

  1. расколоть битовый поток в два джонке длиной 64. Первый реальная часть (1:64), то второй представляет собой мнимую часть (65:128).
  2. Измените строку, чтобы сформировать строки из четырех символов.
  3. Преобразование строк в десятичное число с bin2dec.
  4. Преобразование десятичных чисел в их шестнадцатеричное представление с dec2hex.
  5. Преобразуйте шестнадцатеричную строку обратно в исходный номер с hex2num.
  6. Используйте complex, чтобы получить комплексное число, состоящее из реальной и мнимой части. Вы также можете использовать realpart+imagpart*i.

Теперь давайте посмотрим код для всех, что:

function the_demo 

x = 0.0332815625326639 + 0.000694052654051097i; 

bitstream = cb_encode(x) 
value = cb_decode(bitstream) 

check = x-value % see if we succeeded 


function bin = cb_encode(x) 
a1 = dec2bin(hex2dec(num2hex(real(x)).'),4); 
a2 = dec2bin(hex2dec(num2hex(imag(x)).'),4); 
bin = [reshape(a1.',1,[]),reshape(a2.',1,[])]; 

function y = cb_decode(bin) 
b1 = reshape(bin(1:64),4,[]).'; 
b1 = hex2num(dec2hex(bin2dec(b1)).'); 
b2 = reshape(bin(65:128),4,[]).'; 
b2 = hex2num(dec2hex(bin2dec(b2)).'); 
y = complex(b1,b2); 

Запуск этого, дает следующий результат:

>> the_demo 
bitstream = 
00111111101000010000101001000111111011010100011001101111101000000011111101000110101111100010001010111001101101011000000000110010 
value = 
    0.0333 + 0.0007i 
check = 
    0