python实现 stft_Python中的可逆STFT和ISTFT

这里是我的Python代码,简化为这个答案:

import scipy, pylab

def stft(x, fs, framesz, hop):

framesamp = int(framesz*fs)

hopsamp = int(hop*fs)

w = scipy.hanning(framesamp)

X = scipy.array([scipy.fft(w*x[i:i+framesamp])

for i in range(0, len(x)-framesamp, hopsamp)])

return X

def istft(X, fs, T, hop):

x = scipy.zeros(T*fs)

framesamp = X.shape[1]

hopsamp = int(hop*fs)

for n,i in enumerate(range(0, len(x)-framesamp, hopsamp)):

x[i:i+framesamp] += scipy.real(scipy.ifft(X[n]))

return x

笔记:

>列表解析是一个小技巧,我喜欢用来模拟numpy / scipy中的信号块处理。这就像matlab中的blkproc。而不是一个for循环,我应用一个命令(例如,fft)到列表推导内的信号的每一帧,然后scipy.array将它投射到一个二维数组。我使用它来制作谱图,色谱图,MFCC克,以及更多。

>对于这个例子,我在istft中使用一个朴素的重叠和添加方法。为了重建原始信号,顺序窗函数的和必须

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值