是否有任何通用形式的短时傅里叶变换,其中相应的逆变换内置于SciPy或NumPy或其他任何东西?
specgram在matplotlib中有pyplot 函数,它调用ax.specgram()哪些调用mlab.specgram()调用_spectral_helper():
Run Code Online (Sandbox Code Playgroud)#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 windows(istft(stft(x))==x)完全颠倒,由多人测试,没有一个一个错误,处理结束和零填充,实际输入的快速RFFT实现等.
我有一个很长的信号(454912个样本),我想计算出50Hz的估计量.速度比精度更重要.预计50Hz的量随时间波动.该值必须代表整个记录,例如平均值.
从EEG电极记录信号.当EEG电极与头皮接触不良时,信号中会有大量50Hz的电力线噪声.我想丢弃EEG电极的所有数据,这些数据的噪声比其他电极高50Hz.
解决问题并不难.从FFT到Welch方法的任何方法都可用于估算功率谱:
import numpy as np
from scipy.signal import welch
# generate an example signal
sfreq = 128.
nsamples = 454912
time = np.arange(nsamples) / sfreq
x = np.sin(2 * np.pi * 50 * time) + np.random.randn(nsamples)
# apply Welch' method to the problem
fs, ps = welch(x, sfreq)
print 'Amount of 50Hz:', ps[np.searchsorted(fs, 50)]
Run Code Online (Sandbox Code Playgroud)
然而,在这里计算所有频率的功率似乎是不必要的,我觉得有一个更有效的解决方案.计算单个DFFT步骤的东西是什么?用一些sinoid小波卷积?