home *** CD-ROM | disk | FTP | other *** search
- %ROUTINE TO GEMERATE TESTCASE1 DATA FROM MMLE3 PROGRAM BY MAINE & ILIFFE
- % - PRODUCES uydata FOR USE BY ML_DEMO1 ROUTINE.
- % - STORES DATA IN FILE ML_DEMO1.MAT SEE LISTING FOR MORE DETAILS
-
-
- disp('----------------------------------------------------------------------')
- disp('I am about to spend more than fifteen minutes generating 2004 specific')
- disp(' random numbers. When done, I will over-write disk file ml_demo1.mat')
- disp(' To stop me enter CTRL-C. Touch anything else and I go ahead.')
- disp('----------------------------------------------------------------------')
- pause
- disp('starting')
-
- uydata=[];
- ndp=1001;
-
- atrue=-1;btrue=10;ftrue=2;gtrue=1;dt=.01;
-
- sqrtq=ftrue*sqrt(dt);% DISCRETE PROCESS NOISE COVARIANCE APPROXIMATION
-
- [phi,gam]=c2d(atrue,btrue,dt);
-
- t=[0:ndp]'*dt;
-
- gauss=[t;t];
-
-
- %--------------------------------------------NOISE GENERATION ALGO FROM MMLE3
- imod=131071;rdiv=131072;imult=2401;seed=4455;r=[];x=[];y=[];
-
- doshift=['seed=round(rem(seed*imult,imod));x=2*seed/rdiv-1;',...
- 'seed=round(rem(seed*imult,imod));y=2*seed/rdiv-1;',...
- 'r=x^2+y^2;'];
-
- for i=1:length(gauss) ;i
- if rem(i,2)==1
- eval(doshift)
- while r>=1
- eval(doshift)
- end
- r=sqrt(-2*log(r)/r);
- gauss(i)=x*r;
- else
- gauss(i)=y*r;
- end
- end
- % ---------------------------1 dimensional noise vector generation complete
-
- statnoise=gauss(1:2:2*ndp-1); % en
- measnoise=[0;gauss(2:2:2*ndp)]; % (Eta)
- clear gauss
-
-
- u=rem(fix(t+.005),2);
-
- %Maine and Iliff's model is
-
- % X(n+1)=PHI * X(n) + GAM * [U(n)+U(n+1)]/2
-
- % This average value hold avoids the half-sample delay in the usual ZOH.
- % We must thus average the input samples to reproduce their data.
-
- u_data(1:ndp,1)=(u(1:ndp)+u(2:ndp+1))/2; % Average the inputs (see end)
-
- xnonoise=dlsim(phi,gam,1,0,u_data); % Simulation with no noise
-
- xnosig=dlsim(phi,1,1,0,statnoise); % Separately simulate the process noise
-
- xnosig=xnosig(1:ndp);measnoise=measnoise(1:ndp);
-
- y_data = xnonoise + xnosig*sqrtq + measnoise*gtrue; % Combine the components
-
- y_data=y_data(1:ndp);u_data=u_data(1:ndp);
-
- uydata=[u_data y_data];
-
- save ml_demo1 uydata xnonoise xnosig measnoise statnoise
-
- clear
-
- % The output data are uydata=[u_data y_data]. The mmle routine in PC-Matlab
- % doesn't internally average inputs as Maine & Iliff's MMLE3 program does,
- % so u_data is the correct input to use. MMLE3 would use u.
-
- disp('--------------------------------ml_dem1g.m finished. Stack cleared.')
-
-