MatLab Toolbox - Phase Array System
本文翻译自http://www.sharetechnote.com/
ULA (Uniform Linear Array)
ULA是用于设计和模拟沿直线放置的一组天线的对象。这是用于MIMO(例如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
不同配置的测试结果
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',[]);
以下三个示例显示了具有4个单元的阵列天线的波束图,这取决于不同的转向角。
以下三个示例显示了具有8个单元的阵列天线的波束图,这取决于不同的转向角。
下面的三个例子显示了波束的形状如何随着阵列天线中天线单元的数量增加而变化。
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')
Steering with Custom Steering Vector
以下是定义自己的转向矢量的示例。
Example 01
本例中的转向矢量(标记为红色)来自NR的CSI码本。其推导如下所述。
点击查看代码
c = 3e8; % propagation speed
fc = 26e9; % carrier frequency
lambda = c/fc; % wavelength
NoOfTxAntenna = 4;
antennaElement = phased.CrossedDipoleAntennaElement;
txarray = phased.ULA('NumElements',NoOfTxAntenna,'ElementSpacing',lambda/2,'Element',antennaElement);
txmipos = getElementPosition(txarray)/lambda;
txarraystv = phased.SteeringVector('SensorArray',txarray,'PropagationSpeed',c);
wt = [1 exp(j*pi/4) exp(j*pi/2) (exp(j*pi/2)*exp(j*pi/4))];
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',[]);
点击查看代码
c = 3e8; % propagation speed
fc = 26e9; % carrier frequency
lambda = c/fc; % wavelength
NoOfTxAntenna = 4;
txarray = phased.ULA('NumElements',NoOfTxAntenna,'ElementSpacing',lambda/2);
w = [1 exp(j*pi/4) exp(j*pi/2) (exp(j*pi/2)*exp(j*pi/4))]';
hFig = figure(1);
pattern(txarray,fc,[-180:180],[-90:90],...
'PropagationSpeed',c,...
'CoordinateSystem','polar',...
'Type','powerdb', ...
'Weights',w)
set(gcf,'color','w');
view(90,20);
sTitle = sprintf("Antenna Array = %d by %d",1,NoOfTxAntenna);
title(sTitle);
set(hFig,'Position',[300 100 800 700]);