Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT von Sensordaten mittels Raspberry


von Max U. (talha74)


Lesenswert?

Guten Tag,
ist es möglich, auf die mit einem beispielsweise Beschleunigungssensor 
aufgenommenen Schwingungen eines Geräts/einer Maschine eine 
Fouriertransformation mit dem Raspberry PI anzuwenden? Der Sensor ist 
ebenfalls am Raspberry angeschlossen.
Oder brauche ich da externe Tools, die dann die Datenverarbeitung 
durchführen?


Viele Grüße
Max

von Krabat (Gast)


Lesenswert?


von Dergute W. (derguteweka)


Lesenswert?

Moin,

Klar, warum soll das nicht gehen? Je nach deinen Anforderungen koennt' 
hoechstens die Rechnerei zu lange dauern, aber das weisst nur du, 
wieviel Zeit und Daten du da hast.

Gruss
WK

von Sven B. (scummos)


Lesenswert?

Definiere "externes Tool"? Natürlich musst du Software schreiben oder 
installieren, die deine Sensordaten entgegennimmt, die nötige 
Verarbeitung macht, und sie irgendwie ausgibt. Einfach den Sensor an das 
RPi stecken und dann drauf hoffen dass es auf dem Display die FFT 
anzeigt wird offensichtlich nicht klappen. ;)

von Max U. (talha74)


Lesenswert?

Sven B. schrieb:
> Definiere "externes Tool"? Natürlich musst du Software schreiben oder
> installieren, die deine Sensordaten entgegennimmt, die nötige
> Verarbeitung macht, und sie irgendwie ausgibt. Einfach den Sensor an das
> RPi stecken und dann drauf hoffen dass es auf dem Display die FFT
> anzeigt wird offensichtlich nicht klappen. ;)

Das ist mir schon bewusst. Ein Programm, welches die Daten aufnimmt habe 
ich schon. Mir stellt sich nur die Frage, wie ich die Daten dann 
„fouriertransformiere“.
An der Uni hat man das ja per Hand gemacht, und da waren ja auch 
Funktionen vorgegeben.
Aber wie sieht das denn in der Praxis nun aus? Wie kann ich auf die 
Sensordaten (+-10V) eine Fouriertransformation anwenden? (mit dem 
Raspberry)

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jenachdem was du sonst noch so vorhast: Evtl. GNU-Octave auf den Raspi 
bringen und damit operieren oder z.b. in C entsprechende Software 
schreiben, die z.b. mit dieser library: http://www.fftw.org/  arbeitet.
Oder sowas in einer anderen Sprache deiner Wahl...

Gruss
WK

von Jemand (Gast)


Lesenswert?

Max U. schrieb:
> Aber wie sieht das denn in der Praxis nun aus? Wie kann ich auf die
> Sensordaten (+-10V) eine Fouriertransformation anwenden?

Aufgabe für das Selbststudium

von Gustl B. (-gb-)


Angehängte Dateien:

Lesenswert?

Das geht wunderbar mit Python. numpy.fft.fft

Das Beispiel im Anhang erzeugt zwei Sinus Signale, überlagert diese und 
macht daraus 2^16 Abtastwerte mit 16 Bits. Davon wird dann eine FFT 
gerechnet, normiert (volle Aussteuerung sind 0 dB) und geplottet. Ein 
Signal liegt bei 5 (Hz, kHz, MHz, im Beispiel egal) mit vollem Pegel, 
steuert den ADC voll aus. Das andere Signal liegt bei der doppelten 
Frequenz, hat aber nur 1/1000 der Amplitude. Und der Peak im Spektrum 
liegt auch bei -60 dB.

: Bearbeitet durch User
von Sven B. (scummos)


Lesenswert?

Dazu müsste man wissen, in welcher Sprache du dein Tool geschrieben 
hast. Für die meisten Sprachen gibt es FFT-Bibliotheken. Wenn nicht, 
hast du die Wahl entweder selbst den Algorithmus zu implementieren oder 
eine andere Sprache zu benutzen. Python bietet sich wie bereits genannt 
für solche Aufgaben an.

von Burkhard K. (buks)


Lesenswert?

Gustl B. schrieb:
> normiert (volle Aussteuerung sind 0 dB)

Hallo Gustl, dein 0 Hz Wert (Offset) ist deutlich größer als 0 dBFS! Bin 
mit scipy.fftpack nicht vertraut - aber wäre für realwertige Signale 
nicht rfft() angebracht?

von Sven B. (scummos)


Lesenswert?

3dB größer, was vmtl ok ist?

Die zweite Hälfte des Ergebnisses schneidet das Skript in dem Plot ab, 
indem es fsample durch 2 teilt. Dann hast du gerade wieder die rfft.

Außerdem kann man noch anmerken zu dem Skript:
 - Es gibt np.fft.fftfreq zur Berechnung der Frequenzachse
 - Die Schleife zum Erzeugen des Signals, lässt sich hervorragend 
vektorisieren, dazu ist numpy doch gerade gut ;)
1
X = np.linspace(0, tmax, N)
2
Y = np.sin(...*X) + np.sin(...*X) + np.random.randint(0, ampl, N)

von Gustl B. (gustl_b)


Lesenswert?

Das mit dem 0 Hz weiß ich nicht. Danke für den Numpyhinweis. Ich 
verwende Software um Probleme zu lösen und bringe mir da nicht viel mehr 
bei. Aber vielleicht sollte ich das doch mal tun.

Aber nehmt das Skript, passt es an, optimiert es, ... dafür ist das da.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.