2017-02-24 83 views
0

我正在處理WMSN中的錯誤控制。我想通過具有錯誤概率p的二進制對稱信道傳輸視頻。所以我在每個GOP中都有一個矩陣顯示的幀(圖像)。將十進制值轉換爲二進制

每個矩陣元素都有十進制值,可能是正數或負數。如解釋here我需要將整個矩陣轉換爲二進制流。我用

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

轉換元件,以二進制流,但我不能回去使用

typecast(uint8(bin2dec(reshape(m,8,[]).')),'double')的確切人數。另一方面,我認爲爲了獲得正確的誤碼率,我必須將整個矩陣轉換爲一個比特流,我不知道該怎麼做。並將它們再次轉換爲圖像的測量值矩陣。

+0

我想你需要'米=重塑(DEC2BIN(類型轉換(二(:), 'UINT8'),8)。',1,[])',然後用'重塑轉換回(如果從此註釋中粘貼,請注意可能不需要的零寬度字符最後一個逗號) –

+0

@LuisMendo感謝您的回答。但有錯誤'輸入字符在MATLAB語句或表達式中無效'。 – Hanna

+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 
>> 
+0

我可以在恢復的十進制數更精確嗎? – Hanna

+0

@Hanna沒有精度損失。請參閱編輯答案 –

+0

我需要知道MSB在轉換後的位置。我用很多數字對它進行了測試,但我無法理解它是如何工作的。例如1變成了'0000000000000000000000000000000000000000000000001111000010111111' – Hanna