0
如何將0.0332815625326639 + 0.000694052654051097i
這樣的複雜數字壓縮成比特流,然後解碼以獲取相同的數字?如何在MATLAB中將複數編碼/解碼爲比特流?
如何將0.0332815625326639 + 0.000694052654051097i
這樣的複雜數字壓縮成比特流,然後解碼以獲取相同的數字?如何在MATLAB中將複數編碼/解碼爲比特流?
要產生的比特流,你可以用下面的辦法:
num2hex
將數字轉換爲其十六進制表示形式,並將每個字符用作一行(將它轉置爲.'
)。hex2dec
將每行轉換爲小數。這是下一步所需要的。dec2bin
爲每個小數點創建二進制表示。我們需要設置最小長度爲4,因爲一個十六進制字符佔用4位。要解碼比特流的實部後追加虛部並獲得數字後,可以反向執行上述步驟:
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