我要将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(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轴是频率)
答案 0 :(得分:1)
这不完美,但应该有效。它会给你最大的fft。诀窍是使用np.where
my_rand_fft = np.random.rand(20,80)
接下来是模拟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))
确保排除具有最大值的部分。如果它们处于零位,请记住,您需要添加被跳过的内容以排除它们。