フィルターのクリア

why i am getting the error "Index exceeds the number of array elements (1)" in my code? i am getting the error in line 33.

2 ビュー (過去 30 日間)
clc
clear variables
close all
segma_N = 10.^-7;
% p_db = 0:5:30;
% p = 10.^(p_db/10);%power
p = 0.07;
R = 0.5; %Optoelectronic conversion factor
rng(1);
I = abs(random('normal',1,2,1,100))*1e-8;
% Processing
%a= 3.99;% Alpha
%b=2; % Beta
a=[3.99 3.99 3.99 3.5 3.7 3.99]; % Alpha
b=[6 4 2 2 2 2]; % Beta
% nz = zeros(1, length(p_db));
% z = zeros(1, length(p_db));
SNR = 0:2:30;
SNR_db = 10.^(SNR/10);
nz = zeros(1, length(SNR_db));
z = zeros(1, length(SNR_db));
for k=1:length(a)
for j = 1:length(z)
yz =log2(1+((p(j).*R.*I)./segma_N).^2).*zpdf(I,a(k),b(k));
z(k,j) = trapz(I, yz);
end
end
% Plot
figure
semilogy(SNR_db,nz(1,:),'-ks','MarkerFaceColor','k')
hold on
semilogy(SNR_db,nz(2,:),'-ro','MarkerFaceColor','r')
semilogy(SNR_db,nz(3,:),'-b^','MarkerFaceColor','b')
grid on
xlabel('SNR [dB]')
ylabel('channel Cpacity')
title('Intial Results')
xlim([0 30])
and the function zpdf is
function G = zpdf(I,a,b)
% a: Alpha
% b: Beta
c = 0.2; %Gamma
%d = 2.6124; %0.8; %Big omega prime
omega = 1.3265;
b_0 = 0.1079; %Average power of the coupled-to-LOS scattering component
row = 0.55; %Scattering power coupled to the LOS component
d = (omega+row.*2.*b_0+2.*sqrt(2.*b_0.*omega.*row));%Big omega prime Average optical power of coherent contributions
Aperture_radius = 0.1; %Aperture_radius
segma_s = 0.2; %Jitter standard deviation
omega_z = 2.5; %Beam Width
v = (sqrt(pi)*Aperture_radius)/(sqrt(2)*omega_z);
omega_zeq_2 = (omega_z^2)*(sqrt(pi)*erf(v))/(2*v*exp(-(v^2)));
g = omega_zeq_2/(2*segma_s);
A0 = (erf(v))^2;
A = (2*(a^(a/2))/((c^(1+a/2))*gamma(a)))*(((c*b)/(c*b+d))^(b+a/2));
First = (((g^2)*A)/2)*(I.^-1);
count1 = 0;
for k = 1:b
ak = (nchoosek(b-1,k-1))*(((c*b+d)^(1-k/2))/gamma(k))*((d/c)^(k-1))*((a/b)^(k/2));
Part1 = ak*(a*b/(c*b+d))^(-(a+k)/2);
Part2_1 = (a*b/(c*b+d));
Part2_2 = I/A0;
Part2 = meijerG([],g^2,[g^2,a,k],[],Part2_1*Part2_2);
count1 = count1 + Part1.*Part2;
end
G = First.*count1;
end
  3 件のコメント
Atrolita afra
Atrolita afra 2020 年 10 月 16 日
yz =log2(1+((p(j).*R.*I)./segma_N).^2).*zpdf(I,a(k),b(k));
i am getting the error in this line saying , "Index exceeds the number of array elements (1)."
Atrolita afra
Atrolita afra 2020 年 10 月 16 日
-_- then what is the solution?

サインインしてコメントする。

回答 (1 件)

Adam Danz
Adam Danz 2020 年 10 月 16 日
From you code,
p = 0.07;
p has 1 value, size (1,1).
In the loop below, when j>1 you're getting the indexing error because p only has 1 value.
for k=1:length(a)
for j = 1:length(z)
yz =log2(1+((p(j).*R.*I)./segma_N).^2).*zpdf(I,a(k),b(k));
% ^^^
z(k,j) = trapz(I, yz);
end
end
There may be other errors but I'm not going to read through the code to figure that out. If there are more errors, please attach ther data so I can run the code.
  2 件のコメント
Atrolita afra
Atrolita afra 2020 年 10 月 16 日
can i do that integration any others way? i have used those loop for integrate the function
Adam Danz
Adam Danz 2020 年 10 月 16 日
p doesn't change. If that's what your intensions are, just remove the indexing for p.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by