📄 cfar.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 + -