错误:A(:) = B,在A元素和B的数目必须是相同的

错误:A(:) = B,在A元素和B的数目必须是相同的

问题描述:

据我所知的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”是一个2×1的矩阵。如果你想存储err'的'所有元素,那么你可以例如(1)添加一行'BER = NaN的(2,50);'你的代码之前,(2)删除该行'BER = ERR;' ,(3)将ber(snr)...'行改为ber(:, snr)= err/10^6;'。 – verbatross

+0

是的,解决了这个问题。谢谢。 – Nusrat

+0

如果解决了问题,请通过@verbatross接受答案。 – Haz

内循环运行后,err是2×1矩阵。如果你想的err每次迭代存储在ber那么你就可以,例如:

(1)你的代码之前添加一行ber = NaN(2, 50);

(2)删除线ber = err;,并

(3)改变线ber(snr)...ber(:, snr) = err/10^6;

您需要删除第三行“BER = ERR”,因为在每个循环要定义ERR = 0,那么你指定BER =犯错,这将使BER = 0。此外,在行号14,因为' 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')