def find_mode(vec, x=None,SDk = 0.2,max_iter=1e5): """Finds first empirical mode of the vector `vec` returns mode if it can, returns ``None`` if no local extrema can be found Parameters: - `vec`: an input 1D vector - `x`: an optional vector, `vec=f(x)` - `SDk`: tolerance - `max_iter`: maximum number of iterations Returns: - `h`: a mode estimate """ h_prev = imf_candidate(vec,x) if h_prev is None: return None for k in xrange(long(max_iter)): h1 = imf_candidate(h_prev, x) if h1 is None: return h_prev sd = np.sum((h1-h_prev)**2)/np.sum(h_prev**2) xf,yf,der,mx,mn = lib.locextr(h1) zc = np.where(np.diff(np.sign(h1)) > 0 )[0] print len(zc), len(mx), len(mn) if (abs(len(zc) - len(mx)) < 2) and \ (abs(len(mx) - len(mn)) < 2) and \ (abs(len(zc) - len(mn)) < 2) and \ sd < SDk: return h1 h_prev = h1 print "No convergence after %d iterations" % max_iter return h1
def _(v1,v2): v1n = lib.DFoSD(v1)/len(v1) xcorr = np.correlate(v1n, lib.DFoSD(v2), mode='full') xcorr = atrous.smooth(xcorr, 2) maxima = lib.locextr(xcorr, x=tv1, output='max') k = np.argmax([x[1] for x in maxima]) return maxima[k]
def find_mode(vec, x=None, SDk=0.2, max_iter=1e5): """Finds first empirical mode of the vector `vec` returns mode if it can, returns ``None`` if no local extrema can be found Parameters: - `vec`: an input 1D vector - `x`: an optional vector, `vec=f(x)` - `SDk`: tolerance - `max_iter`: maximum number of iterations Returns: - `h`: a mode estimate """ h_prev = imf_candidate(vec, x) if h_prev is None: return None for k in xrange(long(max_iter)): h1 = imf_candidate(h_prev, x) if h1 is None: return h_prev sd = np.sum((h1 - h_prev)**2) / np.sum(h_prev**2) xf, yf, der, mx, mn = lib.locextr(h1) zc = np.where(np.diff(np.sign(h1)) > 0)[0] print len(zc), len(mx), len(mn) if (abs(len(zc) - len(mx)) < 2) and \ (abs(len(mx) - len(mn)) < 2) and \ (abs(len(zc) - len(mn)) < 2) and \ sd < SDk: return h1 h_prev = h1 print "No convergence after %d iterations" % max_iter return h1
def envelopes(vec, x=None): """ Given vector `vec` and optional `x`, return lower and upper envelopes defined by local extrema in vector vec. Variable `x` defines the abscissa for vector `vec` """ from scipy.interpolate import splrep,splev xfit,yfit,_,maxlocs,minlocs = lib.locextr(vec,x,sort_values=False) if (len(maxlocs) < 1) or (len(minlocs) < 1): return [] if x is None: x = np.arange(len(vec)) minlocs = np.concatenate([[0],minlocs,[-1]]) maxlocs = np.concatenate([[0],maxlocs,[-1]]) lower = splev(x,splrep(xfit[minlocs],yfit[minlocs])) upper = splev(x,splrep(xfit[maxlocs],yfit[maxlocs])) return lower, upper
def envelopes(vec, x=None): """ Given vector `vec` and optional `x`, return lower and upper envelopes defined by local extrema in vector vec. Variable `x` defines the abscissa for vector `vec` """ from scipy.interpolate import splrep, splev xfit, yfit, _, maxlocs, minlocs = lib.locextr(vec, x, sort_values=False) if (len(maxlocs) < 1) or (len(minlocs) < 1): return [] if x is None: x = np.arange(len(vec)) minlocs = np.concatenate([[0], minlocs, [-1]]) maxlocs = np.concatenate([[0], maxlocs, [-1]]) lower = splev(x, splrep(xfit[minlocs], yfit[minlocs])) upper = splev(x, splrep(xfit[maxlocs], yfit[maxlocs])) return lower, upper