2017-06-10 4 views
-1

下に表示されるコードの一部です。あなたは、変数gを宣言する最初の行で変数はすべてのループ反復でサイズを変更するように見えます

g=[]; % declare an array for the output 

for l=1:length(tx_databits) % map each bit into a baseband symbol 

current_bit=tx_databits(l); 
if current_bit==1 
output_pulse= 1; % if bit=1 use the symbol for binary 1 
else 
output_pulse= 0; % if bit=0 use the symbol for binary 0 
end 
g =[g output_pulse]; % append this symbol to the output signal 
end 
+1

詳細情報を入力してください:どの変数がサイズを変更しますか?どのような警告が表示されますか? 私はあなたの変数gが各反復で大きくなることは明らかです。 – bogus

答えて

1

を助けるが、それは、長さ0の配列として初期化されるので、コンパイラ(または、あなたのケースでは、Matlabの通訳)は、その必要な長さに気づかないで下さい。

各繰り返しで、新しい要素を保持できるようにgを展開する必要があります。これは、バックグラウンドで暗黙的に複数のタスクが実行されることを意味します。十分に大きなメモリスポットの割り当て、古い割り当てのコピー操作とメモリ解放、かなりのオーバーヘッドが発生します。

最も簡単な解決策は、単にループの前にメモリを事前に割り当てることです:

g = zeros(1,length(tx_databits)); 

あなたは、あなたのアプリケーションに応じて、適正な場所にoutput_pulseを書くためにあなたの反復インデックスlを使用することがあります。

g(l)=output_pulse 
+0

は、長さ0の配列、空の配列、長さ1の配列に初期化されていません。 –

+0

'g = [g output_pulse];'行も変更する必要があります。両方のことを修正すれば、あなたはアップヴォートを持っていきます。 –

+0

申し訳ありません、ありがとう! – bogus

関連する問題