我通过使用 tf.signal.frame 初始构建音频信号并使用 tf.signal.rfft 对每个帧应用实值快速傅立叶变换来计算 stft。
代码看起来像:
audio = 'fileid_0.wav'
sig, rate =librosa.core.load(audio, 16000,mono=True)
blockLen = 512
block_shift = 128
frames = tf.signal.frame(sig, blockLen, block_shift)
stft_dat = tf.signal.rfft(frames)
然后我用librosa计算了stft
stft_librosa = librosa.stft(sig,n_fft=512, hop_length=128, win_length=512,center=False)
但这两种方法的结果是不同的。我怎样才能让它一样
为了使它相同,有两种方法
在进行 rfft 之前将
hann_windows
应用于框架
w = tf.signal.hann_window(512, periodic=True)
或
将
window
中的librosa.stft
设置为rect
librosa.stft(sig,n_fft=512,hop_length=128,center=False,window='rect')