Matlab的。四功能:???指数超过矩阵维度

时间:2013-11-13 19:02:36

标签: matlab quad

我正在使用quad函数,我收到了这个错误

??? Index exceeds matrix dimensions.

这就是我所拥有的:

function out = ray_fading(phi, gamma_b_bar,b)
out = (2*(sin(phi)).^2)/(2*(sin(phi)).^2+ b*gamma_b_bar);

我在这里使用quad:

EbNodB = [0:0.51:40];
gamma_b_bar = 10.^(EbNodB/10);
M=2;
a=(4/log2(M))*(1-(1/sqrt(M)));
b=3*log2(M)/(M-1);

for j = 1:length(gamma_b_bar)     
  Pb_bar = [Pb_bar (a/pi)* quad('ray_fading',0,pi/2,[],[],gamma_b_bar(j),b)];
end
figure(1);
semilogy(EbNodB,Pb_bar)
xlabel('SNR, EbNo(dB)');
ylabel('Bit error probability, Pe');
title('Theoretical results of BER of M-QAM');

当我传递gamma_bar_b(j)时,我不知道为什么当Pb_bar具有相同的光线衰落长度时出现错误......

一些帮助会很棒,谢谢:)

1 个答案:

答案 0 :(得分:1)

我要做的是两个简单的改动:

quad('ray_fading',0,pi/2,[],[],gamma_b_bar(j),b)

应该是

quad(@(x)(ray_fading(x,gamma_b_bar(j), b)),0,pi/2)

out = (2*(sin(phi)).^2)/(2*(sin(phi)).^2+ b*gamma_b_bar);

应该是

out = (2*(sin(phi)).^2)./(2*(sin(phi)).^2+ b*gamma_b_bar);

(注意./而不是/)

修改

然而,我们可能会做得更好。我们可以计算您的integral analytically,因此这些行相等

quad(@(x)(ray_fading(x,gamma_b_bar(j), b)),0,pi/2) 
pi/2 * (1-sqrt(b*gamma_b_bar(j)/(2+b*gamma_b_bar(j))))

所以现在我们可以用:

替换整个for循环
Pb_bar = a/2 * (1-sqrt(b*gamma_b_bar./(2+b*gamma_b_bar)));