Files
2026-03-15 22:03:54 +00:00

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));