clear;
noise=0.05;
N=211;
M=211;
t=linspace(-5,100,N);
%instrument response is a critically-damped pulse
sigi=10;
for i=1:N-1
  if (t(i)<0)
    g(i) = 0;
  else
    g(i) = t(i)*exp(-t(i)/sigi);
  end
end
gmax=max(g);
g=g/gmax;

for i=2:M
  for j=1:N-1
    tp=t(j)-t(i);
    if (tp > 0)
      G(i-1,j)=0;
    else
      G(i-1,j)=-tp*exp(tp/sigi);
    end
  end
end
deltat=t(2)-t(1);
G=G/gmax*deltat;

[u,s,v]=svd(G);

figure(1)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
colormap(gray)
imagesc(G)
H=colorbar;
set(H,'FontSize',18);
xlabel('j')
ylabel('i')
%print -deps2 gimage.eps

figure(2)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
semilogy(diag(s),'ko')
axis tight
xlabel('i')
ylabel('s_i')
%print -deps2 svalues.eps

%true signal is two pulses of sig deviation
sig=2;
mtrue = (exp(-((t(1:N-1)-8).^2/(sig^2*2)))+0.5*exp(-((t(1:N-1)-25).^2/(sig^2*2))))';
mtrue=mtrue/max(mtrue);
d=G*mtrue;
nn=noise*randn(M-1,1);
dn=G*mtrue+nn;

nkeep=N-1;
up=u(:,1:nkeep);
vp=v(:,1:nkeep);
sp=s(1:nkeep,1:nkeep);
mn=vp*inv(sp)*up'*dn;
mperf=vp*inv(sp)*up'*d;

figure(3)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
plot(t(1:N-1),mtrue,'k')
axis tight
xlabel('Time (s)')
ylabel('Acceleration (m/s)');
%print -deps2 truemodel.eps

figure(4)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
plot(t(1:N-1),g,'k')
axis tight
xlabel('Time (s)')
ylabel('V')
%print -deps2 impresp.eps

figure(5)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
plot(t(1:N-1),d,'k')
xlabel('Time (s)')
ylabel('V')
axis tight
%print -deps2 dsynfig.eps

figure(6)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
plot(t(1:N-1),mperf,'k')
xlabel('Time (s)')
ylabel('Acceleration (m/s)');
%print -deps2 perfectsol.eps

figure(7)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
plot(t(1:N-1),dn,'k')
xlabel('Time (s)')
ylabel('V');
axis tight
%print -deps2 dnoisefig.eps

figure(8)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
plot(t(1:N-1),mn,'k')
xlabel('Time (s)')
axis tight
ylabel('Acceleration (m/s)');
%print -deps2 m2noise.eps

%svd truncation to 26 singluar values
nkeep=26;
up=u(:,1:nkeep);
vp=v(:,1:nkeep);
sp=s(1:nkeep,1:nkeep);
m2=vp*inv(sp)*up'*dn;

figure(9)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
plot(t(1:N-1),m2,'k')
xlabel('Time (s)')
ylabel('Acceleration (m/s)');
axis tight
%print -deps2 srej.eps

figure(10)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
Rm=vp*vp';
colormap(gray)
CLIM=[min(min(Rm)),max(max(Rm))];
imagesc(Rm,CLIM)
xlabel('j')
ylabel('i')
H=colorbar;
set(H,'FontSize',18);
%print -deps2 mres.eps

figure(11)
function void=bookfonts
set(gca,'FontSize',18,'LineWidth',1.0);
mresrow=Rm(80,:);
plot(t(1:N-1),mresrow,'k')
axis tight
xlabel('Time (s)')
ylabel('Element Value')
%print -deps2 mresrow.eps

