如何在python中提取短时傅立叶变换(stft)数据
我将比较stft频率数据和另一个stft频率数据。我只能使用stft方法,但我不知道如何提取stft频率数据。这是我的数据如何在python中提取短时傅立叶变换(stft)数据,python,fft,spectrogram,Python,Fft,Spectrogram,我将比较stft频率数据和另一个stft频率数据。我只能使用stft方法,但我不知道如何提取stft频率数据。这是我的数据 from scipy import signal import matplotlib.pyplot as plt import numpy as np # Data load data = open('data.txt', 'r').read().split('\n') time = [] temperature = [] for i in range(0, len(da
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
# Data load
data = open('data.txt', 'r').read().split('\n')
time = []
temperature = []
for i in range(0, len(data)):
time.append(float(data[i][0:8]))
temperature.append(float(data[i][9:len(data[i])]))
fs = len(time)/(max(time)-min(time)) # Sampling frequency
# FFT
f, t, Zxx = signal.stft(temperature, fs)
plt.pcolormesh(t, 2*np.pi*1.8*f/1e3, np.abs(Zxx), vmin=0, vmax=100)
如何提取黄线数据?x轴是时间/y轴是频率这并不完美,但应该可以工作。它将为您提供fft的最大值。诀窍是使用np.where 下一步是模拟这样一个事实,即STFT在低频率下包含大量常量值。如果我错了,请相应地更改后面的代码
my_rand_fft[-1,:]=1
暴力方法:
pos_of_max=[]
for n in range(np.shape(my_rand_fft)[1]):
pos_of_max.append((0,np.where(my_rand_fft[0:-1,n]==np.max(my_rand_fft[0:-1,n])[0])))
更优雅的解决方案
pos_of_max=np.where(my_rand_fft==np.max(my_rand_fft[0:-1,:], axis=0))
确保排除具有最大值的零件。如果它们处于零位置,请记住,您需要添加跳过的内容以排除它们
pos_of_max=np.where(my_rand_fft==np.max(my_rand_fft[0:-1,:], axis=0))