www.gusucode.com > 增量调制模型matlab simulink 仿真源码程序 > lab/sdm.m
function [ret,x0,str,ts,xts]=sdm(t,x,u,flag); %SDM is the M-file description of the SIMULINK system named SDM. % The block-diagram can be displayed by typing: SDM. % % SYS=SDM(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 SDM 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 SDM with a FLAG of zero: % [SIZES]=SDM([],[],[],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',[3000,3000,3160,3024]) open_system(sys) end; set_param(sys,'algorithm', 'Linear') set_param(sys,'Start time', '0.0') set_param(sys,'Stop time', '2') set_param(sys,'Min step size', '1/512000') set_param(sys,'Max step size', '1/512000') set_param(sys,'Relative error','1e-3') set_param(sys,'Return vars', '') set_param(sys,'AssignWideVectorLines','on'); % Subsystem 'Sign'. new_system([sys,'/','Sign']) set_param([sys,'/','Sign'],'Location',[159,417,467,586]) add_block('built-in/Outport',[sys,'/','Sign/out_1']) set_param([sys,'/','Sign/out_1'],... 'position',[265,70,285,90]) add_block('built-in/Inport',[sys,'/','Sign/in_1']) set_param([sys,'/','Sign/in_1'],... 'position',[35,30,55,50]) add_block('built-in/Relational Operator',[sys,'/',['Sign/Relational',13,'Operator']]) set_param([sys,'/',['Sign/Relational',13,'Operator']],... 'Operator','>',... 'position',[140,32,170,63]) add_block('built-in/Sum',[sys,'/','Sign/Sum']) set_param([sys,'/','Sign/Sum'],... 'inputs','+-',... 'position',[215,64,235,91]) add_block('built-in/Relational Operator',[sys,'/',['Sign/Relational',13,'Operator1']]) set_param([sys,'/',['Sign/Relational',13,'Operator1']],... 'Operator','<',... 'position',[140,92,170,123]) add_block('built-in/Constant',[sys,'/','Sign/Constant']) set_param([sys,'/','Sign/Constant'],... 'Value','0',... 'position',[65,105,85,125]) add_line([sys,'/','Sign'],[60,40;135,40]) add_line([sys,'/','Sign'],[95,40;95,100;135,100]) add_line([sys,'/','Sign'],[90,115;135,115]) add_line([sys,'/','Sign'],[110,115;110,55;135,55]) add_line([sys,'/','Sign'],[175,110;185,110;185,85;210,85]) add_line([sys,'/','Sign'],[175,50;185,50;185,70;210,70]) add_line([sys,'/','Sign'],[240,80;260,80]) set_param([sys,'/','Sign'],... 'Mask Display','plot(-50,-50,50,50,[-50,50],[0,0],[0,0],[-50,50],[-40,0],[-30,-30],[0,40],[30,30])',... 'Mask Type','Sign',... 'Mask Dialogue','y = sign(x)') set_param([sys,'/','Sign'],... 'Mask Help','Sign Function:\n\t\t\ty = 1 if x > 0\n\t\t\ty = 0 if x = 0\n\t\t\ty = -1 if x < 0') % Finished composite block 'Sign'. set_param([sys,'/','Sign'],... 'position',[390,112,420,138]) add_block('built-in/Scope',[sys,'/','Scope2']) set_param([sys,'/','Scope2'],... 'Vgain','1.500000',... 'Hgain','0.000050',... 'Vmax','3.000000',... 'Hmax','0.000100',... 'Window',[0,197,770,397],... 'position',[555,30,585,60]) add_block('built-in/Sum',[sys,'/','Sum']) set_param([sys,'/','Sum'],... 'inputs','+-',... 'position',[280,115,300,135]) add_block('built-in/Gain',[sys,'/','Gain']) set_param([sys,'/','Gain'],... 'Gain','.8',... 'position',[170,105,200,135]) % Subsystem ['Repeating',13,'Sequence']. new_system([sys,'/',['Repeating',13,'Sequence']]) set_param([sys,'/',['Repeating',13,'Sequence']],'Location',[5,40,315,196]) add_block('built-in/Clock',[sys,'/',['Repeating',13,'Sequence/Clock']]) set_param([sys,'/',['Repeating',13,'Sequence/Clock']],... 'position',[45,60,65,80]) add_block('built-in/Fcn',[sys,'/',['Repeating',13,'Sequence/Fcn1']]) set_param([sys,'/',['Repeating',13,'Sequence/Fcn1']],... 'Expr','rem(u[1],period)',... 'position',[110,60,150,80]) add_block('built-in/Look Up Table',[sys,'/',['Repeating',13,'Sequence/Look-Up Table']]) set_param([sys,'/',['Repeating',13,'Sequence/Look-Up Table']],... 'Input_Values','t',... 'Output_Values','y',... 'position',[210,58,250,82]) add_block('built-in/Outport',[sys,'/',['Repeating',13,'Sequence/out_1']]) set_param([sys,'/',['Repeating',13,'Sequence/out_1']],... 'position',[285,60,305,80]) add_line([sys,'/',['Repeating',13,'Sequence']],[155,70;205,70]) add_line([sys,'/',['Repeating',13,'Sequence']],[70,70;105,70]) add_line([sys,'/',['Repeating',13,'Sequence']],[255,70;280,70]) set_param([sys,'/',['Repeating',13,'Sequence']],... 'Mask Display','plot([t,t+period,t+2*period],[y,y,y])',... 'Mask Type','Repeating table') set_param([sys,'/',['Repeating',13,'Sequence']],... 'Mask Dialogue','Repeating table.\nEnter values of time and output for first cycle.|Time values:|Output values:',... 'Mask Translate','period = max(@1); t = @1; y = @2;') set_param([sys,'/',['Repeating',13,'Sequence']],... 'Mask Help','Repeats cycle given in table. Time values should be monotonically increasing.',... 'Mask Entries','[0 .005 .005 .015 .015 .02]\/[1 1 -1 -1 1 1]\/') % Finished composite block ['Repeating',13,'Sequence']. set_param([sys,'/',['Repeating',13,'Sequence']],... 'position',[25,102,50,138]) add_block('built-in/Zero-Pole',[sys,'/',['Analog',13,'Butterworth',13,'LP Filter']]) set_param([sys,'/',['Analog',13,'Butterworth',13,'LP Filter']],... 'Zeros','z',... 'Poles','p',... 'Gain','k',... 'Mask Display','plot(20*log10(w),20*log10(abs(h)))',... 'Mask Type','buttap') set_param([sys,'/',['Analog',13,'Butterworth',13,'LP Filter']],... 'Mask Dialogue','Analog Butterworth low pass filter.\n\n(Requires Signal Processing Toolbox)|Cutoff frequency (rad/sec)|Order') set_param([sys,'/',['Analog',13,'Butterworth',13,'LP Filter']],... 'Mask Translate','[z,p,k]=buttap(@2); z=@1*z; p=@1*p; k=real(prod(-p)); [num,den]=zp2tf(z,p,k); w=logspace(log10(@1/10),log10(10*@1),20); h=freqs(num,den,w); ') set_param([sys,'/',['Analog',13,'Butterworth',13,'LP Filter']],... 'Mask Help','Butterworth low pass filter using MATLAB''s butter command.',... 'Mask Entries','400*2*pi\/5\/',... 'position',[100,97,140,143]) add_block('built-in/Scope',[sys,'/','Scope3']) set_param([sys,'/','Scope3'],... 'Vgain','1.500000',... 'Hgain','0.010000',... 'Vmax','3.000000',... 'Hmax','0.020000',... 'Window',[381,0,770,198],... 'position',[795,20,825,50]) % Subsystem 'Decimation'. new_system([sys,'/','Decimation']) set_param([sys,'/','Decimation'],'Location',[129,578,559,704]) add_block('built-in/Zero-Order Hold',[sys,'/',['Decimation/Zero-Order',13,'Hold']]) set_param([sys,'/',['Decimation/Zero-Order',13,'Hold']],... 'Sample time','ts*r',... 'position',[225,39,260,71]) add_block('built-in/Inport',[sys,'/','Decimation/in_1']) set_param([sys,'/','Decimation/in_1'],... 'position',[45,45,65,65]) add_block('built-in/Outport',[sys,'/','Decimation/out_1']) set_param([sys,'/','Decimation/out_1'],... 'position',[290,45,310,65]) add_block('built-in/Discrete State-Space',[sys,'/',['Decimation/Chebyshev Type I',13,'IIR Lowpass']]) set_param([sys,'/',['Decimation/Chebyshev Type I',13,'IIR Lowpass']],... 'A','a',... 'B','b',... 'C','c',... 'D','d',... 'Sample time','ts',... 'Mask Display','plot(1:64,abs(h))',... 'Mask Type','cheby1') set_param([sys,'/',['Decimation/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Dialogue','IIR Chebychev type I low pass filter.|Cutoff frequency (0 to 1):|Order:|Db ripple in passband:|Sample time:') set_param([sys,'/',['Decimation/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Translate','[a,b,c,d]=cheby1(@2,@3,@1); ts=@4; [num,den]=ss2tf(a,b,c,d,1); if (@2 <= 8), [a,b,c,d]=tf2ss(num,den); end; h=freqz(num,den,64); ') set_param([sys,'/',['Decimation/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Help','IIR Chebychev type I low pass filter designed using MATLAB''s cheby1 command. Implemented in state-space form. Filters of order 8 or less are implemented in controller canonical form for improved efficiency.') set_param([sys,'/',['Decimation/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Entries','0.8/r\/8\/.05\/ts\/',... 'position',[130,41,165,69]) add_line([sys,'/','Decimation'],[265,55;285,55]) add_line([sys,'/','Decimation'],[70,55;125,55]) add_line([sys,'/','Decimation'],[170,55;220,55]) set_param([sys,'/','Decimation'],... 'Mask Display','x[nR]',... 'Mask Type','Decimate',... 'Mask Dialogue','Decimate input by integer factor.|Decimation factor R:|Input sample time:',... 'Mask Translate','r=@1;ts=@2;') set_param([sys,'/','Decimation'],... 'Mask Help','Passes the input signal through an 8th order Chebyshev Type I IIR Lowpass filter with passband ripple of 0.05 dB to reduce aliasing. Subsamples the filtered signal at a rate R times slower than the base sample rate defined by the Sample time.') set_param([sys,'/','Decimation'],... 'Mask Entries','4\/1/512000\/') % Finished composite block 'Decimation'. set_param([sys,'/','Decimation'],... 'position',[550,109,590,141]) % Subsystem ['Dirty Square',13,'Wave1']. new_system([sys,'/',['Dirty Square',13,'Wave1']]) set_param([sys,'/',['Dirty Square',13,'Wave1']],'Location',[125,385,604,706]) add_block('built-in/Sum',[sys,'/',['Dirty Square',13,'Wave1/Sum']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Sum']],... 'BackGround',3,... 'inputs','+++++',... 'position',[355,52,375,108]) add_block('built-in/Gain',[sys,'/',['Dirty Square',13,'Wave1/Gain3']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Gain3']],... 'BackGround',3,... 'Gain','1/9',... 'position',[140,238,185,262]) add_block('built-in/Gain',[sys,'/',['Dirty Square',13,'Wave1/Gain2']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Gain2']],... 'BackGround',3,... 'Gain','1/7',... 'position',[140,185,185,215]) add_block('built-in/Gain',[sys,'/',['Dirty Square',13,'Wave1/Gain1']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Gain1']],... 'BackGround',3,... 'Gain','1/5',... 'position',[140,135,185,165]) add_block('built-in/Gain',[sys,'/',['Dirty Square',13,'Wave1/Gain']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Gain']],... 'BackGround',3,... 'Gain','1/3',... 'position',[140,93,180,117]) add_block('built-in/Sine Wave',[sys,'/',['Dirty Square',13,'Wave1/Sine Wave4']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Sine Wave4']],... 'BackGround',3,... 'frequency','6220.4',... 'position',[60,240,80,260]) add_block('built-in/Sine Wave',[sys,'/',['Dirty Square',13,'Wave1/Sine Wave3']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Sine Wave3']],... 'BackGround',3,... 'frequency','4838.1',... 'position',[60,190,80,210]) add_block('built-in/Sine Wave',[sys,'/',['Dirty Square',13,'Wave1/Sine Wave2']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Sine Wave2']],... 'BackGround',3,... 'frequency','3455.8',... 'position',[60,140,80,160]) add_block('built-in/Sine Wave',[sys,'/',['Dirty Square',13,'Wave1/Sine Wave1']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Sine Wave1']],... 'BackGround',3,... 'frequency','2073.5',... 'position',[60,95,80,115]) add_block('built-in/Sine Wave',[sys,'/',['Dirty Square',13,'Wave1/Sine Wave']]) set_param([sys,'/',['Dirty Square',13,'Wave1/Sine Wave']],... 'BackGround',3,... 'frequency','691',... 'sampletime','0',... 'position',[60,50,80,70]) add_block('built-in/Outport',[sys,'/',['Dirty Square',13,'Wave1/out_1']]) set_param([sys,'/',['Dirty Square',13,'Wave1/out_1']],... 'position',[420,70,440,90]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[380,80;415,80]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[190,250;325,250;325,100;350,100]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[190,200;305,200;305,90;350,90]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[190,150;285,150;285,80;350,80]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[185,105;255,105;255,70;350,70]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[85,60;350,60]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[85,250;135,250]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[85,200;135,200]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[85,150;135,150]) add_line([sys,'/',['Dirty Square',13,'Wave1']],[85,105;135,105]) % Finished composite block ['Dirty Square',13,'Wave1']. set_param([sys,'/',['Dirty Square',13,'Wave1']],... 'position',[80,330,110,380]) add_block('built-in/Scope',[sys,'/','Scope4']) set_param([sys,'/','Scope4'],... 'Vgain','1.500000',... 'Hgain','0.010000',... 'Vmax','3.000000',... 'Hmax','0.020000',... 'Window',[0,397,383,597],... 'position',[785,245,815,275]) add_block('built-in/Scope',[sys,'/','Scope']) set_param([sys,'/','Scope'],... 'Vgain','1.500000',... 'Hgain','0.010000',... 'Vmax','3.000000',... 'Hmax','0.020000',... 'Window',[0,0,383,200],... 'position',[245,30,275,60]) add_block('built-in/Zero-Order Hold',[sys,'/',['Zero-Order',13,'Hold']]) set_param([sys,'/',['Zero-Order',13,'Hold']],... 'Sample time','1/512000',... 'position',[455,109,490,141]) add_block('built-in/Integrator',[sys,'/','Integrator']) set_param([sys,'/','Integrator'],... 'position',[335,114,365,136]) % Subsystem 'Decimation1'. new_system([sys,'/','Decimation1']) set_param([sys,'/','Decimation1'],'Location',[129,578,559,704]) add_block('built-in/Discrete State-Space',[sys,'/',['Decimation1/Chebyshev Type I',13,'IIR Lowpass']]) set_param([sys,'/',['Decimation1/Chebyshev Type I',13,'IIR Lowpass']],... 'A','a',... 'B','b',... 'C','c',... 'D','d',... 'Sample time','ts',... 'Mask Display','plot(1:64,abs(h))',... 'Mask Type','cheby1') set_param([sys,'/',['Decimation1/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Dialogue','IIR Chebychev type I low pass filter.|Cutoff frequency (0 to 1):|Order:|Db ripple in passband:|Sample time:') set_param([sys,'/',['Decimation1/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Translate','[a,b,c,d]=cheby1(@2,@3,@1); ts=@4; [num,den]=ss2tf(a,b,c,d,1); if (@2 <= 8), [a,b,c,d]=tf2ss(num,den); end; h=freqz(num,den,64); ') set_param([sys,'/',['Decimation1/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Help','IIR Chebychev type I low pass filter designed using MATLAB''s cheby1 command. Implemented in state-space form. Filters of order 8 or less are implemented in controller canonical form for improved efficiency.') set_param([sys,'/',['Decimation1/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Entries','0.8/r\/8\/.05\/ts\/',... 'position',[130,41,165,69]) add_block('built-in/Outport',[sys,'/','Decimation1/out_1']) set_param([sys,'/','Decimation1/out_1'],... 'position',[290,45,310,65]) add_block('built-in/Inport',[sys,'/','Decimation1/in_1']) set_param([sys,'/','Decimation1/in_1'],... 'position',[45,45,65,65]) add_block('built-in/Zero-Order Hold',[sys,'/',['Decimation1/Zero-Order',13,'Hold']]) set_param([sys,'/',['Decimation1/Zero-Order',13,'Hold']],... 'Sample time','ts*r',... 'position',[225,39,260,71]) add_line([sys,'/','Decimation1'],[170,55;220,55]) add_line([sys,'/','Decimation1'],[70,55;125,55]) add_line([sys,'/','Decimation1'],[265,55;285,55]) set_param([sys,'/','Decimation1'],... 'Mask Display','x[nR]',... 'Mask Type','Decimate',... 'Mask Dialogue','Decimate input by integer factor.|Decimation factor R:|Input sample time:',... 'Mask Translate','r=@1;ts=@2;') set_param([sys,'/','Decimation1'],... 'Mask Help','Passes the input signal through an 8th order Chebyshev Type I IIR Lowpass filter with passband ripple of 0.05 dB to reduce aliasing. Subsamples the filtered signal at a rate R times slower than the base sample rate defined by the Sample time.') set_param([sys,'/','Decimation1'],... 'Mask Entries','4\/1/128000\/') % Finished composite block 'Decimation1'. set_param([sys,'/','Decimation1'],... 'position',[640,109,680,141]) % Subsystem 'Decimation2'. new_system([sys,'/','Decimation2']) set_param([sys,'/','Decimation2'],'Location',[129,578,559,704]) add_block('built-in/Zero-Order Hold',[sys,'/',['Decimation2/Zero-Order',13,'Hold']]) set_param([sys,'/',['Decimation2/Zero-Order',13,'Hold']],... 'Sample time','ts*r',... 'position',[225,39,260,71]) add_block('built-in/Inport',[sys,'/','Decimation2/in_1']) set_param([sys,'/','Decimation2/in_1'],... 'position',[45,45,65,65]) add_block('built-in/Outport',[sys,'/','Decimation2/out_1']) set_param([sys,'/','Decimation2/out_1'],... 'position',[290,45,310,65]) add_block('built-in/Discrete State-Space',[sys,'/',['Decimation2/Chebyshev Type I',13,'IIR Lowpass']]) set_param([sys,'/',['Decimation2/Chebyshev Type I',13,'IIR Lowpass']],... 'A','a',... 'B','b',... 'C','c',... 'D','d',... 'Sample time','ts',... 'Mask Display','plot(1:64,abs(h))',... 'Mask Type','cheby1') set_param([sys,'/',['Decimation2/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Dialogue','IIR Chebychev type I low pass filter.|Cutoff frequency (0 to 1):|Order:|Db ripple in passband:|Sample time:') set_param([sys,'/',['Decimation2/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Translate','[a,b,c,d]=cheby1(@2,@3,@1); ts=@4; [num,den]=ss2tf(a,b,c,d,1); if (@2 <= 8), [a,b,c,d]=tf2ss(num,den); end; h=freqz(num,den,64); ') set_param([sys,'/',['Decimation2/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Help','IIR Chebychev type I low pass filter designed using MATLAB''s cheby1 command. Implemented in state-space form. Filters of order 8 or less are implemented in controller canonical form for improved efficiency.') set_param([sys,'/',['Decimation2/Chebyshev Type I',13,'IIR Lowpass']],... 'Mask Entries','0.8/r\/8\/.05\/ts\/',... 'position',[130,41,165,69]) add_line([sys,'/','Decimation2'],[265,55;285,55]) add_line([sys,'/','Decimation2'],[70,55;125,55]) add_line([sys,'/','Decimation2'],[170,55;220,55]) set_param([sys,'/','Decimation2'],... 'Mask Display','x[nR]',... 'Mask Type','Decimate',... 'Mask Dialogue','Decimate input by integer factor.|Decimation factor R:|Input sample time:',... 'Mask Translate','r=@1;ts=@2;') set_param([sys,'/','Decimation2'],... 'Mask Help','Passes the input signal through an 8th order Chebyshev Type I IIR Lowpass filter with passband ripple of 0.05 dB to reduce aliasing. Subsamples the filtered signal at a rate R times slower than the base sample rate defined by the Sample time.') set_param([sys,'/','Decimation2'],... 'Mask Entries','4\/1/32000\/') % Finished composite block 'Decimation2'. set_param([sys,'/','Decimation2'],... 'position',[735,109,775,141]) add_block('built-in/Scope',[sys,'/','Scope5']) set_param([sys,'/','Scope5'],... 'Vgain','1.500000',... 'Hgain','0.010000',... 'Vmax','3.000000',... 'Hmax','0.020000',... 'Window',[381,397,770,596],... 'position',[755,175,785,205]) add_line(sys,[425,125;450,125]) add_line(sys,[495,125;520,125;520,45;550,45]) add_line(sys,[305,125;330,125]) add_line(sys,[370,125;385,125]) add_line(sys,[495,125;510,125;510,185;260,185;260,130;275,130]) add_line(sys,[595,125;635,125]) add_line(sys,[685,125;730,125]) add_line(sys,[55,120;95,120]) add_line(sys,[510,125;545,125]) add_line(sys,[780,125;790,35]) add_line(sys,[205,120;275,120]) add_line(sys,[220,120;220,45;240,45]) add_line(sys,[145,120;165,120]) add_line(sys,[595,125;610,125;610,260;780,260]) add_line(sys,[685,125;710,125;710,190;750,190]) 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