108 lines
4.2 KiB
Matlab
108 lines
4.2 KiB
Matlab
n_array = 1;
|
|
m_array = 2;
|
|
|
|
delta_phy = 15; %phase difference between adjacent patches (in degrees)
|
|
|
|
f = 10.5e+9;
|
|
c = 3e+8;
|
|
lambda = c/f;
|
|
|
|
Width_patch = 8.76e-3;
|
|
Length_patch = 9.545e-3;
|
|
dist_patch = lambda/2;
|
|
feeder_width = dist_patch - Width_patch;
|
|
feeder_length = 0.94e-3;
|
|
|
|
% Define angles (break into smaller chunks)
|
|
theta = -90:1:90;
|
|
phi = -180:1:180;
|
|
chunk_size = 30;
|
|
|
|
|
|
% Define file name for saving
|
|
matFileName = 'pattern_data.mat';
|
|
|
|
% Create a MAT file object for incremental writing
|
|
mf = matfile(matFileName, 'Writable', true);
|
|
|
|
|
|
|
|
%Size of PCB
|
|
pcbThickness = 0.508e-3;
|
|
pcbWidth = 0.5*feeder_width + (feeder_width +Width_patch)*(m_array);
|
|
pcbLength =dist_patch*n_array;
|
|
|
|
%Specifying Material of PCB
|
|
% pcbMaterial = 'RO4350B';
|
|
% pcbEpsilonR = 3.48;
|
|
pcbMaterial = 'RO4350B';
|
|
pcbEpsilonR = 3.48;
|
|
d = dielectric(pcbMaterial);
|
|
d.EpsilonR = pcbEpsilonR;
|
|
d.Thickness = pcbThickness;
|
|
%Creating dielectic Material
|
|
|
|
GndPlane = antenna.Rectangle('Length',pcbLength,'Width',pcbWidth,'Center',[0,0]); %Creating Ground Plane of Antenna
|
|
%Creating Different Shapes of antenna
|
|
Rec1 = antenna.Rectangle('Length',feeder_length,'Width',feeder_width,'Center',[-(pcbLength/2)+0.5*dist_patch,-pcbWidth/2+feeder_width/2]);
|
|
Rec2 = antenna.Rectangle('Length',Length_patch,'Width',Width_patch,'Center',[-(pcbLength/2)+0.5*dist_patch,-pcbWidth/2 + feeder_width+Width_patch/2]);
|
|
|
|
for j=1:1:n_array
|
|
for i=1:1:m_array
|
|
if((i~=1) || (j~=1))
|
|
Rec1 = Rec1 + antenna.Rectangle('Length',feeder_length,'Width',feeder_width,'Center',[(j-1)*dist_patch-(pcbLength/2)+0.5*dist_patch,-pcbWidth/2+feeder_width/2+(i-1)*dist_patch]);
|
|
Rec2 = Rec2 + antenna.Rectangle('Length',Length_patch,'Width',Width_patch,'Center',[(j-1)*dist_patch-(pcbLength/2)+0.5*dist_patch,-pcbWidth/2+feeder_width+Width_patch/2+ (i-1)*dist_patch]);
|
|
end
|
|
end
|
|
end
|
|
|
|
AntennaPlane = Rec1 + Rec2;
|
|
|
|
|
|
%%Creating PCB Stack
|
|
p = pcbStack;
|
|
p.Name = 'Strip-fed slot';
|
|
p.BoardShape = GndPlane;
|
|
p.BoardThickness = pcbThickness;
|
|
p.Layers = {AntennaPlane,d,GndPlane};
|
|
|
|
%[x Cordinate,y Cordinate,startLayer stopLayer]
|
|
p.FeedDiameter = feeder_length/4;
|
|
|
|
p.FeedLocations = [-(pcbLength/2)+0.5*dist_patch,-pcbWidth/2+feeder_length/1.4,1,3];
|
|
|
|
%p.FeedLocations = [-(pcbLength/2)+0.5*dist_patch,-pcbWidth/2+feeder_length/1.4,1,3;dist_patch-(pcbLength/2)+0.5*dist_patch,-pcbWidth/2+feeder_length/1.4,1,3;dist_patch*2-(pcbLength/2)+0.5*dist_patch,-pcbWidth/2+feeder_length/1.4,1,3];
|
|
%p.FeedLocations = [0,feeder_length/1.4,1,3;dist_patch,feeder_length/1.4,1,3;dist_patch*2,feeder_length/1.4,1,3;dist_patch*3,feeder_length/1.4,1,3;dist_patch*4,feeder_length/1.4,1,3;dist_patch*5,feeder_length/1.4,1,3;dist_patch*6,feeder_length/1.4,1,3;dist_patch*7,feeder_length/1.4,1,3;dist_patch*8,feeder_length/1.4,1,3;dist_patch*9,feeder_length/1.4,1,3;dist_patch*10,feeder_length/1.4,1,3;dist_patch*11,feeder_length/1.4,1,3;dist_patch*12,feeder_length/1.4,1,3;dist_patch*13,feeder_length/1.4,1,3;dist_patch*14,feeder_length/1.4,1,3;dist_patch*15,feeder_length/1.4,1,3];
|
|
%p.p.FeedPhase = [0 delta_phy delta_phy*2 delta_phy*3 delta_phy*4 delta_phy*5 delta_phy*6 delta_phy*7 delta_phy*8 delta_phy*9 delta_phy*10 delta_phy*11 delta_phy*12 delta_phy*13 delta_phy*14 delta_phy*15];
|
|
|
|
figure(1);
|
|
show(p); %Display Antenna
|
|
%figure(2);
|
|
% pattern(p,f,-180:30:180,0);
|
|
% pattern3Dfig = figure(2); %array pattern
|
|
% pattern(p,f);
|
|
|
|
% Initialize counters for indexing
|
|
index = 1;
|
|
% Process and store in chunks
|
|
for i = 1:chunk_size:length(theta)
|
|
for j = 1:chunk_size:length(phi)
|
|
% Simulated computation (replace with actual pattern function)
|
|
p_val = pattern(p,f,theta(i),phi(j));
|
|
mf.pattern_values(index, 1) = p_val;
|
|
% Store computed values directly into the MAT file (avoiding large RAM usage)
|
|
mf.theta_values(index, 1) = theta(i);
|
|
mf.phi_values(index, 1) = phi(j);
|
|
clear p_val theta(i) phi(j);
|
|
|
|
|
|
% Increment index
|
|
index = index + 1;
|
|
end
|
|
end
|
|
|
|
figure(2);
|
|
patternCustom( mf.pattern_values,mf.theta_values ,mf.phi_values);
|
|
% Display confirmation message
|
|
%M = readtable("pattern_data.mat");
|
|
%patternCustom(M(:,3),M(:,2),M(:,1)); |