2012-01-26 2 views
0

通信のエンコードとデコードのメカニズムをシミュレートするためにMATLABを使用しようとしています。したがって、すべてのデータは0または1になります。 特定の長さの変数を作成し、0と1の値を設定します。

は当初、私は特定の長さのベクトルを作成し、0と1のIは、XOR演算私はどんな問題なく行うことができた複数回実行する必要があるコード化するための

source_data = rand(1,8192)<.7; 

使用して移入します。

デコード操作では、このベクトル表現があまり役に立たないとわかった方程式の集合を解くためにガウス消去法を実装する必要があります。 、私はこの後length(a)をしようとしたとき、私は長さが16384であることがわかった

for i=1:8192 
    if(mod(i,2)==0) 
     a = strcat(a,'0'); 
    else 
     a = strcat(a,'1'); 
    end 
    i = i+1; 
    disp(i); 
end 

倍8192である私はわからない:私は、forループを使用して変数に複数の0と1を追加するstrcatを使用しようとしましたここで私は間違っているか、これに取り組むのが最善の方法です。

答えて

1

ここには多少の回答/質問があります。まず、{0,1}要素を含む任意のベクトルから文字列に移動するにはどうすればよいですか? cellfunが均一な出力を連結することを

dataDbl = rand(1,8192)<.7;      %see the original question 
dataStr = cellfun(@num2str, num2cell(dataDbl)); 

注:一つの方法は、コンバータnum2strcellfunを使用することです。

+0

これは非常に役立ちます – bhavs

2

例コードの前にaを再初期化しましたか?その間にaをクリアすることなく2度実行したか、すでにaで始まり、長さは8192秒です。

Matlabのようなループで配列を拡張するのは非効率的です。あなたは通常、このようなことをするベクトル化された方法を見つけることができます。あなたのケースでは、8192の長さの交互の1と0の配列を取得するには、これを行うだけです。

len = 8192; 
a = double(mod(1:len,2) == 0); 

ロジックがコードに適している可能性があるため、double()コールをスキップできます。

関連する問題