У меня проблема с результатами, полученными при запуске наборов кодов кодовых функций FFT в моем питоне 3.7.
Проблема в том, что графики зависимости частоты от амплитуды и частоты от плотности спектра мощности неверны - судя по форме и виду моих необработанных данных:
Как видно из графика необработанных данных, я ожидаю, что частота. против амплитуды и частоты. графики PSD не должны выглядеть так, как сейчас:
К вашему сведению, длина моих необработанных данных составляет 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()`