Результаты функции Numpy FFT неверны для преобразования временной области в данные частотной области - PullRequest
1 голос
/ 06 июля 2019

У меня проблема с результатами, полученными при запуске наборов кодов кодовых функций FFT в моем питоне 3.7.

Проблема в том, что графики зависимости частоты от амплитуды и частоты от плотности спектра мощности неверны - судя по форме и виду моих необработанных данных:

Raw Data

Как видно из графика необработанных данных, я ожидаю, что частота. против амплитуды и частоты. графики PSD не должны выглядеть так, как сейчас:

Current results

К вашему сведению, длина моих необработанных данных составляет 4096, которые были приняты в течение 5,7 часов. Таким образом, это означает, что одна точка данных берется за ~ 5 секунд.

Как исправить мой код, чтобы получить правильные результаты моего анализа FFT?

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from numpy.fft import fft, fftfreq, ifft, rfft

file = "C:\work\Data_2019-01-03_16-19-49.txt"

df = pd.read_csv(file,skiprows = (0,2), delimiter='\t')

data1_name = "CH9CC05"
data1 = df[data1_name].values
n = data1.size
y= data1

fft_vals = fft(y,n)
freqs = fftfreq(n)
mask = freqs>=0
fft_theo = 1/n* np.abs(fft_vals)
psd = 1/n*(np.abs(fft_vals)**2)

plt.figure(1)
plt.plot(y, label= data1_name)
plt.title(data1_name+" Raw Data")

plt.figure(2)
plt.plot(freqs[mask], fft_theo[mask], 'r')
plt.title(data1_name+" Freq vs Amplitude")
plt.show()

plt.figure(3)
plt.plot(freqs[mask], psd[mask], 'r')
plt.title(data1_name+" Freq vs PSD")
plt.show()`
...