是否有可能从 tf.signal.frame 后跟 tf.signal.rfft 和 librosa.stft 获得完全相同的结果?

问题描述 投票:0回答:1

我通过使用 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)

但这两种方法的结果是不同的。我怎样才能让它一样

tensorflow fft frame librosa
1个回答
0
投票

为了使它相同,有两种方法

  1. 在进行 rfft 之前将

    hann_windows
    应用于框架

    w = tf.signal.hann_window(512, periodic=True) 
    

  2. window
    中的
    librosa.stft
    设置为
    rect

    librosa.stft(sig,n_fft=512,hop_length=128,center=False,window='rect') 
    
© www.soinside.com 2019 - 2024. All rights reserved.