⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spastemat.m

📁 阵列信号处理的工具箱
💻 M
📖 第 1 页 / 共 2 页
字号:
    % This must be an error.    %size(elementFactor)    elFactorMatrix = diag(sparse(elementFactor));    %elFactorMatrix = sparse(diag(elementFactor));       % This generates a to large matrix%    elFactorMatrix = diag(elementFactor);%    arrayFactor = exp(thSign*i*2*pi*k'*d/lambda*sin(theta'));    arrayFactor = exp(thSign*i*2*pi*dmek'/lambda*sin(theta));    A = full(arrayFactor*elFactorMatrix);  % --------------------------------------------------------------------- %  % AIMT Experimental Antenna.  %  % What global variables are used and from where do the come?  %   expCalVerG (from defant): Version of the calibration compensation  %     information.  %   c0 (from defant): The speed of light.  %   cmpmetGlobal ():  %   nearfieldMethodFlagGlobal ():  %   Some more global variables are used in functions called by spastemat.  %  % Start: 97xxxx Svante Bj鰎klund (svabj).  % --------------------------------------------------------------------- %  elseif (strcmp(antenna.name,'expAnt'))    global expCalVerG    if (isempty(expCalVerG))      dbterror('Missing calibration information.')    end%if    lpSign = +1;  % Because Lars has defined angels differently than DBT.      % +1 : as Lars and as in dbt (now) at other places.    doas = lpSign * doas;    if ((expCalVerG == 2) | (expCalVerG == 3))      global c0      global cmpmetGlobal nearfieldMethodFlagGlobal      %global Ccmp wctab sphitab wcmedel wcmat      frequencyMhz = (c0/lambda)*1e-6;      cmpmet = cmpmetGlobal;      coupFlag = 1; % An empty matrix indicates a false value.      wctabAngles = 19; % A dummy value.      %wctabAngles = phitab;      distElem    = antenna.distElem;      noElem      = antenna.noElem;      sphitest=sin(doas(1,:))';      if (nearfieldMethodFlagGlobal == 1)        wnfcmp=eincdbt(sphitest,frequencyMhz,'nearfield');          % Calculate information for compensation of near field.          %stest0=exp(j*k0*sphitest*xel).'/sqrt(nel);      else %Do not compensate for near field.        wnfcmp = [];      end%if      A0 = exp(j*(2*pi/lambda)*distElem*(0:noElem-1)' *sin(doas(1,:)));        % The not compensated steering matrix.        % "Utstyrt i sphix vid mittfrekvens" (larpet).        % A0 is the steering matrix for an ULA with isotropical elements.        % The sign in the exponent is maybe the opposite.      A = wscordbt(A0,[],coupFlag,cmpmet,[],wnfcmp,[], doas(1,:));        % Compensate the steering matrix for antenna element coupling,        % amplitude and phase drift and near field.    end%if expCalVerG% ----------------------------------------------------------------------- %% Antenna Elements (one channel antennas).%% Start: 980607 Svante Bj鰎klund (svabj).% ----------------------------------------------------------------------- %  elseif (strcmp(antennaType,'elem'))    %disp('spastemat elem')    nDoas = size(doas,2);				% Number of DOA:s.    pType = antenna.patternType;    if (strcmp(pType,'isotrop'))      A = ones(1,nDoas);    elseif (strcmp(pType,'func'))      x = doas - repmat(antenna.elemOrient,1,size(doas,2));      A = eval(antenna.patternFunc);  	% x is the evaluated variable.    else      error('Illegal pattern type for element.')    end%if% ----------------------------------------------------------------------- %% Antenna elements.%% spastevec is called.%% Start: 9xxxxx David Rejdemyhr (davrej).% ----------------------------------------------------------------------- %  elseif ( strcmp(antennaType,'elem') )    % This code should never be executed because of the if-branch above.    dbtwarning('Calling "spastevec" for antenna elements.')    M = size(doas,2); % No DOA:s.    noElem   = antenna.noElem;	% Allways == 1.    A = zeros(noElem, M);    for n = 1:M      A(:,n) = spastevec(antenna, doas(1,n), lambda, focusDist);      %A(:,n) = spastevec(antenna, doas(1,n), lambda, focusDist(1,n));        % If there can be different focusing distances to the        % different sources, the commented line can be used.    end%for% ----------------------------------------------------------------------- %% ULA and LA.%% spastevec is called.%% Start: 9xxxxx David Rejdemyhr (davrej).% ----------------------------------------------------------------------- %  elseif (strcmp(antennaType,'ULA') | strcmp(antennaType,'LA'))    old = 1;    if (old)      %disp('Use spastevec')      %dbtwarning('Calling "spastevec" for ULA or LA.')      M = size(doas,2); % No DOA:s.      noElem   = antenna.noElem;      A = zeros(noElem, M);      for n = 1:M        A(:,n) = spastevec(antenna, doas(1,n), lambda, focusDist);        %A(:,n) = spastevec(antenna, doas(1,n), lambda, focusDist(1,n));          % If there can be different focusing distances to the          % different sources, the commented line can be used.      end%for    elseif (0)      noElem   = antenna.noElem;      if (strcmp(antennaType,'ULA'))        distElem = antenna.distElem;        elemPos = distElem*(0:noElem-1).';      else        elemPos = antenna.elemPos;      end%if      a = exp(thSign*j*2*pi*(elemPos/lambda)*sin(doas(1,:)));      % Array faktor.      w = antenna.element.beamSpaceTrans;      %a = a * (w' * spastevec(antenna.element, doas, lambda, focusDist));      a = a * (w' * spastemat(antenna.element, doas, lambda, focusDist));    else          end%if (old)% ----------------------------------------------------------------------- %% Array antenna.%% Start: 980515 Svante Bj鰎klund (svabj).% ----------------------------------------------------------------------- %  elseif (strcmp(antennaType,'array'))    if iscell(antenna.element)	% If not the same definition of all elements.      Asub = spastemat(antenna.element, doas, lambda, focusDist, pointSubDoa);        % Or a loop. Will this be faster?    else 	% Identical elements.      Asub = repmat(spastemat(antenna.element, doas, lambda, focusDist, ...        pointSubDoa), antenna.noElem,1);        % Any way to avoid a  whole matrix Asub and to gain execution time?    end%if    scanPhases = repmat(-1*antenna.elemPos.'*doa2wavevec(pointSubDoa,lambda),...      1,size(doas,2));      % "The array factor is maximum when the far-field contributions from      % elements add in phase." ([6] p. 161). When the far-field contributions      % from elements add in phase, the phase differences between elements      % in the array factor are zero.    AF = exp(-1*thSign * j * (antenna.elemPos.' *  doa2wavevec(doas,lambda) ...      + scanPhases));    %if (isempty(antenna.beamSpaceTrans))      A = AF.*Asub;    %else % This does not work because the antenna definition field    %"noElem" is wrong. Shall "noElem" mean number of channels in or out?    %  %size(antenna.beamSpaceTrans),size(AF),size(Asub)    %  A = antenna.beamSpaceTrans' * (AF.*Asub);    %end%if;if(0)% ----------------------------------------------------------------------- %% Array antenna with beamforming.%% Start: 980530 Svante Bj鰎klund (svabj).% ----------------------------------------------------------------------- %  elseif (strcmp(antennaType,'BFArray'))    % ... As antenna type 'array'.    %A = AF.*(antenna.beamSpaceTrans' * Asub);    A = antenna.beamSpaceTrans' * (AF.*Asub);end%if(0)% ----------------------------------------------------------------------- %% Beamforming virtual antenna%% Start: 980520 Svante Bj鰎klund (svabj).% ----------------------------------------------------------------------- %  elseif (strcmp(antennaType,'beamform'))    Asub = spastemat(antenna.element, doas, lambda, focusDist, pointSubDoa);    A = antenna.beamSpaceTrans' * Asub;% ----------------------------------------------------------------------- %% The else branch.% ----------------------------------------------------------------------- %  else    error('DBT-Error: Not implemented for desired antenna type.')  end%if name% ----------------------------------------------------------------------- %% Normalization of the steering matrix.% ----------------------------------------------------------------------- %if (0)  %disp('Normalizing A...')  %r2d(doas(:,[1, 2, end-1, end]))  %A(:,[1, 2, end-1, end])  %ANorm = vecnorm2(A);  %A = weightcols(A, 1./ANorm);  %diag(A'*A).'  %A(:,[1, 2, end-1, end])end%if (0)end%if iscell(antenna)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -