📄 defant.m
字号:
if isempty(antennaType) antennaType = 'baseAnt';end%if% ****************** Antenna definitions ******************%if (0)% ----------------------------------------------------------------------- %% Base antenna definition.% ant = defant('baseAnt', antennaType, noElem)% ----------------------------------------------------------------------- %if (strcmp(antennaType, 'baseAnt')) antennaType = in1; noElem = in2; ant.dataType = 'AntDefT'; ant.version = antDefVersion; ant.name = 'none'; ant.antennaType = antennaType; ant.noElem = noElem; ant.beamSpaceTrans = 1; ant.Dmax = 1; % Maximum directivity. ant.efficiency = 1; % Conduction and dielectric efficiency ec*ed.if (0)% ----------------------------------------------------------------------- %% Base antenna element definition.% ant = defant('baseElemAnt', antennaType, noElem patternType)% ----------------------------------------------------------------------- %%elseif (strcmp(antennaType, 'baseElemAnt')) antennaType = in1; noElem = in2; ant = defant('baseAnt', 'elem', noElem) ant.patternType = patternType; %ant.elemOrient = elemOrient; ant.polarization = 1; % CxVectorT with three elements: % polarization(1): x-coordinate. % polarization(2): y-coordinate. % polarization(3): z-coordinate.%end%ifend%if (0)% ----------------------------------------------------------------------- %% 'isotropElem' : Isotropical antenna element.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'isotropElem')) if (nargin > 1), error('DBT-Error: Too many input parameters.'), end%if ant.dataType = 'AntDefT'; ant.version = antDefVersion; ant.name = 'none'; ant.antennaType = 'elem'; ant.patternType = 'isotrop'; %ant.lambda = in1; % Removed this field. ant.noElem = 1; ant.beamSpaceTrans = 1;% ----------------------------------------------------------------------- %% 'pattFuncElem'% Antenna element whose antenna pattern is given by a function.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'pattFuncElem')) if (nargin > 3), error('DBT-Error: Too many input parameters.'), end%if if (isempty(in2)), in2 = zeros(2,1); end%if elemOrient = zeros(2,1); elemOrient(1:size(in2,1),:) = in2; % Enabling only theta as directional angle ant.dataType = 'AntDefT'; ant.version = antDefVersion; ant.name = 'none'; ant.antennaType = 'elem'; ant.patternType = 'func'; ant.patternFunc = in1; ant.elemOrient = elemOrient; %ant.lambda = in2; % Removed this field. ant.noElem = 1; ant.beamSpaceTrans = 1;% ----------------------------------------------------------------------- %% 'ULA' : Uniform linear array.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'ULA')) if ((nargin > 4) | (length(in1) > 2)) error('DBT-Error: Too many input parameters.') end%if noElem = in1(1,1); distElem = in1(1,2); %lambda = in1(1,3); if (nargin < 4) taper = ones(noElem,1); else taper = in3; end ant.dataType = 'AntDefT'; ant.version = antDefVersion; ant.name = 'none'; ant.antennaType = antennaType; ant.noElem = noElem; %ant.lambda = lambda; % Removed this field. ant.distElem = distElem; ant.element = in2; ant.beamSpaceTrans = taper;% ----------------------------------------------------------------------- %% 'isotropULA' : Uniform linear array with isotropical antenna element.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'isotropULA')) if ((nargin > 2) | (length(in1) > 2)) error('DBT-Error: Too many input parameters.') end%if noElem = in1(1,1); %lambda = in1(1,3); elem = defant('isotropElem'); ant = defant('ULA', in1, elem, ones(noElem,1));% ----------------------------------------------------------------------- %% 'LA' : Non-Uniform linear array.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'LA')) if (nargin > 5), error('DBT-Error: Too many input parameters.'), end%if elemPos = in1; if ((size(elemPos,2) > 1) & (size(elemPos,1) == 1)) % Test #1 of elemPos disp('elemPos should be a column vector, transposing...') elemPos = elemPos'; elseif ((size(elemPos,1) > 1) & (size(elemPos,2) > 1)) error('DBT-Error: The element position field must be a vector') end%if if (elemPos(1) ~= 0) % Test #2 of elemPos error('DBT-Error: First element in elemPos should be 0, since it is a relative position') end%if lambda = in2; if (nargin < 5) taper = ones(size(elemPos)); else taper = in4; end%if ant.dataType = 'AntDefT'; ant.version = antDefVersion; ant.name = 'none'; ant.antennaType = antennaType; %ant.lambda = lambda; % Removed this field. ant.elemPos = elemPos; ant.noElem = length(elemPos); ant.element = in3; ant.beamSpaceTrans = taper;% ----------------------------------------------------------------------- %% 'array' : Array antenna.%% ant = defant('array', elemPos, [], element, [], elemOrient, couplingMat)% ant = defant(antennaType, in1, in2, in3, in4, in5, in6, in7)%% Start: 980515 Svante Bj鰎klund (svabj).% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'array'))%elseif (strcmp(antennaType, 'array') | strcmp(antennaType, 'BFArray')) noElem = length(in1); elemPos = zeros(3,noElem); elemPos(1:size(in1,1),:) = in1; if ~isempty(in4) % beamSpaceTrans error('A beamSpaceTrans (in4) can not be specified for "array" antenna type.'); end%if if isempty(in5) % elemOrient in5 = zeros(3,noElem); end%ifif (0) if iscell(in3) % element nElemDef = length(in3); else nElemDef = 1; end %size(in4),nElemDef if (size(in4,1) ~= nElemDef) % beamSpaceTrans error('Illegal number of rows of beamSpaceTrans.'); end if (size(in4,2) ~= noElem) % beamSpaceTrans error('Illegal number of columns of beamSpaceTrans.'); endelse if (strcmp(antennaType, 'BFArray')) chkdtype(in4,'CxMatrixT') % beamSpaceTrans if (size(in4,1) ~= noElem) % beamSpaceTrans error('Illegal number of rows of beamSpaceTrans.'); end end%ifend%if (0) ant = setr([], 'dataType', 'AntDefT'); ant = setr(ant,'version', antDefVersion); ant = setr(ant,'name','none'); ant = setr(ant,'antennaType', antennaType); ant = setr(ant,'elemPos', elemPos); ant = setr(ant,'noElem', noElem); ant = setr(ant,'element', in3); %ant = setr(ant,'beamSpaceTrans',in4); ant = setr(ant,'elemOrient', in5); ant = setr(ant,'couplingMat', in6);% ----------------------------------------------------------------------- %% 'beamform' : Beamforming virtual antenna.%% ant = defant('beamform', element, beamSpaceTrans)% ant = defant(antennaType, in1, in2, in3, in4, in5, in6, in7)%% Start: 980520 Svante Bj鰎klund (svabj).% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'beamform')) ant.dataType = 'AntDefT'; ant.version = antDefVersion; ant.name = 'none'; ant.antennaType = antennaType; ant.noElem = size(in2,2); % Number of channels out. ant.element = in1; ant.beamSpaceTrans = in2; %ant = setr(ant,'noElem', size(ant.element.beamSpaceTrans)); % Forgotten row oder column in "size" command. % Number of channels or lobes out from the antenna "element" % == in to the antenna on this level.% ----------------------------------------------------------------------- %% 'BFArray' : Array antenna with beamforming.%% ant = defant('BFArray', elemPos, [], element, beamSpaceTrans, elemOrient,% couplingMat)% ant = defant(antennaType, in1, in2, in3, in4, in5, in6, in7)%% Start: 980607 Svante Bj鰎klund (svabj).% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'BFArray')) ant1 = defant('array', in1, in2, in3, [], in5, in6, in7); ant = defant('beamform', ant1, in4);% ----------------------------------------------------------------------- %% 'aimtEx2' : The AIMT application example antenna 2. One-dimensional.%% Implementation by svabj.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'aimtEx2'))% posErr (Vector of PosT): Position errors [m] for the 51 elements. Size = (51 X 1). if (nargin > 2), error('DBT-Error: Too many input parameters.'), end%if if (isempty(in1)) posErr = 0; else posErr = in1; end%if % ------- Create antenna elements. ------- nElem = 51; elem21 = defant('pattFuncElem', 'sqrt(cos(x(1,:)))'); elem2 = cell(1,nElem); for n = 1:nElem, elem2{n}=elem21; end%for n %elem2 = repmat({},1,nElem); % Alternative way to create elem2. % ------- Create beamforming matrix to do subarray beamforming. ------- T = zeros(nElem,25); for n=1:25 T((2*n-1):(2*n-1)+2,n) = [0.5 1 0.5].'; end%for n elemPos = [0:0.5:25]*0.1 + posErr; ant = defant('BFArray',elemPos,[],elem2,T);% ----------------------------------------------------------------------- %% 'aimtEx' : The AIMT application example antenna. One-dimensional.%% Implementation by FA.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'aimtEx')) % The subarrays are in the x-direction. The main digital array is in the % x-direction. if (nargin > 1), error('DBT-Error: Too many input parameters.'), end%if noElemMain = 25; noElemSub = 3; lambda = 0.1; distElemMain = lambda; distElemSub = lambda/2; taper = [0.5 1 0.5]'; elem = defant('pattFuncElem', 'sqrt(cos(x(1,:)))'); subarray = defant('ULA', [noElemSub, distElemSub], elem, taper); ant = defant('ULA', [noElemMain, distElemMain], subarray, ... ones(noElemMain,1)); ant.name = 'aimtEx';% ----------------------------------------------------------------------- %% 'aimtExPlan' : The AIMT application example antenna. Two-dimensional.%% Not used yet. Implementation not finished.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'aimtExPlan')) % The subarrays are in the y-direction. The main digital array is in the % x-direction. error('DBT-Error: Implementation not finished.'); if (nargin > 1), error('DBT-Error: Too many input parameters.'), end%if noElemSide = 25; noElemUp = 10; lambda = 0.1; distElemSubarray = 0.05; distElemMainArray = 0.1; taperSub = []; % This must be changed. taperDefaultMain = []; % This must be changed. elem = defant('pattFuncElem', 'sqrt(cos(x(1,:)))'); subarray = defant('UPA', [noElemUp, distElemSubarray], elem, taperSub) ant = defant('ULA', [noElemSide, distElemMainArray], ... subarray, taperDefaultMain); ant.name = 'aimtExPlan';% ----------------------------------------------------------------------- %% 'expAnt' : The AIMT experimental antenna.% ----------------------------------------------------------------------- %elseif (strcmp(antennaType, 'expAnt')) % The AIMT experimental antenna. if (nargin > 1) error(['DBT-Error: Too many input parameters. Cal. file is set by ',... 'the function setcal1.']) end%if global c0 c0 = 2.99792458e8; % The speed of light. noElem = 12; distElem = 0.0450; % Distance in meters. Should we use variable "xel" % instead in steering matrix calculation? %lambda = NaN; % This is only a temporary value. The frequency % can be found in the .dbs file. The correct value is set by the % function expsig1. ant = defant('isotropULA', [noElem, distElem]); ant.name = 'expAnt';% ----------------------------------------------------------------------- %% The ELSE branch.% ----------------------------------------------------------------------- %else error('DBT-Error: Desired antenna type is not implemented.')end%ifif isfield(ant,'lambda') error('DBT-Error: The field lambda should not exist in AntDefT any more.')end%if
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -