def tempo_search(db, Key, tempo): """ :: Static tempo-invariant search Returns search results for query resampled over a range of tempos. """ if not db.configCheck(): print "Failed configCheck in query spec." print db.configQuery return None prop = 1. / tempo # the proportion of original samples required for new tempo qconf = db.configQuery.copy() X = db.retrieve_datum(Key) P = db.retrieve_datum(Key, powers=True) X_m = pylab.mat(X.mean(0)) X_resamp = pylab.array( adb.resample_vector(X - pylab.mat(pylab.ones(X.shape[0])).T * X_m, prop)) X_resamp += pylab.mat(pylab.ones(X_resamp.shape[0])).T * X_m P_resamp = pylab.array(adb.resample_vector(P, prop)) seqStart = int(pylab.around(qconf['seqStart'] * prop)) qconf['seqStart'] = seqStart seqLength = int(pylab.around(qconf['seqLength'] * prop)) qconf['seqLength'] = seqLength tmpconf = db.configQuery db.configQuery = qconf res = db.query_data(featData=X_resamp, powerData=P_resamp) res_resorted = adb.sort_search_result(res.rawData) db.configQuery = tmpconf return res_resorted
def tempo_search(db, Key, tempo): """ :: Static tempo-invariant search Returns search results for query resampled over a range of tempos. """ if not db.configCheck(): print "Failed configCheck in query spec." print db.configQuery return None prop = 1.0 / tempo # the proportion of original samples required for new tempo qconf = db.configQuery.copy() X = db.retrieve_datum(Key) P = db.retrieve_datum(Key, powers=True) X_m = pylab.mat(X.mean(0)) X_resamp = pylab.array(adb.resample_vector(X - pylab.mat(pylab.ones(X.shape[0])).T * X_m, prop)) X_resamp += pylab.mat(pylab.ones(X_resamp.shape[0])).T * X_m P_resamp = pylab.array(adb.resample_vector(P, prop)) seqStart = int(pylab.around(qconf["seqStart"] * prop)) qconf["seqStart"] = seqStart seqLength = int(pylab.around(qconf["seqLength"] * prop)) qconf["seqLength"] = seqLength tmpconf = db.configQuery db.configQuery = qconf res = db.query_data(featData=X_resamp, powerData=P_resamp) res_resorted = adb.sort_search_result(res.rawData) db.configQuery = tmpconf return res_resorted
def asDCM(self): """Return the rotation matrix of the (normalized) quaternion http://www.x-io.co.uk/res/doc/madgwick_internal_report.pdf""" qw, qx, qy, qz = self.q ##http://www.rossprogrammproduct.com/translations/Matrix%20and%20Quaternion%20FAQ.htm#Q54 return mat([[1-2*(qy**2+qz**2), 2*(qx*qy-qz*qw),2*(qx*qz+qy*qw)], [2*(qx*qy+qz*qw), 1-2*(qx**2+qz**2), 2*(qy*qz-qx*qw)], [2*(qx*qz-qy*qw), 2*(qy*qz+qx*qw), 1-2*(qx**2+qy**2)]])
def _cqft(self): """ :: Constant-Q Fourier transform. """ if not self._have_power: if not self._power(): return False fp = self._check_feature_params() if fp['intensify']: self._cqft_intensified() else: self._make_log_freq_map() self.CQFT=pylab.array(pylab.sqrt(pylab.mat(self.Q)*pylab.mat(pylab.absolute(self.STFT)**2))) self._is_intensified=False self._have_cqft=True if fp['verbosity']: print "Extracted CQFT: intensified=%d" %self._is_intensified return True
def _cqft(self): """ :: Constant-Q Fourier transform. """ if not self._power(): return False fp = self._check_feature_params() if self.intensify: self._cqft_intensified() else: self._make_log_freq_map() self.CQFT=P.sqrt(P.array(P.mat(self.Q)*P.mat(P.absolute(self.STFT)**2))) self._is_intensified=False self._have_cqft=True if self.verbosity: print "Extracted CQFT: intensified=%d" %self._is_intensified self.inverse=self.icqft self.X=self.CQFT return True
def asMatrix(self): return mat(self.q)