Chciałbym wygładzić wykresy FFT, które uzyskuje się w 200Hz (w tej chwili przechwytuję 500 punktów), aby reprezentatywne szczyty byłyby pokazane blisko to.

To jest mój kod:

N = 500
T = 5/1000
y1 = np.array(data_Ax)
yf1 = scipy.fftpack.fft(y1)
xf1 = np.linspace(0.0, 1.0/(2.0*T), N/2)
yfft1 = 2.0/N * np.abs(yf1[:N//2])

plt.figure(figsize=(20, 3), dpi= 100, facecolor='w', edgecolor='k')
plt.plot(xf1, yfft1, 'g-', label ="FFT for Ax")
plt.xlabel('Frequency [Hz]')
plt.legend(loc=1)

Do wygładzania próbowałem tego użyć:

rft = np.fft.rfft(yfft1)
y_smooth = np.fft.irfft(rft)

Ale nie miało żadnego efektu.

Wierzę, że 200Hz jest niską częstotliwością próbkowania, a 500 pomiarów nie jest zbyt wiele, ale po prostu ma na celu powieszenie programu. Oto uzyskany wykres: Wpisz opis obrazu tutaj

Chciałbym wiedzieć:

  1. Jak wygładzić wykres?
  2. Jak usunąć szczyty w 0Hz (Filtr High Pass)?
  3. Z teoretycznego punktu widzenia, czy istnieje minimalna liczba wymogów pomiarów dla przedstawiciela wykresu FFT?

Dziękujemy za daną pomoc!

L

2
mcluka 24 czerwiec 2017, 23:10

3 odpowiedzi

Najlepsza odpowiedź

gładki wykres:

Mówiłem, czego naprawdę szukasz, zwiększa liczbę punktów. Więc po prostu określ liczbę punktów, które chcesz, aby wyglądał na gładkość.

Na przykład tutaj jest FFT o tej samej liczbie punktów, co pomiary:

n = 500
nfft = n

t = np.linspace(0, 0.1, n)
y = 0.5 + np.sin(2*np.pi*60*t)
yf = fftshift(fft(y, nfft))

f = fftshift(fftfreq(nfft, np.mean(np.diff(t))))

pyplot.plot(f, abs(yf))
pyplot.grid()
pyplot.xlim([-100, 100])

enter image description here

Jeśli zmienisz liczbę punktów FFT do 4096, tj. nfft=2**12, a następnie otrzymasz płynniejszy wykres. Wprowadź opis obrazu tutaj

usuń szczyty na 0 Hz

Jeśli wartość DC jest wszystkim, na czym zależy, po prostu odjąć średnia. Na podstawie powyższego przykładu możesz zmienić linię 5 do

yf = fftshift(fft(y - np.mean(y), nfft))

I dostajesz FFT bez pasma podstawowego. Wpisz opis obrazu tutaj

Minimalna liczba punktów

Z teoretycznego punktu widzenia, wystarczy zadowolić szybkość Nyquist. Jednak dla efektów wizualnych, odstępy częstotliwości w FFT to FS / N. Więc jeśli masz szybkość próbkowania 500 Hz i 500 punktów, odstępy wynosi 1 Hz między punktami, jeśli przepustowość wynosi 5 Hz, może to być niewystarczające, więc zwiększa liczbę punktów dla FFT przez zero wyściółki sygnału, lub Zmniejsz częstotliwość próbkowania (tak długo, jak jest powyżej Nyquist) ...

2
Gerges 24 czerwiec 2017, 21:28

Czy próbowałeś użyć filtra Gaussa modułu Scipy. Wypróbuj: HTTPS : //docs.scipy.org/doc/Scipy-0.16.1/Reference/generated/Scipy.ndimage.filters.Gaussian_Filter.html.

0
Dragon 24 czerwiec 2017, 20:21

Przede wszystkim sugerowałbym znacznie więcej niż 500 próbek. To tylko 2,5 okresów

Korzystanie z metody Welcha powinno pomóc uzyskać płynniejszy wykres.

DOC Scipy.

1
Shibe 24 czerwiec 2017, 23:12