将十进制值转换为二进制

时间:2017-02-24 10:39:59

标签: image matlab video matrix binary

我正在研究WMSN中的错误控制。我想通过具有错误概率p的二进制对称信道传输视频。所以我在每个gop中都有帧(图像),用矩阵表示。

每个矩阵元素都有十进制值,可能是正数或负数。正如here所解释的,我需要将整个矩阵转换为二进制流。我用了

reshape(dec2bin(typecast(b,'uint8'),8).',1,[])

用于将元素转换为二进制流,但我无法使用

获取确切的数字

typecast(uint8(bin2dec(reshape(m,8,[]).')),'double')

另一方面,我认为要获得正确的误码率,我必须将整个矩阵转换为一个比特流,我不知道该怎么做。并将它们再次转换为图像的测量值矩阵。

1 个答案:

答案 0 :(得分:0)

我认为你需要

m = reshape(dec2bin(typecast(b(:),'uint8'),8).',1,[]);

请注意,这将以Matlab的标准column-major顺序(向下,然后跨越)读取矩阵。

然后你可以用

转换回去
b_recovered = reshape(typecast(uint8(bin2dec(reshape(m,8,[]).')),'double'),size(b));

由于typecast转换数据类型而不更改基础数据,因此此过程不会降低准确性。例如,

>> b = randn(2,3)
b =
  -0.241247174335006   0.540703471823211   0.526269662140438
   0.908207564087271  -0.507829312416083  -1.067884765919437

>> m = reshape(dec2bin(typecast(b(:),'uint8'),8).',1,[])
m =
101100101011100000000010111110100010111111100001110011101011111101001010100000100011011101001111000010010001000011101101001111110010100100001111000010100101111001110001010011011110000100111111001011101101111100011000010000100010001101000000111000001011111100010010101001010111100001111001001100111101011111100000001111110101110001010100000110000101011000001110000101101111000110111111

>> b_recovered = reshape(typecast(uint8(bin2dec(reshape(m,8,[]).')),'double'),size(b))
b_recovered =
  -0.241247174335006   0.540703471823211   0.526269662140438
   0.908207564087271  -0.507829312416083  -1.067884765919437

>> b==b_recovered
ans =
  2×3 logical array
   1   1   1
   1   1   1
>>