2017-02-24 9 views
0

私はWMSNのエラーコントロールに取り組んでいます。私はエラー確率pでバイナリ対称チャンネルを通してビデオを送信したい。だから私はマトリックスで示されている各ゴップのフレーム(画像)を持っています。10進値をバイナリに変換する

各行列要素は、正または負の10進数の値を持ちます。前述のように、この全体の行列をバイナリストリームに変換する必要があります。私は、バイナリストリームに要素を変換するため

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

を使用するが、私は

typecast(uint8(bin2dec(reshape(m,8,[]).')),'double')を使用して正確な数を取り戻すことができません。

もう一方では、正しいビットエラーレートを得るために、行列全体をただ1つのビットストリームに変換しなければならないと思います。そしてそれらを画像の測定値のマトリックスに再び変換する。

+0

は私が(DEC2BIN(型キャスト(B(:)、 'UINT8')作り直す=あなたは 'メートルが必要だと思う、8)。 '、1、[])'、その後、リシェイプ 'バック変換このコメントから貼り付けた場合、直前に不要なゼロ幅の文字があることに注意してください(型変換(uint8(bin、最後のカンマ) –

+0

@ LuisMendoあなたの答えをありがとう。しかし、エラー '入力文字がMATLABの文や式で有効ではありません。' – Hanna

+0

私の前のコメントで言われたように、いくつかの望ましくないゼロ幅の文字がどうにかクリープします。私は答えとして投稿しました。それは避けてください –

答えて

0

私はあなたが、これは、MATLABの標準で行列を読み込むこと

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

注意、column-majorため(そしてダウン、全体を)必要だと思います。

次にあなたがtypecastので

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

に戻って変換することができますが、このプロセスは、精度の損失を伴うない、基礎となるデータを変更せずにデータ型を変換します。例えば、

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

回復された10進数の精度をもっと高くすることはできますか? – Hanna

+0

@ハナ精度の損失はありません。編集された回答 –

+0

を参照してください変換後のMSBがどこにあるかを知る必要があります。私は多くの数字でそれをテストしましたが、私はそれがどのように機能しているかを理解できません。たとえば、1は '0000000000000000000000000000000000000000000000001111000010111111'となります – Hanna

関連する問題