python实现 stft_Python中可转换的STFT和ISTFT

我对这个有点晚了,但是实现了0.19.0的scipy内置的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-grams等等。

对于这个例子,我在istft使用了天真的overlap-and-add方法。 为了重构原始信号,顺序窗口函数的和必须是恒定的,最好等于1(1.0)。 在这种情况下,我select了Hann(或汉hanning )窗口和50%的重叠ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值