# Index exceeds the number of array elements. Index must not exceed 1.

14 views (last 30 days)
Elif on 25 May 2024 at 14:43
Answered: Image Analyst on 25 May 2024 at 16:50
I got "Index exceeds the number of array elements. Index must not exceed 1." problem in the line 36 at the code below:
% Define constants
c = 3e8; % Speed of light
% Define scenario parameters (adjust these as needed)
f = 2e9; % Operating frequency
d_BS_IRS = 100; % Distance between BS and IRS (meters)
d_IRS_UE = 50; % Distance between IRS and UE (meters)
% Define IRS element properties
material = "metal"; % Choose "metal" or "plastic"
element_spacing = 0.5; % Spacing between elements (meters)
% Function to calculate reflection coefficient
function reflectionCoefficient = getReflectionCoefficient(material, theta)
if strcmp(material, "metal")
reflectionCoefficient = ones(size(theta));
elseif strcmp(material, "plastic")
reflectionCoefficient = 0.5 * ones(size(theta));
else
error("Invalid material type");
end
end
% Simulate for different incident angles
theta_range = -30:0.5:30; % Range of incident angles (degrees)
% Calculate path lengths for each angle
path_length_BS_IRS_UE = d_BS_IRS + d_IRS_UE;
path_length_BS_IRS_reflect_UE = 2 * sqrt(d_BS_IRS^2 + d_IRS_UE^2)
path_length_BS_IRS_reflect_UE = 223.6068
% Loop through angles and calculate phase shifts for perfect reflection
phase_shifts = zeros(size(theta));
for i = 1:length(theta)
% Ideal phase shift for constructive interference at UE
phase_shifts(i) = 2*pi*f/c * (path_length_BS_IRS_reflect_UE(i) - path_length_BS_IRS_UE); %(!!!ERROR!!!!)
end
Index exceeds the number of array elements. Index must not exceed 1.
% Simulate reflection with material properties
reflection_coefficients = getReflectionCoefficient(material, theta);
% Plot results (modify for desired visualization)
figure;
plot(theta_range, abs(reflection_coefficients).^2, 'DisplayName', material);
xlabel('Incident Angle (degrees)');
ylabel('Reflected Power (normalized)');
title('Reflection Coefficient vs. Incident Angle');
legend;
Here is the error line:
phase_shifts(i) = 2*pi*f/c * (path_length_BS_IRS_reflect_UE(i) - path_length_BS_IRS_UE); %(!!!ERROR!!!!)

Torsten on 25 May 2024 at 15:40
Edited: Torsten on 25 May 2024 at 15:42
path_length_BS_IRS_reflect_UE(i) does not exist for i > 1 because path_length_BS_IRS_reflect_UE is a scalar value, namely 223.6068.

Image Analyst on 25 May 2024 at 16:50
Why do you think path_length_BS_IRS_reflect_UE = 2 * sqrt(d_BS_IRS^2 + d_IRS_UE^2) should have a value for i = 2m 3m etc, when you defined it as a single number:
path_length_BS_IRS_reflect_UE = 2 * sqrt(d_BS_IRS^2 + d_IRS_UE^2)
You say that you want to compute the path length for each angle but you are not using the angle theta in any way whatsoever when you do
% Calculate path lengths for each angle
path_length_BS_IRS_UE = d_BS_IRS + d_IRS_UE;
path_length_BS_IRS_reflect_UE = 2 * sqrt(d_BS_IRS^2 + d_IRS_UE^2)
so those two variables are simply single numbers, not vectors.