Index in position 1 is invalid. Array indices must be positive integers or logical values.
4 ビュー (過去 30 日間)
古いコメントを表示
Hello MathWorks Community,
I am running into an issue where I am trying to plot a function that has two variables.
I attached my code in the description:
E_Plane_H_Plane.m
I calculate my U_Rad_Norm_dB and it is in terms of theta and phi.
My theta variable is an array of values:
theta = 0:0.01:pi/2
The phi variable has "fixed" values
phi_E_1 = 0;
phi_E_2 = pi;
phi_H_1 = pi/2;
phi_H_2 = 3*(pi/2);
What I am trying to plot is:
1) E_Plane_1 = U_Rad_Norm_dB(theta,phi_E_1);
2) E_Plane_2 = U_Rad_Norm_dB(theta,phi_E_2);
3) H_Plane_1 = U_Rad_Norm_dB(theta,phi_H_1);
4) H_Plane_2 = U_Rad_Norm_dB(theta,phi_H_2);
My issue is that I calculate U_Rad_Norm_dB through several different variables. I'm not sure how to change it into a "function" to where I can "plug in" my "theta array" and my individual "phi" values.
When I try to use a for loop, it gives me the error:
Index in position 1 is invalid. Array indices must be positive integers or logical values.
I've tried to create a function previously for this, but it hasn't worked and it made things more difficult when I was trying to pass my (theta,phi) values.
2 件のコメント
採用された回答
KSSV
2024 年 7 月 10 日
You need to proceed like this:
tic
% Specifying the length of the array
N = 1000;
% Making phi and theta array lengths the same size
phi = linspace(0,2*pi,N);
theta = linspace(0,pi/2,N);
[phi,theta] = meshgrid(phi,theta) ;
% Permittivity Value
e_r = 5;
% Permeability Value
u_r = 1;
% Replacing "j" with "1i" for robustness
j = 1i;
% Intrinsic Impedance of Free Space
Eta_Air = 377;
% Speed of light in meters/second = c = 3 * 10^8 m/s
% Speed of light in centimeters/second = c = 3*10^10 cm/s
c = 3*10^8;
% Operational Frequency in GHz = 3 GHz
% Operational Frequency in Hz = 3 * 10^9 Hz
f_oper = 3*10^9;
% Operational Wavelength in cm = Speed of light/Operational Frequency
lambda_oper = c / f_oper;
% Wavenumber in free space
k = (2*pi)/(lambda_oper);
% Length of the patch in cm
L = (lambda_oper)/(2*sqrt(e_r * u_r));
% Width of the Patch in cm
W = 0.75*L;
% Thickness of the substrate in meters
d = ((lambda_oper)/(20*sqrt(e_r*u_r)));
% Value of r = 1, because "r" cancels out
r=1;
% Stationary expressions
k_x = (k).*sin(theta).*cos(phi);
k_y = (k).*sin(theta).*sin(phi);
k_z_1 = (k).*sqrt((e_r*u_r)-(sin(theta)).^2);
k_z_2 = (k).*cos(theta);
% Msx
Ms_x = -d*2*(L^2)*k_x.*sin((k_y*W)/2).*exp((j*k_x*L)/2).*exp((j*k_y*W)/2).*(cos((k_x*L)/2).*(1./((pi)^2 - (k_x*L).^2)));
% Msy
Ms_y = (-d*2*k_x.*cos((k_x*L)/2).*exp((j*k_x*L)/2).*exp((j*k_y*W)/2).*W.*(sin((k_y*W)/2).*((k_y*W)/2))).^2;
% Tm and Te
Tm = (e_r)*k_z_2.*cos(k_z_1*d)+(j.*k_z_1.*sin(k_z_1*d));
Te = k_z_1.*cos(k_z_1.*d)+(j.*k_z_2.*u_r.*sin(k_z_1*d));
% Calculating E_theta
E_theta_1 = j*k.*cos(theta).*(exp(-j*k*r))*(1/(2*pi*r)).*cos(k_z_1*d).*exp(j.*k_z_2*d);
E_theta_2 = (e_r).*k.*sin(phi).*(1./Tm).*Ms_x;
E_theta_3 = (e_r)*k.*cos(phi).*(1./Tm).*Ms_y;
E_theta = (E_theta_1).*((E_theta_2 - E_theta_3));
% Calculating E_Phi
E_phi_1 = j*k.*cos(theta).*(exp(-j*k*r))*(1/(2*pi*r)).*cos(k_z_1*d).*exp(j.*k_z_2*d);
E_phi_2 = k_z_1.*cos(phi).*(1./Te).*(Ms_x);
E_phi_3 = k_z_1.*sin(phi).*(1./Te).*(Ms_y);
E_phi = (E_phi_1).*(E_phi_2 + E_phi_3);
% Magnitude of E_theta
E_theta_conjugate = conj(E_theta);
E_theta_total = E_theta.*E_theta_conjugate;
% Magnitude of E_phi
E_phi_conjugate = conj(E_phi);
E_phi_total = E_phi.*E_phi_conjugate;
% Taking the Real Part of E_theta and E_phi
E_Field_Total = real(E_theta_total+E_phi_total);
% Radiation Intensity (Linear)
U_Rad = (((r)^2)/(2*Eta_Air)).*E_Field_Total;
% Normalized Radiation Intensity (Linear)
U_Rad_Norm = U_Rad / max(U_Rad(:));
% Normalized Radiation Intensity (dB)
U_Rad_Norm_dB = 10*log10(U_Rad_Norm);
3 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Beamforming and Direction of Arrival Estimation についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!