Esempio n. 1
0
def draw_3D_scalogram(signal, name, draw_contours=False):
    # Perform a wavelet transform on the input signal.
    print "Transforming '%s' using a Morlet wavelet..." % name
    transformed = Morlet(
        signal,
        largestscale=4,
        notes=16,
        scaling='log')
    power_matrix = transformed.getpower()

    # Downsample the image.
    matrix_dimensions = numpy.shape(power_matrix)
    mat_size = (matrix_dimensions[0], 1000)
    power = scipy.misc.imresize(power_matrix, mat_size)

    # Display the power matrix generated during the wavelet transform.
    fig = pyplot.figure(name)
    pyplot.title(name)
    axis = fig.gca(projection='3d')

    # Setup each axis' data.
    f = numpy.arange(mat_size[0])
    t = numpy.arange(mat_size[1])
    f_major, t_major = numpy.meshgrid(f, t)

    # Plot everything.
    axis.plot_surface(t_major, f_major, power.transpose(), rstride=8, cstride=8, alpha=0.3)
    if draw_contours:
        axis.contour(t_major, f_major, power.transpose(), zdir='z', offset=0, cmap=cm.coolwarm)
        axis.contour(t_major, f_major, power.transpose(), zdir='x', offset=0, cmap=cm.coolwarm)
        axis.contour(t_major, f_major, power.transpose(), zdir='y', offset=0, cmap=cm.coolwarm)
    axis.set_xlabel('t')
    axis.set_ylabel('f')
    axis.set_zlabel('amplitude')
Esempio n. 2
0
def draw_scalogram(signal, name):
    # Perform a wavelet transform on the input signal.
    print "Transforming '%s' using a Morlet wavelet..." % name
    transformed = Morlet(
        signal,
        largestscale=4,
        notes=16,
        scaling='log')
    power_matrix = transformed.getpower()

    # Display the power matrix generated during the wavelet transform.
    pylab.imshow(
        power_matrix,
        cmap=pylab.cm.jet,
        aspect='auto')
Esempio n. 3
0
def phaseCWT(sig, Tph, dt, maxF, dF=2):
    '''
    Calculate Morlet wavelet transform of a signal, but as a function of
    phase. Unaligned phase at the end will be discarded, and ph(t=0) must be 0,
    i.e. no phase shifts!
    '''
    n_ph = Tph / dt
    N = len(sig)
    q_ph = np.floor(N / n_ph)

    minF = 1. / (len(sig) / 2 * Morlet.fourierwl * dt)
    F = np.linspace(minF, maxF, (maxF - minF) / dF + 1)
    scales = 1 / F * 1 / Morlet.fourierwl * 1 / dt

    w = Morlet(sig, scales, scaling='direct')
    w_cwt_ph = np.ndarray((w.nscale, n_ph))

    #import pdb; pdb.set_trace()
    for sc_it in xrange(w.nscale):
        w_ph = np.reshape(
            np.abs(w.cwt[sc_it, :][0:q_ph * n_ph])**2, (q_ph, n_ph))
        w_cwt_ph[sc_it, :] = np.mean(w_ph, 0)

    sig_ph = np.reshape(sig[0:q_ph * n_ph], (q_ph, n_ph))
    phases = 1. * np.arange(n_ph) / n_ph * 2 * np.pi - np.pi
    return phases, w_cwt_ph, 1. / (w.scales * w.fourierwl * dt), sig_ph
Esempio n. 4
0
def CWT(sig, dt, maxF, dF=2):
    '''
    Calculate a Morlet wavelet transfrom of a signal.
    '''
    N = len(sig)

    minF = 1. / (len(sig) / 2 * Morlet.fourierwl * dt)
    F = np.linspace(minF, maxF, (maxF - minF) / dF + 1)
    scales = 1 / F * 1 / Morlet.fourierwl * 1 / dt

    w = Morlet(sig, scales, scaling='direct')
    return np.abs(w.cwt)**2, 1. / (w.scales * w.fourierwl * dt)
Esempio n. 5
0
def getPhase(lfp, fmin, fmax, nbins, fsamp, power=False):
    """ Continuous Wavelets Transform
        return phase of lfp in a Tsd array
    """
    import neuroseries as nts
    from Wavelets import MyMorlet as Morlet
    if isinstance(lfp, nts.time_series.TsdFrame):
        allphase = nts.TsdFrame(lfp.index.values, np.zeros(lfp.shape))
        allpwr = nts.TsdFrame(lfp.index.values, np.zeros(lfp.shape))
        for i in lfp.keys():
            allphase[i], allpwr[i] = getPhase(lfp[i],
                                              fmin,
                                              fmax,
                                              nbins,
                                              fsamp,
                                              power=True)
        if power:
            return allphase, allpwr
        else:
            return allphase

    elif isinstance(lfp, nts.time_series.Tsd):
        cw = Morlet(lfp.values, fmin, fmax, nbins, fsamp)
        cwt = cw.getdata()
        cwt = np.flip(cwt, axis=0)
        wave = np.abs(cwt)**2.0
        phases = np.arctan2(np.imag(cwt), np.real(cwt)).transpose()
        cwt = None
        index = np.argmax(wave, 0)
        # memory problem here, need to loop
        phase = np.zeros(len(index))
        for i in range(len(index)):
            phase[i] = phases[i, index[i]]
        phases = None
        if power:
            pwrs = cw.getpower()
            pwr = np.zeros(len(index))
            for i in range(len(index)):
                pwr[i] = pwrs[index[i], i]
            return nts.Tsd(lfp.index.values,
                           phase), nts.Tsd(lfp.index.values, pwr)
        else:
            return nts.Tsd(lfp.index.values, phase)