FFT an einer CSV-Datei

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
PhlppSchlz
User
Beiträge: 8
Registriert: Dienstag 25. Februar 2020, 08:47

Ich versuche mich gerade an einer Noise-Reduktion mit einem FFT. Mein Sensor ist ein MPU6050 und um "Laborwerte" zu erzeugen habe ich jedes mal verschieden frequente Töne in der unmittelbaren Nähe zum Sensor abgespielt. Sensor und Smartphone lagen fixiert auf der selben Tischplatte. Macht eventuell mein Versuchsaufbau schon legitime Ergebnisse unmöglich? Jedes mal 60000 Messungen in 60 Sekunden. Bei 400 Hz erhalte ich folgendes Ergebnis:
Bild

Den Code habe ich aus einem Tutorial und an meine Anforderungen angepasst. Die Theorie habe ich verstanden denke ich, aber ob der Code so stimmt ist mir nicht so klar. Ich weiß man kommentiert Codes eigentlich nicht so, aber ich habe es am Anfang gebraucht um zu verstehen was wo passiert. Der Code folgt unter diesem Abschnitt. Ich habe bei jeder Messung dieses "Grundrauschen" bei 15 Hz, aber kann das ein Ergebnis sein? Dann müssten doch diese Messfehler periodisch sein. Und ob ich die beiden Auschläge bei 390 Hz und 410 Hz als Erfolg verbuchen kann ist mir auch unsicher.

Code: Alles auswählen

import matplotlib.pyplot as plt
from scipy.fftpack import fft
import numpy as np
import pandas as pd


Fs = 1000                       # Hz Sampling Frequency
t = np.arange(0,60,1/Fs)


data = pd.read_csv('D:\Python\MessungenLabor\Daten7.csv', sep=',', usecols=["Messung","ZBeschleunigung"])

x = data.ZBeschleunigung.values
x = x - np.mean(x)

plt.subplot(2,1,1)
plt.plot(t,x); plt.title('Beschleunigungssensor Daten');
plt.xlabel('Time(s)'); plt.ylabel('Amplitude in g')


# generate frequency axis
n = np.size(t)
fr = (Fs/2)*np.linspace(0, 1, int(n/2))

#compute FFT
X = fft(x)
X_m = (2/n)*abs(X[0:int(n/2)])

plt.subplot(2,1,2)
plt.plot(fr, X_m)
plt.tight_layout()

plt.show()
Ich hoffe ich konnte rüberbringen was meine Probleme sind. Hätte man mich vor drei Tagen gefragt was Fourier ist, hätte ich wahrscheinlich geraten ein neues Modell von Peugeot deswegen lasst ein bisschen Nachsicht walten. Vielen Dank im Vorraus. :lol:
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ob diese Frequenzen vorkommen koennen, kann dir hier keiner sagen. Wir haben "die verschiedenen Frequenzen" ja nicht abgespielt. Und wie erfasst du denn die MPU-Daten, also mit wecher Abtastfrequenz? Wenn die nicht auch 1KHz (was mit Python schon sportlich sein duerfe), dann kannst du auch keine Ergebnisse bei 1KHz erwarten. Da ist Nyquist vor.
PhlppSchlz
User
Beiträge: 8
Registriert: Dienstag 25. Februar 2020, 08:47

Ja genau, das hatte ich auch schon gelesen ich habe eine Abtastrate von 1 kHz und kann dann ja nur Frequenzen bis 499 Hz aufnehmen. Ich weiß auch, dass ihr mir nicht sagen könnt ob das alles stimmt. Ich hatte die Sorge, dass ich im Code schon grundlegende Fehler habe, die vllt. sofort auffallen. Ich habe heute neue Versuche durchgeführt, nachdem ich den Versuchsaufbau verbessert und z.B. eine Box statt nur dem Handy als Frequenzspieler verwendet habe und jetzt habe ich die richtigen Ergebnisse.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann - klingt doch super.
Antworten