📄 integratedemod.m
字号:
function [sys,x0,str,ts] = IntegrateDemod(t,x,u,flag,Tf,M,Ns,Np,Ts)
global ACQUISITION_ON;
global DATA_ON DATA_ON DATA_ON_STATE_TIME;
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = M+1;
sizes.NumOutputs = 1;
sizes.NumInputs = M+1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0 = zeros(M+1,1); % subtotal, number of pulses observed, number of try
str = []; ts = [0 0];
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1,
sys=[];
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,
if DATA_ON>0 & abs(t/(DATA_ON_STATE_TIME+Ts)-1) < 1e-8
if DATA_ON==1
DATA_ON=2;
x(1:M)=zeros(M,1); x(M+1)=0;
elseif DATA_ON==2
[Y,Index]=max(x(1:M)); x(M+1)=Index-1;
x(1:M)=zeros(M,1);
end
elseif DATA_ON>0 & abs(round((t-DATA_ON_STATE_TIME)/Tf) - (t-DATA_ON_STATE_TIME)/Tf ) < 1e-8 & abs(t/DATA_ON_STATE_TIME-1) >1e-8
if mod(round((t-DATA_ON_STATE_TIME)/Tf),Ns)==0 & round((t-DATA_ON_STATE_TIME)/Tf)+Ns<Np
[Y,Index]=max(x(1:M)); x(M+1)=Index-1;
x(1:M)=zeros(M,1);
end
elseif DATA_ON==0
x(M+1)=0;
end
x(1:M)=x(1:M)+u(1)*u(2:M+1)*Ts;
sys=x;
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
if DATA_ON>0
sys=x(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 + -