错误: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
答
内循环运行后,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')
你能提供更多关于'ber'的信息吗?内循环运行后,“err”是一个2×1的矩阵。如果你想存储err'的'所有元素,那么你可以例如(1)添加一行'BER = NaN的(2,50);'你的代码之前,(2)删除该行'BER = ERR;' ,(3)将ber(snr)...'行改为ber(:, snr)= err/10^6;'。 – verbatross
是的,解决了这个问题。谢谢。 – Nusrat
如果解决了问题,请通过@verbatross接受答案。 – Haz