Есть ли какая-либо форма общего назначения кратковременного преобразования Фурье с соответствующим обратным преобразованием, встроенным в SciPy или NumPy или безотносительно?
Существует pyplot specgram
функция в matplotlib, который звонит ax.specgram()
, который звонит mlab.specgram()
, который звонит _spectral_helper()
:
#The checks for if y is x are so that we can use the same function to #implement the core of psd(), csd(), and spectrogram() without doing #extra calculations. We return the unaveraged Pxy, freqs, and t.
но
Это - функция помощника, которая реализует общность между 204 #psd, csd, и спектрограмму. Это НЕ предназначено, чтобы использоваться за пределами mlab
Я не уверен, может ли это использоваться, чтобы сделать STFT и ISTFT, все же. Есть ли что-либо еще, или я должен перевести что-то как эти функции MATLAB?
Я знаю, как записать мою собственную специальную реализацию; я просто ищу что-то полнофункциональное, которое может обработать различные функции работы с окнами (но имеет нормальное значение по умолчанию), является полностью обратимым с окнами COLA (istft(stft(x))==x
), протестированный несколькими людьми, никакими ошибками диапазона, обрабатывает концы и нулевое дополнение хорошо, быструю реализацию RFFT для реального входа, и т.д.
Я также нашел это на GitHub, но, похоже, оно работает с конвейерами, а не с обычными массивами:
http://github.com/ronw/frontend/blob/master/basic.py#LID281
def STFT(nfft, nwin=None, nhop=None, winfun=np.hanning):
...
return dataprocessor.Pipeline(Framer(nwin, nhop), Window(winfun),
RFFT(nfft))
def ISTFT(nfft, nwin=None, nhop=None, winfun=np.hanning):
...
return dataprocessor.Pipeline(IRFFT(nfft), Window(winfun),
OverlapAdd(nwin, nhop))
Нашел еще один STFT, но нет соответствующей обратной функции:
http://code.google.com/p/pytfd/source/browse/trunk/pytfd/stft. py
def stft(x, w, L=None):
...
return X_stft