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

📄 cfar.m

📁 阵列信号处理的工具箱
💻 M
字号:
function [sigOut] = cfar(sigIn)% *****************************************************************************%   *  DBT, A Matlab Toolbox for Radar Signal Processing  *% (c) FOA 1994-2000. See the file dbtright.m for copyright notice.%%  function [sigOut] = cfar(sigIn)%%  Calculates the signals after CFAR.%%  sigOut (RxRadarSigT):%  sigIn (RxRadarSigT):%%%Known Bugs:%%  Start        : 961120 Fredrik Athley (freath).%  Latest change: $Date: 2000/10/16 15:20:04 $ $Author: svabj $.%  $Revision: 1.11 $% *****************************************************************************%ant = sigIn.antenna;XX =  sigIn.signals;s = sizem(XX);N = 15;noDopplerCh = s(1);noRangeBins = s(2);noBeams     = s(3);noNotUsed   = s(4);noCPIs      = s(5);noTrials    = s(6);if noRangeBins<3  fprintf('\nWarning: Cannot perform CFAR. Too few range samples. Returning the signal unprocessed.\n\n')  sigOut = sigIn;else  y = zeros(1,noRangeBins);		% Reserve memory space !?!  YY = zerosm(s);  for trialLoop = 1:noTrials  for cpiLoop = 1:noCPIs  for notUsedLoop = 1:noNotUsed  for beam=1:noBeams    for dopplerLoop=1:noDopplerCh      x = getm(XX,dopplerLoop,':',beam,notUsedLoop,cpiLoop,trialLoop);      x = reshape(x,1,noRangeBins);      P = min(N+2,noRangeBins);      for range=1:P        Q = min(range+1+N,noRangeBins);        %xr = [x(1:range-2) x(range+2:Q)];        %meanxr = mean(xr);        ixVec1 = 1:range-2;        ixVec2 = range+2:Q;        lengthSum = length(ixVec1) + length(ixVec2);        meanxr2 = (1/lengthSum) * (sum(x(ixVec1))+sum(x(ixVec2)));	meanxr = meanxr2;        %if (abs(meanxr - meanxr2) > 1e-10)        %  meanxr - meanxr2 	%  error('Difference to large')        %end%if        y(range) = x(range)/meanxr;        if (meanxr==0)          %disp('Noise level = 0')          dbtwarning('In "cfar", noise level = 0')        end      end      for range=N+3:noRangeBins        Q = min(range+1+N,noRangeBins);        %xr = [x(range-1-N:range-2) x(range+2:Q)];        %meanxr = mean(xr);        ixVec1 = range-1-N:range-2;        ixVec2 = range+2:Q;        lengthSum = length(ixVec1) + length(ixVec2);        meanxr2 = (1/lengthSum) * (sum(x(ixVec1))+sum(x(ixVec2)));	meanxr = meanxr2;        %difference = meanxr - meanxr2;        %if (abs(difference) > 1e-10)        %  meanxr - meanxr2 	%  error('Difference to large')        %end%if        y(range) = x(range)/meanxr;        if (meanxr==0)          dbtwarning('In "cfar", noise level = 0')          %disp('Noise level = 0')        end      end      %YY = setm(YY,y,dopplerLoop,':',beam,notUsedLoop,cpiLoop,trialLoop);      YY(dopplerLoop,':',beam,notUsedLoop,cpiLoop,trialLoop) = y;    end%for dopplerLoop    infoStr = sprintf('cfar: beam = %d(%d)\r',beam,noBeams);    dbtinfo(infoStr,1);  end%for beam  dbtinfo('');	%New line.  end%for notUsedLoop  end%for cpiLoop  end%for trialLoop  sigOut = sigIn;  % Must copy all information in the input signal.  sigOut.signals = YY; % Modify part of the input signal.%  sigOut.dataType = 'RxRadarSigT';%  sigOut.antenna = ant;%  sigOut.signals = YY;end%if

⌨️ 快捷键说明

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