📄 acquisition.m
字号:
function [sys,x0,str,ts] = acquisition(t,x,u,flag,threshold,numPulse2Observe,falseAlarm,Np,tau,Ts,Ep)
global UWB_SIG_DETECT_ON;
global ACQUISITION_ON;
global NEXT_PULSE_TIME;
global NEXT_HOPPING_ON;
global INTEGRATION_START_TIME;
global DATA_ON;
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 3;
sizes.NumOutputs = 0;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0 = [0 0 0]; % subtotal, number of pulses observed, number of try
str = []; ts = [0 0];
ACQUISITION_ON=0;
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1,
sys=[];
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,
integrationEndTime=NEXT_PULSE_TIME+floor(2*tau/Ts)*Ts;
if abs(t/INTEGRATION_START_TIME-1) < 1e-8
x(1)=0; x(2)=0;
elseif abs(t/NEXT_PULSE_TIME-1) < 1e-8
x(2)=x(2)+1;
elseif x(2)==numPulse2Observe & abs(t/integrationEndTime-1) < 1e-8
if ACQUISITION_ON==3
ACQUISITION_ON=2;
fprintf('Tracking Coeffient=%3.3f percent\n',x(1)/sqrt(Ep)/x(2)*100)
if x(1)/sqrt(Ep)/x(2)*100 < falseAlarm
disp('FALSE ALARM!!. A new acquisition required...');
UWB_SIG_DETECT_ON=0; ACQUISITION_ON=0; DATA_ON=0;
end
elseif ACQUISITION_ON==0
x(3)=x(3)+1;
fprintf('Acquisition Coeffient=%3.3f percent\n',x(1)/sqrt(Ep)/x(2)*100)
if x(1)/sqrt(Ep)/x(2)*100 > threshold
disp('PN Hopping Code acquired...!!');
ACQUISITION_ON=1;
elseif x(3)==Np
UWB_SIG_DETECT_ON=0; x(2)=0;x(3)=0;
else
NEXT_HOPPING_ON=1; x(2)=0;
end
end
end
x(1)=x(1)+u(1)*u(2)*Ts;
sys=x;
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
sys=[];
%%%%%%%%%%%%%%%%%%%%%%%
% GetTimeOfNextVarHit %
%%%%%%%%%%%%%%%%%%%%%%%
case 4,
sys=[];
%%%%%%%%%%%%%
% Terminate %
%%%%%%%%%%%%%
case 9,
sys=[];
%%%%%%%%%%%%%%%%%%%%
% Unexpected flags %
%%%%%%%%%%%%%%%%%%%%
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -