我正在研究WMSN中的错误控制。我想通过具有错误概率p的二进制对称信道传输视频。所以我在每个gop中都有帧(图像),用矩阵表示。
每个矩阵元素都有十进制值,可能是正数或负数。正如here所解释的,我需要将整个矩阵转换为二进制流。我用了
reshape(dec2bin(typecast(b,'uint8'),8).',1,[])
用于将元素转换为二进制流,但我无法使用
获取确切的数字 typecast(uint8(bin2dec(reshape(m,8,[]).')),'double')
。
另一方面,我认为要获得正确的误码率,我必须将整个矩阵转换为一个比特流,我不知道该怎么做。并将它们再次转换为图像的测量值矩阵。
答案 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
>>