Plotting 3D far field response of a phased array antenna

1 次查看(过去 30 天)
Hi - I have an issue with trying to get the directivity response pattern for a custom phased array using the toolbox command set
My array has 8 rectangular loop elements positioned in a non-symmetrical layout around a circle in the X-Y plane
phased.ConformalArray works with no errors
viewArray works with no errors, showing the correct element configuration
plotResponse produces the following error dialogue :-
----------------------------------------------------------------------------------------------------------------------------------------------------------------
>> loop_array
Expected one output from a curly brace or dot indexing expression, but there were 8 results.
Error in em.EmStructures/saveobj
Error in phased.internal.AbstractHomogeneousArray/saveObjectImpl (line 98)
s.Element = saveobj(obj.Element);
Error in phased.ConformalArray/saveObjectImpl (line 360)
s = saveObjectImpl@phased.internal.AbstractHomogeneousArray(obj);
Error in matlab.System/saveobj
Error in matlab.System/cloneImpl
Error in phased.internal.AbstractHomogeneousArray/cloneSensor (line 240)
newObj = clone(obj);
Error in phased.internal.plotRadiationPattern (line 123)
temp = cloneSensor(H);
Error in phased.internal.AbstractArray/plotResponse (line 622)
phased.internal.plotRadiationPattern(...
Error in loop_array (line 58)
plotResponse(array,fc,c,'RespCut','3D','Unit','dBi','Format','polar');
----------------------------------------------------------------------------------------------------------------------------------------------------------------
The relevant code sections are :-
----------------------------------------------------------------------------------------------------------------------------------------------------------------
c = 3e8;
az = -180:180;
elv = -90:90;
fc = 2.4e9;
frange = (1e9:0.1e9:4e9);
%
L1 = loopRectangular('Length', ll, 'Width', lw, 'Thickness', lt,'TiltAxis',[0 0 1],'Tilt',270);
L2 = loopRectangular('Length', ll, 'Width', lw, 'Thickness', lt,'TiltAxis',[0 0 1],'Tilt',90);
xpos = [ae el -el -ae -ae -el el ae];
ypos = [el ae ae el -el -ae -ae -el];
zpos = [0 0 0 0 0 0 0 0];
normal_az = [na (90-na) (90+na) (180-na) (-180+na) (-90-na) (-90+na) -na];
normal_el = [0 0 0 0 0 0 0 0];
%
array = phased.ConformalArray('Element',[L1 L2 L1 L1 L2 L1 L2 L2],'ElementPosition',[xpos;ypos;zpos],'ElementNormal',[normal_az;normal_el]);
%
hold on;
viewArray(array,'ShowNormals',true);
view(0,90);
figure;
%pattern(array,fc,az,elv,'CoordinateSystem','polar','Type','powerdb','Normalize',true,'PropagationSpeed',c);
plotResponse(array,fc,c,'RespCut','3D','Unit','dBi','Format','polar');
%
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Appreciate any insight into the source of the error as this is the first time I have used the features of this toolbox
Larry

回答(1 个)

Raag
Raag 2025-6-24
Hi Lawrence,
As per my understanding, the issue you are facing arises when attempting to use the ‘plotResponse’ function with a ‘phased.ConformalArray’ object that contains multiple different antenna elements.
The error message indicates that MATLAB expects the Element property of the array to be a single antenna object, not a list or array of different antenna types.This is a known limitation when using phased.ConformalArray with heterogeneous elements.
To resolve this, you can define a single antenna element (e.g., a loopRectangular object) and use it for all positions in the array.
You can still simulate different orientations using the ElementNormal property. This approach avoids the internal object cloning error and allows plotResponse to function correctly.
Replace the array definition section of your code with the following:
% Constants
c = 3e8; % Speed of light
fc = 2.4e9; % Frequency in Hz
az = -180:180;
elv = -90:90;
% Loop element dimensions
ll = 0.05; % Length
lw = 0.01; % Width
lt = 0.001; % Thickness
% Element positions
ae = 0.1; el = 0.05; na = 45;
xpos = [ae el -el -ae -ae -el el ae];
ypos = [el ae ae el -el -ae -ae -el];
zpos = zeros(1,8);
% Element normals
normal_az = [na (90-na) (90+na) (180-na) (-180+na) (-90-na) (-90+na) -na];
normal_el = zeros(1,8);
% Create a single loop element
L = loopRectangular('Length', ll, 'Width', lw, 'Thickness', lt);
% Create conformal array using the same element for all positions
array = phased.ConformalArray( ...
'Element', L, ...
'ElementPosition', [xpos; ypos; zpos], ...
'ElementNormal', [normal_az; normal_el]);
% Visualize array layout
figure;
viewArray(array, 'ShowNormals', true);
view(0, 90);
% Plot 3D far-field response
figure;
plotResponse(array, fc, c, 'RespCut', '3D', 'Unit', 'dBi', 'Format', 'polar');
This ensures that the array uses a consistent element type while still allowing for directional variation via ‘ElementNormal’.
The output will look this:

Community Treasure Hunt

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

Start Hunting!

Translated by