繁体   English   中英

如何在MATLAB中将复数编码/解码为位流?

[英]How to encode/decode complex number to bitstream in MATLAB?

如何将像0.0332815625326639 + 0.000694052654051097i这样的复数压缩为比特流,然后对其进行解码以获取相同的数字?

生成比特流 ,可以使用以下方法:

  1. 实部和虚部分开。
  2. num2hex将数字转换为十六进制表示形式,并将每个字符用作一行(用.'换位)。
  3. 使用hex2dec将每一行转换为十进制。 下一步需要这样做。
  4. 使用dec2bin为每个十进制创建二进制表示dec2bin 由于十六进制的一个字符占用4位,因此我们需要将最小长度设置为4。
  5. 将每一行的值彼此放在后面。 现在,我们已将十六进制字符串转换为长度为64的二进制表示形式。
  6. 在实部之后追加虚部,这会给我们带来长度为128的比特流。

解码比特流并取回数字,可以反转上述步骤:

  1. 将比特流分成两个长度为64的垃圾。第一个是实部( 1:64 ),第二个是虚部( 65:128 )。
  2. 重新整形字符串以形成四个字符的行。
  3. 使用bin2dec将行转换为十进制数。
  4. 使用dec2hex将十进制数字转换为其十六进制表示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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM