mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Frequenzpeak detektieren


Autor: Christoph M. (mchris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennt jemand ein Verfahren ohne FFT, mit dem man die Frequenz mit der 
maximalen Amplitude in einem Spektrum finden kann?

Gibt es einen Algorithmus, der mit wenig Rechenaufwand den Frequenzpeak 
findet und dann die Frequenz tracked?

Autor: Harald W. (wilhelms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph M. schrieb:

> Kennt jemand ein Verfahren ohne FFT, mit dem man die Frequenz mit der
> maximalen Amplitude in einem Spektrum finden kann?

DFT. Der Peak muss ja nicht im vorgegebenen Frequenzraster der FFT 
liegen.

Autor: Sven B. (scummos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald W. schrieb:
> Christoph M. schrieb:
>
>> Kennt jemand ein Verfahren ohne FFT, mit dem man die Frequenz mit der
>> maximalen Amplitude in einem Spektrum finden kann?
>
> DFT. Der Peak muss ja nicht im vorgegebenen Frequenzraster der FFT
> liegen.

Hä? Was hat die Antwort mit der Frage zu tun und warum spielt es hier 
eine Rolle, ob der Peak auf das Raster passt?

Hast du denn irgendwelches Vorwissen über das Signal, also ist das nur 
ein Sinus, oder ...?

Autor: Werther (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald W. schrieb:
> Christoph M. schrieb:
>
>> Kennt jemand ein Verfahren ohne FFT, mit dem man die Frequenz mit der
>> maximalen Amplitude in einem Spektrum finden kann?
>
> DFT. Der Peak muss ja nicht im vorgegebenen Frequenzraster der FFT
> liegen.

Was ist denn das für eine lächerliche Antwort?

DFT -> Diskrete Fourier Transormation
FFT -> Fast Fourier Transformation.

https://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation

https://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation

Lesen & lernen.

Autor: Harald W. (wilhelms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven B. schrieb:
/
>> DFT. Der Peak muss ja nicht im vorgegebenen Frequenzraster der FFT
>> liegen.
>
> Hä? Was hat die Antwort mit der Frage zu tun und warum spielt es hier
> eine Rolle, ob der Peak auf das Raster passt?

Nun, wenn du mit einer FFT z.B. 8 und 16 MHz abtastest, der Peak
aber bei 13 MHz liegt, passt das irgendwie nicht.

Autor: Sven B. (scummos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald W. schrieb:
> Sven B. schrieb:
> /
>>> DFT. Der Peak muss ja nicht im vorgegebenen Frequenzraster der FFT
>>> liegen.
>>
>> Hä? Was hat die Antwort mit der Frage zu tun und warum spielt es hier
>> eine Rolle, ob der Peak auf das Raster passt?
>
> Nun, wenn du mit einer FFT z.B. 8 und 16 MHz abtastest, der Peak
> aber bei 13 MHz liegt, passt das irgendwie nicht.

Dann fittest du eine Parabel an den Peak, oder wenn du pedantisch sein 
willst die FFT deiner Fensterfunktion, und fertig. Wo die Bins der FFT 
liegen spielt eigentlich sehr selten eine Rolle.

: Bearbeitet durch User
Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Harald W. schrieb:
> DFT. Der Peak muss ja nicht im vorgegebenen Frequenzraster der FFT
> liegen.

Ich musste da erstmal nachlesen. Meinst Du das ernst?

"Die Verarbeitungszeit für einen Algorithmus hängt wesentlich von der 
Anzahl Multiplikationen ab, die ein Rechner ausführen muss. Der Aufwand 
zur Berechnung der N Spektralwerte beträgt mit der DFT ca. N2 komplexe 
Multiplikationen.

Cooley und Tukey haben 1965 die Fast Fourier Transformation entwickelt. 
Mit dem FFT Algorithmus lassen sich die N DFT-Werte mit einem Aufwand 
von ca. N·log2(N) komplexen Multiplikationen berechnen, was einer 
enormen Reduktion des Aufwands entspricht. Für eine Blocklänge von 
N=1024 zum Beispiel müssten mit der DFT ca. 1 Million Multiplikationen 
berechnet werden, während mit der FFT nur ca. 10’000 Multiplikationen 
anfallen.

Es gibt allerdings Anwendungen (z.B. Detektion DTMF-Wählton), in denen 
nur wenige Spektralwerte interessieren. In diesen Anwendungen kann es 
durchaus vorteilhaft sein, mit der DFT die wenigen Spektralwerte direkt 
und nicht mit der FFT alle möglichen DFT-Werte zu berechnen. Mit dem 
Görtzel-Algorithmus [2] ist es z.B. möglich, einzelne DFT-Werte X[m0]
mit IIR-Filtern 1. bzw. 2. Ordnung rekursiv zu berechnen.

Die Grundidee bei der FFT besteht darin, eine N-Punkt DFT in zwei 
N/2-Punkt DFTs aufzuteilen, eine über die geraden und eine über die 
ungeraden Abtastwerte."

So wie ich das verstehe macht DFT nur Sinn, wenn das gesuchte Frequenz 
-Band bzw. die gesuchten Frequenzen bekannt sind - oder? (O.K., ich bin 
Laie)

: Bearbeitet durch User
Autor: Christoph M. (mchris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven B.
>Hast du denn irgendwelches Vorwissen über das Signal, also ist das nur
>ein Sinus, oder ...?

Es geht mir erst mal ganz allgemein um einen Algorithmus. Irgendwo hier 
im Forum hat mal einer Frequenzdetekion im Spektrum mit Nulldruchgängen 
gemacht. Es könnte sein, dass man über ein Histogramm der 
Nulldurchgangsabstände etwas über die häufigste Frequenz aussagen kann.
Eine andere Idee wäre vielleicht, eine Peak mit einer FLL zu tracken.

Autor: Joe G. (feinmechaniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph M. schrieb:
> Frequenzdetekion im Spektrum mit Nulldruchgängen gemacht.

Das sieht mir so aus, also ob du in einem Zeitsignal eine Frequenz 
erkennen möchtest. Dazu ist u.a. das Goertzelfilter geeignet.

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe G. schrieb:
> Christoph M. schrieb:
>> Frequenzdetekion im Spektrum mit Nulldruchgängen gemacht.
>
> Das sieht mir so aus, also ob du in einem Zeitsignal eine Frequenz
> erkennen möchtest. Dazu ist u.a. das Goertzelfilter geeignet.

Wenn man weiß welche ja. So wie ich das verstanden habe wird hier jedoch 
die "stärkste" Frequenz im Spektrum gesucht.

Autor: Rechenfreak (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn sich die Frequenz, die maximal ist, nur langsam ändert, reicht ein 
Görzel mit einengenden Bändern, um diese zu finden und zu verfolgen. 
Habe ich schon gemacht.

Autor: Christoph M. (mchris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rechenfreak (Gast)
>Wenn sich die Frequenz, die maximal ist, nur langsam ändert, reicht ein
>Görzel mit einengenden Bändern, um diese zu finden und zu verfolgen.
>Habe ich schon gemacht.

Das ist eine interessante Idee. Den Görtzelfilter als Bandpass nutzen 
und dann einfach im Ergebnis die Nulldurchgänge messen. Für sehr kleine 
Frequenzänderungen vermutlich geeignet.

Mal sehen, ob es noch andere Verfahren für größere Frequenzbereiche 
gibt.

Autor: Martin S. (strubi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph M. schrieb:
> Gibt es einen Algorithmus, der mit wenig Rechenaufwand den Frequenzpeak
> findet und dann die Frequenz tracked?

Ja, der Goertzel wurde ja schon erwähnt, wenn du mal auf die Frequenz 
"gelockt" hast, kannst du die Verstimmung per Phase nachtracken, 
vorausgesetzt andere Signalkomponenten sauen nicht mit Artefakten rein.
Für so adaptive Sachen sind auch sliding DFT-Ansätze interessant, die 
kannst du soweit mit Bandpässen kombinieren, dass dir eben nicht mehr 
viel reinsaut, wenn du mal weisst, wonach du suchst.
Die Sliding-DFT kostet nicht immens Rechenzeit, also hier von "DFT" 
nicht abschrecken lassen :-)

Autor: Raymund Hofmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre eine Autokorrelation? Also im Frequenzbereich wird ja damit 
quasi jede Frequenz vom Betrag quadriert.
In zweiter Ordnung wäre das jede Frequenz vom Betrag hoch 4.
Also ein Unterschied vom Faktor 2 wird zu 16.

Der Fehler bei simpler Nulldurchgangs-Periodenmessung wird damit schon 
deutlich eingegrenzt.

Die Autokorrelation muss natürlich über mindestens so viele Samples wie 
die Periode der niedrigsten Frequenz im Signal um die es geht laufen.

Und Autokorrelation ist ab einer gewissen Samplezahl so ca. ab 64 wohl 
effektiver mit FFT realisiert.

Ohne genau zu wissen was eigentlich erreicht werden soll, ist es wohl 
schwer etwas "besseres" als eine fft zu finden.

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.

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