ULA (Uniform Linear Array)
ULA is the Object that is for design and simulating the set of antenna placed along a line. This is the type of array antenna that are used for MIMO (e.g, LTE MIMO).
Basic Numerical Test
ULA_Basic_01.m
|
c = 3e8; % propagation speed
fc = 26e9; % carrier frequency
lambda = c/fc; % wavelength
txarray = phased.ULA('NumElements',4,'ElementSpacing',lambda/2)
txmipos = getElementPosition(txarray)/lambda
txarraystv = phased.SteeringVector('SensorArray',txarray,'PropagationSpeed',c)
txang = [0 ; 0];
wt = txarraystv(fc,txang)'
txbeam_ang = 0;
txsv = steervec(txmipos,txbeam_ang)
txbeam = wt * txsv
|
txang = [0 ; 0];
txbeam_ang = 0
|
txarray =
phased.ULA with properties:
Element: [1×1 phased.IsotropicAntennaElement]
NumElements: 4
ElementSpacing: 0.0058
ArrayAxis: 'y'
Taper: 1
txmipos =
0 0 0 0
-0.7500 -0.2500 0.2500 0.7500
0 0 0 0
txarraystv =
phased.SteeringVector with properties:
SensorArray: [1×1 phased.ULA]
PropagationSpeed: 300000000
IncludeElementResponse: false
NumPhaseShifterBits: 0
wt =
1 1 1 1
txsv =
1
1
1
1
txbeam =
4
|
txang = [0 ; 0];
txbeam_ang = -10
|
txarray =
phased.ULA with properties:
Element: [1×1 phased.IsotropicAntennaElement]
NumElements: 4
ElementSpacing: 0.0058
ArrayAxis: 'y'
Taper: 1
txmipos =
0 0 0 0
-0.7500 -0.2500 0.2500 0.7500
0 0 0 0
txarraystv =
phased.SteeringVector with properties:
SensorArray: [1×1 phased.ULA]
PropagationSpeed: 300000000
IncludeElementResponse: false
NumPhaseShifterBits: 0
wt =
1 1 1 1
txsv =
0.6835 + 0.7300i
0.9630 + 0.2694i
0.9630 - 0.2694i
0.6835 - 0.7300i
txbeam =
3.2930
|
txang = [0 ; 0];
txbeam_ang = 10
|
txarray =
phased.ULA with properties:
Element: [1×1 phased.IsotropicAntennaElement]
NumElements: 4
ElementSpacing: 0.0058
ArrayAxis: 'y'
Taper: 1
txmipos =
0 0 0 0
-0.7500 -0.2500 0.2500 0.7500
0 0 0 0
txarraystv =
phased.SteeringVector with properties:
SensorArray: [1×1 phased.ULA]
PropagationSpeed: 300000000
IncludeElementResponse: false
NumPhaseShifterBits: 0
wt =
1 1 1 1
txsv =
0.6835 - 0.7300i
0.9630 - 0.2694i
0.9630 + 0.2694i
0.6835 + 0.7300i
txbeam =
3.2930
|
txang = [-10 ; 0];
txbeam_ang = 0
|
txarray =
phased.ULA with properties:
Element: [1×1 phased.IsotropicAntennaElement]
NumElements: 4
ElementSpacing: 0.0058
ArrayAxis: 'y'
Taper: 1
txmipos =
0 0 0 0
-0.7500 -0.2500 0.2500 0.7500
0 0 0 0
txarraystv =
phased.SteeringVector with properties:
SensorArray: [1×1 phased.ULA]
PropagationSpeed: 300000000
IncludeElementResponse: false
NumPhaseShifterBits: 0
wt =
0.6835 - 0.7300i 0.9630 - 0.2694i 0.9630 + 0.2694i 0.6835 + 0.7300i
txsv =
1
1
1
1
txbeam =
3.2930
|
txang = [10 ; 0];
txbeam_ang = 0
|
txarray =
phased.ULA with properties:
Element: [1×1 phased.IsotropicAntennaElement]
NumElements: 4
ElementSpacing: 0.0058
ArrayAxis: 'y'
Taper: 1
txmipos =
0 0 0 0
-0.7500 -0.2500 0.2500 0.7500
0 0 0 0
txarraystv =
phased.SteeringVector with properties:
SensorArray: [1×1 phased.ULA]
PropagationSpeed: 300000000
IncludeElementResponse: false
NumPhaseShifterBits: 0
wt =
0.6835 + 0.7300i 0.9630 + 0.2694i 0.9630 - 0.2694i 0.6835 - 0.7300i
txsv =
1
1
1
1
txbeam =
3.2930
|
Plotting Radiation Pattern in 2D
ULA_Basic_02.m
|
c = 3e8; % propagation speed
fc = 26e9; % carrier frequency
lambda = c/fc; % wavelength
NoOfTxAntenna = 4
txarray = phased.ULA('NumElements',NoOfTxAntenna,'ElementSpacing',lambda/2);
txmipos = getElementPosition(txarray)/lambda;
txarraystv = phased.SteeringVector('SensorArray',txarray,'PropagationSpeed',c);
txang = [0 ; 0];
wt = txarraystv(fc,txang)';
txbeam_ang = -90:90;
txbeam_ang_rad = (pi*txbeam_ang)/180;
txbeam = abs(wt*steervec(txmipos,txbeam_ang));
txbeam = txbeam/max(txbeam);
[txbeampos_x,txbeampos_y] = pol2cart(deg2rad(txbeam_ang),txbeam);
hFig = figure(1);
set(hFig, 'Position', [0 0 800 400]);
subplot(1,2,1);
plot(txbeam_ang,txbeam,'r-');
xlabel('txbeam ang');ylabel('txbeam');
set(gca,'xtick',-90:15:90)
xlim([txbeam_ang(1) txbeam_ang(end)]); ylim([0 1.0]);
subplot(1,2,2);
polarplot(txbeam_ang_rad,txbeam,'r');
set(gca,'RTickLabels',[]);
|
Following examples shows the pattern of an array antenna with different steering angles.
NoOfTxAntenna = 4
txang = [0 ; 0];
|
|
NoOfTxAntenna = 4
txang = [10 ; 0];
|
|
NoOfTxAntenna = 4
txang = [-30 ; 0];
|
|
NoOfTxAntenna = 8
txang = [0 ; 0];
|
|
NoOfTxAntenna = 8
txang = [-30 ; 0];
|
|
Following examples shows how the shape of an array antenna changes as the number of elements increases.
NoOfTxAntenna = 2
txang = [0 ; 0];
|
|
NoOfTxAntenna = 4
txang = [0 ; 0];
|
|
NoOfTxAntenna = 8
txang = [0 ; 0];
|
|
NoOfTxAntenna = 16
txang = [0 ; 0];
|
|
Plotting Radiation Pattern in 3D
ULA_Basic_03.m
|
c = 3e8; % propagation speed
fc = 26e9; % carrier frequency
lambda = c/fc; % wavelength
NoOfTxAntenna = 8
txarray = phased.ULA('NumElements',NoOfTxAntenna,'ElementSpacing',lambda/2);
pattern(txarray,fc,[-180:180],[-90:90],...
'PropagationSpeed',c,...
'CoordinateSystem','polar',...
'Type','powerdb')
|
NoOfTxAntenna = 2
|
|
NoOfTxAntenna = 4
|
|
NoOfTxAntenna = 8
|
|
NoOfTxAntenna = 16
|
|
Steering ULA Pattern in 3D
ULA_Basic_04.m
|
c = 3e8;
fc = 26e9;
lambda = c/fc;
NoOfTxAntenna = 4;
txarray = phased.ULA('NumElements',NoOfTxAntenna,'ElementSpacing',lambda/2);
steer_ang = [15;0];
stv = phased.SteeringVector('SensorArray',txarray);
w = stv(fc,steer_ang);
pattern(txarray,fc,[-180:180],[-90:90],...
'PropagationSpeed',c,...
'CoordinateSystem','polar',...
'Type','powerdb',...
'Weights',w)
view(90,0);
|
steer_ang = [-15;0];
'Type','powerdb'
view(90,0);
|
steer_ang = [0;0];
'Type','powerdb'
view(90,0);
|
steer_ang = [15;0];
'Type','powerdb'
view(90,0);
|
|
|
|
steer_ang = [30;0];
'Type','powerdb'
view(90,0);
|
steer_ang = [45;0];
'Type','powerdb'
view(90,0);
|
steer_ang = [60;0];
'Type','powerdb'
view(90,0);
|
|
|
|
steer_ang = [-15;0];
'Type','power'
view(90,0);
|
steer_ang = [0;0];
'Type','power'
view(90,0);
|
steer_ang = [15;0];
'Type','power'
view(90,0);
|
|
|
|
steer_ang = [30;0];
'Type','power'
view(90,0);
|
steer_ang = [45;0];
'Type','power'
view(90,0);
|
steer_ang = [60;0];
'Type','power'
view(90,0);
|
|
|
|
steer_ang = [30;0];
'Type','power'
view(90,0);
|
steer_ang = [45;0];
'Type','power'
view(120,0);
|
steer_ang = [60;0];
'Type','power'
view(90,0);
|
|
|
|
Steering ULA Pattern in 2D
ULA_Basic_05.m
|
c = 3e8;
fc = 26e9;
lambda = c/fc;
NoOfTxAntenna = 4;
txarray = phased.ULA('NumElements',NoOfTxAntenna,'ElementSpacing',lambda/2);
steer_ang = [-5;0];
stv = phased.SteeringVector('SensorArray',txarray);
w = stv(fc,steer_ang);
subplot(1,2,1);
pattern(txarray,fc,[-180:180],0,...
'PropagationSpeed',c,...
'CoordinateSystem','polar',...
'Type','powerdb',...
'Weights',w)
subplot(1,2,2);
pattern(txarray,fc,[-180:180],0,...
'PropagationSpeed',c,...
'CoordinateSystem','rectangular',...
'Type','powerdb', ...
'Weights',w)
set(gcf, 'Position', [200, 200, 740, 350])
|
NoOfTxAntenna = 4;
steer_ang = [-5;0];
'Type','powerdB'
|
|
NoOfTxAntenna = 4;
steer_ang = [0;0];
'Type','powerdB'
|
|
NoOfTxAntenna = 4;
steer_ang = [5;0];
'Type','powerdB'
|
|
NoOfTxAntenna = 4;
steer_ang = [10;0];
'Type','powerdB'
|
|
NoOfTxAntenna = 4;
steer_ang = [15;0];
'Type','powerdB'
|
|
NoOfTxAntenna = 4;
steer_ang = [30;0];
'Type','powerdB'
|
|
NoOfTxAntenna = 4;
steer_ang = [45;0];
'Type','powerdB'
|
|
NoOfTxAntenna = 4;
steer_ang = [60;0];
'Type','powerdB'
|
|
|
|