scipy.signal的stft的第一个DFT线

时间:2018-03-26 11:42:08

标签: python scipy signal-processing dft

我手动实现了STFT。 与scipy.signal.stft的比较显示了与我的实现相同的结果,除了在开始时的额外DFT部分(t = 0)。 任何人都可以编写描述第一个DFT的脚本,我可能错过了吗?

我的信号: my stft of the signal] 1

sci.signal.stft信号: sci.signal.stft of the signal 2

代码:

def my_stft(samples, fs, wind_len_time=0.5, overlap_factor=0.5, 
                  zero_padding_factor=4):
    wind_len = int(fs * wind_len_time)
    overlap = wind_len * overlap_factor
    section_promotion = wind_len - overlap
    transform_len = wind_len * zero_padding_factor
    stft = []
    for index in np.arange(0, samples.size, section_promotion).astype(int):
        section = samples[index:index + wind_len]
        section_fft = np.abs(fft(section, n=transform_len))
        if not np.mod(section_fft.size, 2).astype(bool):
            section_fft = section_fft[:section_fft.size / 2]
        else:
            logger.debug('odd length fft') 
        stft.append(section_fft)
    time = np.arange(0, samples.size, section_promotion) / float(fs)
    freq = np.arange(section_fft.size) / float(section_fft.size) * fs / 2.0
    Freq, Time = np.meshgrid(time, freq)
    stft = np.array(stft).transpose()
    scaling = 2 / fs# onesided
    stft = stft * scaling
    return Time, Freq, stft

1 个答案:

答案 0 :(得分:0)

参数边界的定义=无(在scipy.signal.stft中)将删除第一个光谱t = 0