2016-02-19 105 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