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