有没有任何通用形式的short-time Fourier transform与相应的反变换一起内置到SciPy或NumPy或其他东西中?
matplotlib中有pyplotspecgram
函数,它调用ax.specgram()
,它调用mlab.specgram()
,它调用^{
#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.
但是
This is a helper function that implements the commonality between the 204 #psd, csd, and spectrogram. It is NOT meant to be used outside of mlab
不过,我不确定这是否可以用于STFT和ISTFT。还有什么,或者我应该翻译一些像these MATLAB functions这样的东西吗?
我知道如何编写自己的特别实现;我只是在寻找一些功能齐全的东西,它可以处理不同的窗口功能(但有一个合理的默认值),完全可逆的可乐窗口(istft(stft(x))==x
),由多人测试,没有一个错误关闭,处理好结束和零填充,实时输入的快速RFFT实现等
我来晚了一点,但我意识到scipy在0.19.0中内置了istft函数
这是我使用的STFT代码。这里的STFT+ISTFT给出了完美的重建(即使是第一帧)。我稍微修改了Steve Tjoa给出的代码:这里重构信号的大小与输入信号的大小相同。
下面是我的Python代码,针对这个答案进行了简化:
注:
blkproc
。与for
循环不同,我对列表理解中的每个信号帧应用一个命令(例如fft
),然后scipy.array
将其转换为2D数组。我用它来制作光谱图,色度图,MFCC图等等。istft
中使用了一个简单的overlap和add方法。为了重建原始信号,序列窗口函数的和必须是常数,最好等于单位(1.0)。在本例中,我选择了Hann(或hanning
)窗口和一个50%重叠的窗口,它工作得很好。有关详细信息,请参见this discussion。测试:
相关问题 更多 >
编程相关推荐