📄 testregi.m
字号:
function [ret,x0,str,ts,xts]=testregi(t,x,u,flag);
%TESTREGI is the M-file description of the SIMULINK system named TESTREGI.
% The block-diagram can be displayed by typing: TESTREGI.
%
% SYS=TESTREGI(T,X,U,FLAG) returns depending on FLAG certain
% system values given time point, T, current state vector, X,
% and input vector, U.
% FLAG is used to indicate the type of output to be returned in SYS.
%
% Setting FLAG=1 causes TESTREGI to return state derivatives, FLAG=2
% discrete states, FLAG=3 system outputs and FLAG=4 next sample
% time. For more information and other options see SFUNC.
%
% Calling TESTREGI with a FLAG of zero:
% [SIZES]=TESTREGI([],[],[],0), returns a vector, SIZES, which
% contains the sizes of the state vector and other parameters.
% SIZES(1) number of states
% SIZES(2) number of discrete states
% SIZES(3) number of outputs
% SIZES(4) number of inputs
% SIZES(5) number of roots (currently unsupported)
% SIZES(6) direct feedthrough flag
% SIZES(7) number of sample times
%
% For the definition of other parameters in SIZES, see SFUNC.
% See also, TRIM, LINMOD, LINSIM, EULER, RK23, RK45, ADAMS, GEAR.
% Note: This M-file is only used for saving graphical information;
% after the model is loaded into memory an internal model
% representation is used.
% the system will take on the name of this mfile:
sys = mfilename;
new_system(sys)
simver(1.3)
if (0 == (nargin + nargout))
set_param(sys,'Location',[326,158,755,326])
open_system(sys)
end;
set_param(sys,'algorithm', 'RK-45')
set_param(sys,'Start time', '0.0')
set_param(sys,'Stop time', '80')
set_param(sys,'Min step size', '0.0001')
set_param(sys,'Max step size', '10')
set_param(sys,'Relative error','1e-3')
set_param(sys,'Return vars', '')
% Subsystem ['Pulses divide',13,'same sample time'].
new_system([sys,'/',['Pulses divide',13,'same sample time']])
set_param([sys,'/',['Pulses divide',13,'same sample time']],'Location',[55,192,283,286])
add_block('built-in/Outport',[sys,'/',['Pulses divide',13,'same sample time/Outport']])
set_param([sys,'/',['Pulses divide',13,'same sample time/Outport']],...
'position',[160,35,180,55])
add_block('built-in/S-Function',[sys,'/',['Pulses divide',13,'same sample time/S-function1']])
set_param([sys,'/',['Pulses divide',13,'same sample time/S-function1']],...
'function name','homopuls',...
'parameters','samp_time, out_divid, offset',...
'position',[40,31,105,59])
add_line([sys,'/',['Pulses divide',13,'same sample time']],[110,45;155,45])
set_param([sys,'/',['Pulses divide',13,'same sample time']],...
'Mask Display','plot(0,0,100,100,x,y);Pulse',...
'Mask Type','Pulse generator')
set_param([sys,'/',['Pulses divide',13,'same sample time']],...
'Mask Dialogue','Vector pulses with sample rate of each pulse as Sample_time / Divider.|Sample time (scalar, sec):|Divider (integer vector):|Offset (same length as Divider):')
set_param([sys,'/',['Pulses divide',13,'same sample time']],...
'Mask Translate','samp_time=@1;out_divid=@2;offset=@3;[x,y]=srcsicon(2);')
set_param([sys,'/',['Pulses divide',13,'same sample time']],...
'Mask Help','This block generates a vector pulse. The output length is the same as the divider vector length. The ith element of the output has the sample time Sample_time/Divider(i). All elements in divider must be integers.')
set_param([sys,'/',['Pulses divide',13,'same sample time']],...
'Mask Entries','1\/10\/0\/')
% Finished composite block ['Pulses divide',13,'same sample time'].
set_param([sys,'/',['Pulses divide',13,'same sample time']],...
'hide name',0,...
'position',[15,108,95,152])
add_block('built-in/Signal Generator',[sys,'/',['Signal',13,'generator']])
set_param([sys,'/',['Signal',13,'generator']],...
'hide name',0,...
'Peak','1.000000',...
'Peak Range','2.000000',...
'Freq','1.000000',...
'Freq Range','5.000000',...
'Wave','Sin',...
'Units','Rads',...
'position',[25,13,70,47])
% Subsystem 'Register-shift'.
new_system([sys,'/','Register-shift'])
set_param([sys,'/','Register-shift'],'Location',[19,610,374,740])
add_block('built-in/Inport',[sys,'/','Register-shift/in_2'])
set_param([sys,'/','Register-shift/in_2'],...
'Port','2',...
'position',[30,70,50,90])
add_block('built-in/Inport',[sys,'/','Register-shift/in_1'])
set_param([sys,'/','Register-shift/in_1'],...
'position',[30,55,50,75])
add_block('built-in/Outport',[sys,'/','Register-shift/out_2'])
set_param([sys,'/','Register-shift/out_2'],...
'Port','2',...
'position',[330,70,350,90])
add_block('built-in/Outport',[sys,'/','Register-shift/out_1'])
set_param([sys,'/','Register-shift/out_1'],...
'position',[330,55,350,75])
add_block('built-in/Mux',[sys,'/','Register-shift/Mux'])
set_param([sys,'/','Register-shift/Mux'],...
'inputs','2',...
'position',[80,56,115,89])
add_block('built-in/S-Function',[sys,'/','Register-shift/S-function'])
set_param([sys,'/','Register-shift/S-function'],...
'function name','regshift',...
'parameters','shft_out, thrhld',...
'position',[150,65,200,85])
add_block('built-in/Demux',[sys,'/','Register-shift/Demux'])
set_param([sys,'/','Register-shift/Demux'],...
'outputs','[len_rg, 1]',...
'position',[260,55,300,90])
add_line([sys,'/','Register-shift'],[55,80;75,80])
add_line([sys,'/','Register-shift'],[55,65;75,65])
add_line([sys,'/','Register-shift'],[305,80;325,80])
add_line([sys,'/','Register-shift'],[305,65;325,65])
add_line([sys,'/','Register-shift'],[205,75;255,75])
add_line([sys,'/','Register-shift'],[120,75;145,75])
set_param([sys,'/','Register-shift'],...
'Mask Display','plot(0,0,100,100,x,y,v,w);Reg. shift',...
'Mask Type','Register-shift')
set_param([sys,'/','Register-shift'],...
'Mask Dialogue','The rising edge of the 2nd port pulse\ntriggers the block to input the 1st port data and to shift the register.|Delay steps (output length is same as this vector size):|Threshold in detecting the rising edge of the pulse:')
set_param([sys,'/','Register-shift'],...
'Mask Translate','shft_out=@1;thrhld=@2;len_rg=length(@1);[v,w]=trigicon(0,25,get_param(gcb,''orientation''),2);[x,y]=trigicon(1,75,get_param(gcb,''orientation''),2);')
set_param([sys,'/','Register-shift'],...
'Mask Help','This block stores the scalar input signal from the 1st input port at the rising edge of the pulse from the 2nd port. The 1st outport outputs a vector with its size the same as the "Delay steps" entree of this block. The maximum delay is the register size of this block. The second outport outputs a positive pulse when the register is\nrefreshed.')
set_param([sys,'/','Register-shift'],...
'Mask Entries','[127:-1:0]\/.1\/')
% Finished composite block 'Register-shift'.
set_param([sys,'/','Register-shift'],...
'hide name',0,...
'position',[140,58,220,102])
% Subsystem ['Triggered',13,'buffer down'].
new_system([sys,'/',['Triggered',13,'buffer down']])
set_param([sys,'/',['Triggered',13,'buffer down']],'Location',[22,58,460,228])
add_block('built-in/Outport',[sys,'/',['Triggered',13,'buffer down/out_1']])
set_param([sys,'/',['Triggered',13,'buffer down/out_1']],...
'position',[390,60,410,80])
add_block('built-in/Outport',[sys,'/',['Triggered',13,'buffer down/out_2']])
set_param([sys,'/',['Triggered',13,'buffer down/out_2']],...
'Port','2',...
'position',[355,80,375,100])
add_block('built-in/Mux',[sys,'/',['Triggered',13,'buffer down/Mux']])
set_param([sys,'/',['Triggered',13,'buffer down/Mux']],...
'inputs','[in_size 1 1]',...
'position',[110,59,140,101])
add_block('built-in/Demux',[sys,'/',['Triggered',13,'buffer down/Demux']])
set_param([sys,'/',['Triggered',13,'buffer down/Demux']],...
'outputs','[out_size 1]',...
'position',[290,62,330,98])
add_block('built-in/S-Function',[sys,'/',['Triggered',13,'buffer down/S-function']])
set_param([sys,'/',['Triggered',13,'buffer down/S-function']],...
'function name','regdown',...
'parameters','ini_idx, idx_inc, thrshld, cycl_flag',...
'position',[185,70,235,90])
add_block('built-in/Inport',[sys,'/',['Triggered',13,'buffer down/in_1']])
set_param([sys,'/',['Triggered',13,'buffer down/in_1']],...
'position',[15,55,35,75])
add_block('built-in/Inport',[sys,'/',['Triggered',13,'buffer down/in_2']])
set_param([sys,'/',['Triggered',13,'buffer down/in_2']],...
'Port','2',...
'position',[40,70,60,90])
add_block('built-in/Inport',[sys,'/',['Triggered',13,'buffer down/in_3']])
set_param([sys,'/',['Triggered',13,'buffer down/in_3']],...
'Port','3',...
'position',[65,85,85,105])
add_line([sys,'/',['Triggered',13,'buffer down']],[240,80;285,80])
add_line([sys,'/',['Triggered',13,'buffer down']],[145,80;180,80])
add_line([sys,'/',['Triggered',13,'buffer down']],[40,65;105,65])
add_line([sys,'/',['Triggered',13,'buffer down']],[335,70;385,70])
add_line([sys,'/',['Triggered',13,'buffer down']],[65,80;105,80])
add_line([sys,'/',['Triggered',13,'buffer down']],[335,90;350,90])
add_line([sys,'/',['Triggered',13,'buffer down']],[90,95;105,95])
set_param([sys,'/',['Triggered',13,'buffer down']],...
'Mask Display','plot(0,0,100,100,x,y,v,w,u,z);Buffer dwn',...
'Mask Type','Triggered buffer down')
set_param([sys,'/',['Triggered',13,'buffer down']],...
'Mask Dialogue','Rising edge of the 2nd port triggers 1st port vector signal in. Rising edge of the 3rd port triggers 1st outport signal out.|Input signal vector size:|Initial index (integer vector):|Increment for each index (integer vector):|Trigger threshold:|When index exceed register size, 1: cyclic out, 0: zero out:')
set_param([sys,'/',['Triggered',13,'buffer down']],...
'Mask Translate','in_size=@1;ini_idx=@2;idx_inc=@3;thrshld=@4;cycl_flag=@5;out_size=length(ini_idx);[v,w]=trigicon(0,25,get_param(gcb,''orientation''),2);[x,y]=trigicon(1,75,get_param(gcb,''orientation''),2);[u,z]=trigicon(0,50,get_param(gcb,''orientation''),2);')
set_param([sys,'/',['Triggered',13,'buffer down']],...
'Mask Help','The block refreshes its registers with the vector input from the 1st inport at the rising edge of the 2nd inport pulse. The 1st outport outputs the elements of the registers starting with the given initial index. The rising edge of the 3rd inport pulse triggers the 1st output to output the register value with the index increasing the increment value. The second outport outputs a spike pulse when the internal register is refreshed.')
set_param([sys,'/',['Triggered',13,'buffer down']],...
'Mask Entries','128\/[0 0 0]\/[1 2 3]\/.1\/1\/')
% Finished composite block ['Triggered',13,'buffer down'].
set_param([sys,'/',['Triggered',13,'buffer down']],...
'hide name',0,...
'position',[250,68,330,112])
add_block('built-in/Scope',[sys,'/','Scope'])
set_param([sys,'/','Scope'],...
'hide name',0,...
'Vgain','1.200000',...
'Hgain','40.000000',...
'Vmax','2.400000',...
'Hmax','80.000000',...
'Window',[17,360,992,761],...
'position',[385,37,405,63])
add_block('built-in/Scope',[sys,'/','Scope1'])
set_param([sys,'/','Scope1'],...
'hide name',0,...
'Vgain','1.200000',...
'Hgain','40.000000',...
'Vmax','2.400000',...
'Hmax','80.000000',...
'Window',[13,144,988,545],...
'position',[385,102,405,128])
add_line(sys,[75,30;110,30;110,70;135,70])
add_line(sys,[225,70;230,70;230,75;245,75])
add_line(sys,[225,90;245,90])
add_line(sys,[100,130;225,130;225,105;245,105])
add_line(sys,[335,80;355,80;355,50;380,50])
add_line(sys,[335,100;355,100;355,115;380,115])
add_line(sys,[110,130;110,90;135,90])
drawnow
% Return any arguments.
if (nargin | nargout)
% Must use feval here to access system in memory
if (nargin > 3)
if (flag == 0)
eval(['[ret,x0,str,ts,xts]=',sys,'(t,x,u,flag);'])
else
eval(['ret =', sys,'(t,x,u,flag);'])
end
else
[ret,x0,str,ts,xts] = feval(sys);
end
else
drawnow % Flash up the model and execute load callback
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -