2016-02-19 145 views

回答

0

產生的比特流,你可以用下面的辦法:

  1. 獨立的實部和虛部。
  2. 使用num2hex將數字轉換爲其十六進制表示形式,並將每個字符用作一行(將它轉置爲.')。
  3. 使用hex2dec將每行轉換爲小數。這是下一步所需要的。
  4. dec2bin爲每個小數點創建二進制表示。我們需要設置最小長度爲4,因爲一個十六進制字符佔用4位。
  5. 將每一行的值放在一起。現在,我們已經轉換的十六進制字符串轉換長度的二進制表示64.
  6. 這讓我們長的比特流128

解碼比特流的實部後追加虛部並獲得數字後,可以反向執行上述步驟:

  1. 分割在長度64的2個帆船比特流的第一個是實部(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