2017-11-18 12 views
-1

berの行列がerrと一致しないことを理解しています。次のコードでエラーを克服するための助けが必要です:エラー:A(:) = B、AとBの要素の数は同じでなければなりません

for snr= 1:50 
err=0; 
ber = err; 
No= 1/10^(snr/10); 
    for i= 1: 10^6; 
     x= sign (randn(2,1)); 
     h= randn (1,2) * sqrt(1/2) + sqrt (1/2)* 1j* randn(1,2); 
     w= sqrt(No/2)* randn (1,2) + sqrt(No/2)*1j* randn(1,2); 
     alamh=[ h(1) h(2); conj(h(2)) -conj(h(1))]; 
     y= alamh * x + transpose(w); 
     h_pseudoinverse= inv(ctranspose(alamh)* alamh)\ ctranspose(alamh); 
     r= x + h_pseudoinverse * transpose (w); 
     est_x= sign(real(r)); 
     err= (est_x~=x)+err; 
    end   
ber(snr)= err/10^6; 
end 

semilogy (1:50, ber,'-O') 

エラー:内部ループの実行後

Error: A(:) = B, the number of elements in A and B must be the same

+0

「ber」にしたいことに関する詳細情報を提供できますか?内部ループが実行された後、 'err'は2x1の行列です。 'err'のすべての要素を保存したい場合は、例えば、(1)コードの前に' ber = NaN(2,50); '行を追加し、(2)' ber = err; '行を削除します。 (3) 'ber(snr)...'行を 'ber(:, snr)= err/10^6;に変更します。 – verbatross

+0

はい、これで問題は解決します。ありがとう。 – Nusrat

+0

これで問題が解決した場合は、@verbatrossで答えを受け入れてください。 – Haz

答えて

0

errは2×1行列です。あなたはbererrの各反復を保存したい場合は、あなたのことができ、例えば:

(1)(2)ラインber = err;を削除して、

、あなたのコードの前に

を行ber = NaN(2, 50);を追加(3)ber(snr)...ber(:, snr) = err/10^6;に変更します。

0

各ループでerr = 0を定義しているので、ber = errを割り当ててber = 0にするため、3行目の 'ber = err'を削除する必要があります。さらに、 est_x〜= x 'は、2つの要素を持つ列ベクトルを与えます。それらを追加してエラーの総ビット数の見積もりを得ることができます。

  for snr= 1:50 
      err=0; 
      % ber = err; 
      No= 1/10^(snr/10); 
       for i= 1: 10^6 
        x= sign (randn(2,1)); 
        h= randn (1,2) * sqrt(1/2) + sqrt (1/2)* 1j* randn(1,2); 
        w= sqrt(No/2)* randn (1,2) + sqrt(No/2)*1j* randn(1,2); 
        alamh=[ h(1) h(2); conj(h(2)) -conj(h(1))]; 
        y= alamh * x + transpose(w); 
        h_pseudoinverse= inv(ctranspose(alamh)* alamh)\ ctranspose(alamh); 
        r= x + h_pseudoinverse * transpose (w); 
        est_x= sign(real(r)); 
        err= sum((est_x~=x))+err; 
       end   
      ber(snr)= err/10^6; 
      end 

      semilogy (1:50, ber,'-O') 
関連する問題