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')
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')
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
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)
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)