我手动实现了STFT。 与scipy.signal.stft的比较显示了与我的实现相同的结果,除了在开始时的额外DFT部分(t = 0)。 任何人都可以编写描述第一个DFT的脚本,我可能错过了吗?
我的信号: ] 1
sci.signal.stft信号: 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
答案 0 :(得分:0)
参数边界的定义=无(在scipy.signal.stft中)将删除第一个光谱t = 0