📄 ppmtemplategen.m
字号:
function [sys,x0,str,ts] = PPMTemplateGen(t,x,u,flag,pulseType,tau,Tf,Tc,delta,M,link,dataOnState,bitsPerHop,Ts)
global UWB_SIG_DETECT_ON;
global ACQUISITION_ON;
global ACQ_FRAME_TIME ACQ_REGISTER_STATE;
global DATA_ON DATA_ON_STATE_TIME;
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 6;
sizes.NumOutputs = M;
sizes.NumInputs = 0;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0 = [zeros(1,5) 0]; % State of the register(m=5) and time hopping unit c
str = []; ts = [0 0];
DATA_ON=0;
DATA_ON_STATE_TIME=-1;
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1,
sys=[];
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,
if ACQUISITION_ON>0 & abs(round((t-ACQ_FRAME_TIME)/Tf) - (t-ACQ_FRAME_TIME)/Tf) < 1e-8
if abs(t/ACQ_FRAME_TIME-1) < 1e-8
initialState=ACQ_REGISTER_STATE;
for k=1:link
[initialState,nextC]=nextState(initialState,bitsPerHop);
end
x(1:5)=initialState;
end
[state,nextC]=nextState(x(1:5),bitsPerHop);
x(1:5)=state; x(6)=nextC;
if state==dataOnState'
if DATA_ON==0
disp('Data Synchronized.. Demodulation begins.');
fprintf('Demodulation Start Time=%5.3f ns\n',t*1e9);
DATA_ON=1;
end
DATA_ON_STATE_TIME=t;
end
end
sys=x;
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
if ACQUISITION_ON>0 & t>ACQ_FRAME_TIME
A=1; %Unit energy
tmod=mod(t-ACQ_FRAME_TIME,Tf);
temp=zeros(M,1);
switch pulseType,
case 'Gaussian',
for k=0:M-1
temp(k+1) = gaussValue(tmod, A, x(6)*Tc+k*delta+floor(2*tau/Ts)*Ts,tau);
end
case 'Gaussian 1st Derivative',
for k=0:M-1
temp(k+1) = gauss1stDevValue(tmod, A, x(6)*Tc+k*delta+floor(2*tau/Ts)*Ts,tau);
end
case 'Gaussian 2nd Derivative',
for k=0:M-1
temp(k+1) = scholtzValue(tmod, A, x(6)*Tc+k*delta+floor(2*tau/Ts)*Ts,tau);
end
case 'Manchester',
for k=0:M-1
temp(k+1) = manchesterValue(tmod, A, x(6)*Tc+k*delta+floor(2*tau/Ts)*Ts,tau);
end
case 'Sine',
for k=0:M-1
temp(k+1) = sineValue(tmod, A, x(6)*Tc+k*delta+floor(2*tau/Ts)*Ts,tau);
end
case 'Rectangle',
for k=0:M-1
temp(k+1) = rectangleValue(tmod, A, x(6)*Tc+k*delta+floor(2*tau/Ts)*Ts,tau);
end
otherwise
error('Unsupported Pulse Type');
end
sys=temp;
else
sys=zeros(M,1);
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 + -