Contents
%generate periodic function with uniform sampling %add noise %OUPUPT: y(n) written to output file % %Profile: a rising function (integrating capacitor) followed by %a decaying capacitor discharge
Specify Inputs
OutFile='PeriodicSignal.dat'; P=53.7324; %period in seconds dt=0.1; %sampling interval in seconds Nperiod=1000; %number of periods in time series f1=0.1; %fraction of period for the rising part mbin=21; %number of bins for folding alpha=1.4; %want the decay to be faster than exponential a=1; %amplitude of Gaussian noise fprintf('\n\n') fprintf('Generating exponential charge & discharge profile\n'); fprintf('Period: %f (s)\n',P); fprintf('sampling interval %f (s)\n',dt); fprintf('Number of periods of time series %d\n',Nperiod); fprintf('Amplitude of Gauassian noise %f\n',a);
Generating exponential charge & discharge profile Period: 53.732400 (s) sampling interval 0.100000 (s) Number of periods of time series 1000 Amplitude of Gauassian noise 1.000000
Generate the basic profile
t=0:dt:Nperiod*P;
n=numel(t);
y=GenerateProfile(t,P,f1,alpha); %code can be found at bottom of page
yn=y+a*randn(1,n);
Write out the timeseries
fid=fopen(OutFile,'w'); fprintf(fid,'%%time series of a periodic signal\n'); fprintf(fid,'%% column 1: timme, column 2: amplitude\n'); fprintf(fid,'%f %f\n',[t;y]); fclose(fid);
Fold the time series
mperiod2plot=4; figure(1) subplot(2,1,1) ind=1:fix(mperiod2plot*P/dt); plot(t(ind),y(ind)) str=sprintf('first %d periods',mperiod2plot); title(str) ylabel('amplitude') subplot(2,1,2) plot(t(ind),yn(ind)) title('with noise') xlabel('time(s)') ylabel('amplitude') dP=0.01; %fold at period P+dP fprintf('true period, P: %f\n',P); fprintf('fold period is P+dP where dP=%f\n',dP); fprintf('will fold into %d bins\n',mbin); Ptry=P+dP; figure(2) FoldProfile(t,yn,Ptry,mbin); fprintf('\n')
true period, P: 53.732400 fold period is P+dP where dP=0.010000 will fold into 21 bins
GenerateProfile
The function GenerateProfile is given below
function y=GenerateProfile(t,P,f1,alpha) t=t-fix(t/P)*P; a=f1*P; b=P-a; ycross=1-exp(-1); y=(t<a).*(1-exp(-t/a))+(t>a).*ycross.*exp(-(t-a).^alpha/b); end