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