function[a,x1r,x2r,x3r,x4r,x5r] = sf_engine(a,t,drate,num2,flow,fup,ie,nt,dur,x1r,x2r,x3r,x4r,x5r); % % sf_engine ver 1.3 November 2, 2007 % rand('state',0) tp=2*pi; ave=mean(a); sd=std(a); % am=2.*sd; n=num2; pu=1.; pl=0.; % errormax=1.0e+53; % disp(' '); disp(' Trial Error Amplitude Freq(Hz) Phase(rad) damp delay(sec) '); % jk=0; % delta=0.001; nnn=fix(0.1*nt); % for(j=1:nt) % if(j>nnn) % fr=(x2r(ie)/tp); % if( (fup-fr)/fup < delta) fup=fup*(1+delta); end % if(flow>1.0e-06) if( (fr-flow)/flow < delta) flow=flow*(1-delta); end end % end % jk=jk+1; % if(jk==10000) out4=sprintf('\n %ld ',j); disp(out4); jk=0; end % x1=rand; x2=rand; x3=rand; x4=rand; x5=rand; % n1=fix(2.*nt/3.); n2=fix(4.*nt/5.); if( j < n1 ) x1=2.*am*x1; x2=((fup-flow)*x2+flow)*tp; x3=((pu-pl)*x3+pl)*tp; x4=(x4^2.5); x5=dur*(x5^2.); end if( j >= n1 & j < n2) x1=x1r(ie)*(0.98+0.04*x1); x2=x2r(ie)*(0.98+0.04*x2); x3=x3r(ie)*(0.98+0.04*x3); % x4=x4r(ie)*(0.80+0.40*x4); x5=x5r(ie)*(0.98+0.04*x5); end if( j >= n2 ) x1=x1r(ie)*(0.99+0.02*x1); x2=x2r(ie)*(0.99+0.02*x2); x3=x3r(ie)*(0.99+0.02*x3); x4=x4r(ie)*(0.90+0.20*x4); x5=x5r(ie)*(0.99+0.02*x5); end % if(x2 > fup*tp ) x2 = fup*tp; end % if(x2 < flow*tp) x2 = flow*tp; end % if(x4 >= 0.85 ) x4=0.05; end % if(j==1) x1=0.; else if(x1<1.0e-12) x1=am*rand; end end % error=0.; % domegan=x4*x2; omegad=x2*sqrt(1.-x4^2); % for(i=1:drate:n) % tt=t(i)-t(1); y=0.; % if(tt>x5) ta=tt-x5; y=x1*exp(-domegan*ta)*sin(omegad*ta-x3); end % error=error+((a(i)-y)^2.); % end error=sqrt(error); % if(errorx5r(ie)) ttt=tt-x5r(ie); a(i)=a(i)-x1r(ie)*exp( -domegan*ttt )*sin( omegad*ttt - x3r(ie) ); ave=ave+a(i); sq= sq+(a(i)^2.); end end % ave=ave/n; sd=sqrt( (sq/n) -(ave^2.)); % out4=sprintf('\n ave=%12.4g sd=%12.4g \n',ave,sd); disp(out4)