Чтобы генерировать поток битов, вы можете использовать следующий подход:
- Раздельные реальную и мнимую часть.
- Преобразуйте число в его шестнадцатеричное представление с
num2hex
и используйте каждый символ как одну строку (транспонируйте его с помощью .'
).
- Преобразование каждой строки в десятичную с
hex2dec
. Это необходимо для следующего шага.
- Создайте двоичное представление для каждого десятичного знака с помощью
dec2bin
. Нам нужно установить минимальную длину 4, так как один символ в шестнадцатеричном слове занимает 4 бита.
- Поместите значения каждой строки друг в друга. Теперь мы превратили шестигранного строку в его двоичном представлении длины 64.
- Append мнимую часть после действительной части, которая дает нам поток битов длины 128.
Чтобы декодировать поток битов и получить число обратно, вы можете поменять местами шаги, описанные выше:
- расколоть битовый поток в два джонке длиной 64. Первый реальная часть (
1:64
), то второй представляет собой мнимую часть (65:128
).
- Измените строку, чтобы сформировать строки из четырех символов.
- Преобразование строк в десятичное число с
bin2dec
.
- Преобразование десятичных чисел в их шестнадцатеричное представление с
dec2hex
.
- Преобразуйте шестнадцатеричную строку обратно в исходный номер с
hex2num
.
- Используйте
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