[R] How to select the scale parameter for Gabor transform (Rwave)?

Joaquin Rapela rapela at ucsd.edu
Fri Apr 19 23:36:56 CEST 2013


Dear list,

I am trying to choose the scale parameter for the cgt transform but I don't
know how to do it. In time I would like to be able to separate points 30
samples apart, and in frequency I would like to separate bands 0.04 Hz
apart. I tried the two approaches described below and they gave me
different results.  I would appreciate advise on how to do this.

The Rwave Gabor transform uses a Gaussian window; i.e.,
g(x)=exp(-x^2/(2*sigma)), with radius deltaG=sqrt(sigma/2). The Fourier
transform of this window has a radius deltaGHat=1/sqrt(2*sigma). Solving
for deltaG=10 I get sigma=200, which in turn gives 
deltaGHat=0.05 radians=0.008 Hz. So, sigma=200 should satisfy the 
requirements above.

To make sure sigma=200 works in practice, I computed the Gabor transform of
two sinusoids separated by 0.04 Hz plus two spikes separated by 30 points
using the code below. I obtained an excellent frequency resolution but a
disastrous temporal resolution
http://sccn.ucsd.edu/~rapela/scaleSelectionProblem/gtResultSigma200.jpg. To
obtain decent frequency and temporal resolutions I used sigma=10
http://sccn.ucsd.edu/~rapela/scaleSelectionProblem/gtResultSigma10.jpg.

    fromTime <- 0
    toTime <- 250
    by <- 1
    ts <- seq(from=fromTime, to=toTime)
    f1 <- 0.01
    f2 <- 0.05
    t1 <- 50
    t2 <- 80
    K <- 15
    fMax <- 0.20
    nf <- 100
    df <- fMax/(nf/2)
    scale <- 10

    ys <- sin(2*pi*f1*ts) + sin(2*pi*f2*ts)
    ys[t1] <- K
    ys[t2] <- K

    plot(x=ts, y=ys, xlab="Time", ylab="Signal", type="b")
    cgtsinwave <- cgt(input=ys, nvoice=nf, freqstep=df, scale=scale, plot=TRUE)

Many thanks, Joaquin

-- 
Joaquin Rapela, PhD
Swartz Center for Computational Neuroscience
University of California San Diego
9500 Gilman Drive,
San Diego, CA 92093-0559
tel: (858) 822-7536
fax: (858) 822-7556
http://sccn.ucsd.edu/~rapela



More information about the R-help mailing list