📄 pilottemplategen.m
字号:
function [sys,x0,str,ts] = PilotTemplateGen(t,x,u,flag,tau,Tf,Tc,xini,bitsPerHop,Np,Ts)
global UWB_SIG_DETECT_ON UWB_SIG_DETECT_TIME;
global ACQUISITION_ON;
global NEXT_PULSE_TIME;
global NEXT_HOPPING_ON;
global INTEGRATION_START_TIME;
global ACQ_FRAME_TIME ACQ_REGISTER_STATE;
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 9+Np;
sizes.NumOutputs = 1;
sizes.NumInputs = 0;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
code=pilotHoppingCode(xini,bitsPerHop,Np);
x0 = [0 0 zeros(1,7) code]; % Number of Present Code, Number of try, Time hopping codes c
str = []; ts = [0 0];
NEXT_PULSE_TIME=-1;
NEXT_HOPPING_ON=0;
INTEGRATION_START_TIME=-1;
ACQ_FRAME_TIME=-1;
ACQ_REGISTER_STATE=[0 0 0 0 0];
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1,
sys=[];
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,
if UWB_SIG_DETECT_ON==1
UWB_SIG_DETECT_ON=2;
x(2)=1; % 1st Try
x(1)=1;
sys=x;
presentC=x(10+0); nextC=x(10+1);
NEXT_PULSE_TIME=UWB_SIG_DETECT_TIME+(nextC-presentC)*Tc+Tf;
INTEGRATION_START_TIME=NEXT_PULSE_TIME-floor(2*tau/Ts)*Ts;
end
time2Change=NEXT_PULSE_TIME+floor(2*tau/Ts)*Ts+Ts;
if UWB_SIG_DETECT_ON>1 & abs(t/time2Change-1) < 1e-8
if ACQUISITION_ON==0 & NEXT_HOPPING_ON==1
NEXT_HOPPING_ON=0;
x(2)=x(2)+1;
frameStartTime=UWB_SIG_DETECT_TIME-x(10+x(2)-1)*Tc-floor(2*tau/Ts)*Ts;
numFrame=floor((t-frameStartTime)/Tf);
netNumFrame=mod(numFrame,Np);
x(1)=mod(x(2)-1+netNumFrame,Np);
nextPulseTime=frameStartTime+numFrame*Tf+x(10+x(1))*Tc+floor(2*tau/Ts)*Ts;
if nextPulseTime<t+floor(2*tau/Ts)*Ts
x(1)=mod(x(1)+1,Np);
nextPulseTime=frameStartTime+(numFrame+1)*Tf+x(10+x(1))*Tc+floor(2*tau/Ts)*Ts;
end
NEXT_PULSE_TIME=nextPulseTime;
INTEGRATION_START_TIME=nextPulseTime-floor(2*tau/Ts)*Ts;
else
presentC=x(10+x(1));
x(1)=mod(x(1)+1,Np);
nextC=x(10+x(1));
NEXT_PULSE_TIME=NEXT_PULSE_TIME+(nextC-presentC)*Tc+Tf;
if ACQUISITION_ON==1
ACQUISITION_ON=2;
ACQ_FRAME_TIME=NEXT_PULSE_TIME-nextC*Tc-floor(2*tau/Ts)*Ts;
ACQ_REGISTER_STATE=findState(mod(x(1)-1,Np),xini,bitsPerHop);
if ACQ_FRAME_TIME < t
disp('error');
ACQ_FRAME_TIME=ACQ_FRAME_TIME+Tf;
ACQ_REGISTER_STATE=findState(mod(x(1)+1,Np),xini,bitsPerHop);
end
fprintf('Acquired Frame Time=%5.3f ns\n',ACQ_FRAME_TIME*1e9);
end
if ACQUISITION_ON==2
ACQUISITION_ON=3;
INTEGRATION_START_TIME=NEXT_PULSE_TIME-floor(2*tau/Ts)*Ts;
end
end
sys=x;
else
sys=x;
end
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
if UWB_SIG_DETECT_ON>1
pulseTimeBegin=NEXT_PULSE_TIME-floor(2*tau/Ts)*Ts;
pulseTimeEnd=NEXT_PULSE_TIME+floor(2*tau/Ts)*Ts;
if (t>pulseTimeBegin & t<pulseTimeEnd) |...
abs(t/pulseTimeBegin-1) < 1e-8 | abs(t/pulseTimeEnd-1) < 1e-8
sys = scholtzValue(t-NEXT_PULSE_TIME, 1, 0, tau);
else
sys=0;
end
else
sys=0;
end
%%%%%%%%%%%%%%%%%%%%%%%
% 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 + -