具有信号傅立叶变换的不同Python输出

时间:2017-08-08 20:06:38

标签: python fft

我正在尝试在两个相同的数据样本上运行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()

1 个答案:

答案 0 :(得分:0)

您应该可以替换

result = result[::4]

result = scipy.signal.decimate(result, 4, ftype='fir')

我为滤波器类型指定了'fir',因为FIR滤波器具有线性相位延迟。在您的情况下,这可能会也可能不重要。