我最近的一个话题,据说 STFT 中的零填充可以改善它,并避免一些与循环卷积相关的事情。
这是我的 STFT Python 代码:
fftsize = 8192; overlap = 4; hop = fftsize / overlap # ie hop = 2048 here
w = scipy.hamming(fftsize) # hamming window
# x is the input signal, I assume it is already of length 2^k, ie no zero padding required for x
# STFT
x_stft = scipy.array([scipy.fft(w*x[i:i+fftsize]) for i in range(0, len(x)-fftsize, hop)])
# ISTFT
y = scipy.zeros(len(x))
for n,i in enumerate(range(0, len(x)-fftsize, hop)):
y[i:i+fftsize] += scipy.real(scipy.ifft(x_stft[n])) * w # overlap-add
如何使用此代码进行零填充?我应该扩大哪个阵列?
PS:为了简化代码,我没有对窗口进行归一化,所以为了完美重建,必须添加一个乘法常数等(这里不重要)