def goTest():
    nt, ni = 981, 500  # number of time samples; number of impulses
    ffreq, fdecay = 0.08, 0.05  # peak frequency and decay for wavelet
    gfreq, gdecay = 0.08, 0.05  # peak frequency and decay for wavelet
    na, ka = 11, -5  # sampling for inverse wavelet A
    nb, kb = 11, -5  # sampling for inverse wavelet B
    nc, kc = 181, -90  # sampling for wavelet C
    nd, kd = 181, -90  # sampling for wavelet D
    dt, ft = 0.004, 0.000  # used for plotting only
    st = Sampling(nt, dt, ft)
    for mp in [False]:  # True, for minimum-phase; False for mixed-phase
        ck = getWavelet(ffreq, fdecay, nc, kc, mp)  # known wavelet C
        dk = getWavelet(gfreq, gdecay, nc, kc, mp)  # known wavelet D
        normalizeMax(ck)
        normalizeMax(dk)
        #for r0,r1 in [(3.0,1.5),(2.0,2.0)]: # <1 for stretch; >1 for squeeze
        for r0, r1 in [(3.0, 1.5)]:  # <1 for stretch; >1 for squeeze
            title = "r0 = " + str(r0) + "  r1 = " + str(r1)
            u, p, q = logupq(r0, r1, nt, ni)
            f = addWavelet(ffreq, fdecay, p, mp)
            g = addWavelet(gfreq, fdecay, q, mp)
            ww = WaveletWarpingAH()
            ww.setTimeRange(0, nt / 2)
            ww.setStabilityFactor(0.0001)
            ww.setMaxIterations(40)
            #bw,cw = ww.getAHSimple(nb,kb,nc,kc,u,f,g);
            bw, cw = ww.getAHNewton(nb, kb, nc, kc, u, f, g)
            #bw,cw = ww.getAHGaussNewton(nb,kb,nc,kc,u,f,g);
            print "rmse =", ww.rms(
                sub(f, ww.applyHSA(nb, kb, bw, nc, kc, cw, u, g)))
            dump(bw)
            dw = ww.getWavelet(nd, kd, nb, kb, bw)
            sg = ww.warp(u, g)
            bg = ww.convolve(nb, kb, bw, g)
            sbg = ww.warp(u, bg)
            csbg = ww.convolve(nc, kc, cw, sbg)
            normalizeMax(cw)
            normalizeMax(dw)
            plotSequences(st, [f, g], labels=["f", "g"], title=title)
            plotSequences(st, [f, sg], labels=["f", "Sg"], title=title)
            plotSequences(st, [f, csbg], labels=["f", "CSBg"], title=title)
            plotWavelets(Sampling(nc, dt, kc * dt), [cw, ck],
                         title=title + " C")
            plotWavelets(Sampling(nd, dt, kd * dt), [dw, dk],
                         title=title + " D")
Beispiel #2
0
def goTest():
  nt,ni = 981,500 # number of time samples; number of impulses
  ffreq,fdecay = 0.08,0.05 # peak frequency and decay for wavelet
  gfreq,gdecay = 0.08,0.05 # peak frequency and decay for wavelet
  na,ka = 11,-5 # sampling for inverse wavelet A
  nb,kb = 11,-5 # sampling for inverse wavelet B
  nc,kc = 181,-90 # sampling for wavelet C
  nd,kd = 181,-90 # sampling for wavelet D
  dt,ft = 0.004,0.000 # used for plotting only
  st = Sampling(nt,dt,ft)
  for mp in [False]: # True, for minimum-phase; False for mixed-phase
    ck = getWavelet(ffreq,fdecay,nc,kc,mp) # known wavelet C
    dk = getWavelet(gfreq,gdecay,nc,kc,mp) # known wavelet D
    normalizeMax(ck)
    normalizeMax(dk)
    #for r0,r1 in [(3.0,1.5),(2.0,2.0)]: # <1 for stretch; >1 for squeeze
    for r0,r1 in [(3.0,1.5)]: # <1 for stretch; >1 for squeeze
      title = "r0 = "+str(r0)+"  r1 = "+str(r1)
      u,p,q = logupq(r0,r1,nt,ni)
      f = addWavelet(ffreq,fdecay,p,mp)
      g = addWavelet(gfreq,fdecay,q,mp)
      ww = WaveletWarpingAH()
      ww.setTimeRange(0,nt/2)
      ww.setStabilityFactor(0.0001)
      ww.setMaxIterations(40)
      #bw,cw = ww.getAHSimple(nb,kb,nc,kc,u,f,g);
      bw,cw = ww.getAHNewton(nb,kb,nc,kc,u,f,g);
      #bw,cw = ww.getAHGaussNewton(nb,kb,nc,kc,u,f,g);
      print "rmse =",ww.rms(sub(f,ww.applyHSA(nb,kb,bw,nc,kc,cw,u,g)))
      dump(bw);
      dw = ww.getWavelet(nd,kd,nb,kb,bw)
      sg = ww.warp(u,g)
      bg = ww.convolve(nb,kb,bw,g)
      sbg = ww.warp(u,bg)
      csbg = ww.convolve(nc,kc,cw,sbg)
      normalizeMax(cw)
      normalizeMax(dw)
      plotSequences(st,[f,g],labels=["f","g"],title=title)
      plotSequences(st,[f,sg],labels=["f","Sg"],title=title)
      plotSequences(st,[f,csbg],labels=["f","CSBg"],title=title)
      plotWavelets(Sampling(nc,dt,kc*dt),[cw,ck],title=title+" C")
      plotWavelets(Sampling(nd,dt,kd*dt),[dw,dk],title=title+" D")