Обратимый STFT и ISTFT в Python

Есть ли какая-либо форма общего назначения кратковременного преобразования Фурье с соответствующим обратным преобразованием, встроенным в 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 для реального входа, и т.д.

49
задан endolith 29 May 2014 в 03:30
поделиться

2 ответа

Я также нашел это на 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))
0
ответ дан 7 November 2019 в 11:48
поделиться

Нашел еще один STFT, но нет соответствующей обратной функции:

http://code.google.com/p/pytfd/source/browse/trunk/pytfd/stft. py

def stft(x, w, L=None):
    ...
    return X_stft
  • w - оконная функция как массив
  • L - перекрытие, в образцах
1
ответ дан 7 November 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: