我正在尝试在两个相同的数据样本上运行Python STFT
(也称为短时傅里叶变换)。
但是,由于我的一个数据应用程序,我需要将其中的一部分收集到.txt
文件中。
我很困惑为什么STFT会对来自.csv
的数据起作用,而不会为来自.txt
文件的数据生成正确的输出。两者都是Panda.core.series.Series
数据类型,并且两者都具有相似幅度的值。测试条件也相同。
我尝试排查的代码是标有Code that isn't returning the expected output
的代码。任何见解或观察将不胜感激!
请注意,我有result[::4]
行,因为我必须清除每4个样本中的3个,以匹配两种数据采集方法之间的采样率。
未返回预期输出的代码:
import json
result = []
with open("C:\\Users\\Desktop\\data.txt") as file:
for line in file:
result.append(json.loads(line)[-1])
result = result[::4]
result = pd.Series(result)
f, t, Zxx = scipy.signal.stft(result, fs=500, nperseg = 1000)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.pcolormesh(t, f, np.abs(Zxx), vmin=0, vmax=0.001)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
运行正常的代码:
test = pd.read_csv("C:\\Users\\Documents\\data.csv")
test.head()
test.columns = ['TS', 'Col1', 'Col2', 'Col3', 'Col4']
f, t, Zxx = scipy.signal.stft(test['Col1'], fs=500, nperseg = 1000)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.pcolormesh(t, f, np.abs(Zxx), vmin=0, vmax=0.001)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
答案 0 :(得分:0)
您应该可以替换
result = result[::4]
带
result = scipy.signal.decimate(result, 4, ftype='fir')
我为滤波器类型指定了'fir'
,因为FIR滤波器具有线性相位延迟。在您的情况下,这可能会也可能不重要。