Forum: Digitale Signalverarbeitung / DSP FFT von Sensordaten mittels Raspberry


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Max U. (talha74)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert

von Dergute W. (derguteweka)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 ;)
X = np.linspace(0, tmax, N)
Y = np.sin(...*X) + np.sin(...*X) + np.random.randint(0, ampl, N)

von Gustl B. (gustl_b)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.