Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem bei FFT (https://www.delphipraxis.net/85240-problem-bei-fft.html)

3_of_8 19. Mär 2008 12:37

Re: Problem bei FFT
 
Naja, man kann das schon machen, aber je größer die Anzahl Samples bei gleichbleibender Samplingrate ist, desto ungenauer ist das Ergebnis. (Aber desto größer ist der Frequenzraum, den man abdecken kann)

SunBlack 19. Mär 2008 12:43

Re: Problem bei FFT
 
Zitat:

Zitat von sirius
je nach Abtastrate, gewünschter Genauigkeit

Wann ist die Genauigkeit höher? (FFTw braucht für ca. 13MB Mono-Wav ca. 5 Sekunden, wenn es also bei einem höherem Fenster genauer ist... ;) )
//EDIT: 3_of_8 hat die Lösung dafür schon gesagt ;). Ich werde also das Zeitfenster mal verkleinern und die Ergebnisse der Zeitfenster dann untereinander mitteln ;).

Zitat:

Zitat von sirius
dann bekommst du einen Zeitverlauf (Ein Punkt aller 20ms) für die 45Hz und einen für die 60Hz. Und dann kannst du schauen, wann welche Frequenz zu hören/sehen/.. ist.

Ich hatte gehofft, dass man irgendwo eine genauere Zahl herauszubekommen, denn ich ich habe ein Signal, bei dem immer nach einer Pause eine Freuqenz mit geringer Amplitude gefolgt von mehrerer Kurven einer anderen Frequenz mit einer höheren Amplitude. Ich brauch von der Frequenz einfach nur die Eingangsphase, also ob es zuerst nach unten geht oder nicht. Wenn ich aber immer Zeitfenster nehmen muss, werde ich es wohl irgendwie berechnen müssen, da ich es ja nicht relativ zum Ausgang brauche ;).

3_of_8 19. Mär 2008 12:47

Re: Problem bei FFT
 
Je größer die Anzahl der übergebenen Samples, desto genauer wird das Ergebnis. Je größer die Samplerate, desto ungenauer, aber desto breitbändiger wird das Ergebnis.

Das sind die zwei Möglichkeiten, die du hast.

(in meinem vorherigen Beitrag hab ich Unsinn gesagt, es ist genau umgekehrt)

Übrigens geht eine FFT bei 13 MB gar nicht. Das ist dann eine DFT, zumindest teilweise. Eine FFT kann nur angewendet werden, wenn die Sampleanzahl eine Zweierpotenz ist. Dann dauert das auch deutlich weniger als 5 Sekunden.

rawsoul 19. Mär 2008 12:57

Re: Problem bei FFT
 
[offtopic]
Zitat:

Zitat von sirius
[...] Ich bin zwar der Meinung, dass man durch Abschreiben (und gleichzeitiges darüber Nachdenken) auch ein Menge lernen kann. Aber bei so komplexen Sachen...
Hut ab, vor dem, der es schafft.

Mal ganz abgesehen davon, das der TS 17 Jahre alt ist ;) Ich bin 19 und hielt mich in Mathe immer für ziemlich gut - aber mit der FFT kann ich schonmal garnix anfangen ;)
[/offtopic]

SunBlack 19. Mär 2008 13:07

Re: Problem bei FFT
 
Zitat:

Zitat von 3_of_8
Übrigens geht eine FFT bei 13 MB gar nicht. Das ist dann eine DFT, zumindest teilweise. Eine FFT kann nur angewendet werden, wenn die Sampleanzahl eine Zweierpotenz ist. Dann dauert das auch deutlich weniger als 5 Sekunden.

Jaja, bei der FFTw kann man nur DFT machen (zu mindestens habe ich das FFT noch nicht gefunden), von daher sage ich immer FFT, wobei ich eigentlich immer an FT denke, also nicht an FFT. Da ich aber meistens nach FFT suche, rutscht mir das zweite F immer raus :mrgreen: .

Btw: Es gibt bei FFTw vorwärts und rückwärts, gibt es da einen Unterschied? (bei gleichen Eingangswerten kommt immer das gleiche raus).

3_of_8 19. Mär 2008 13:14

Re: Problem bei FFT
 
Was ist eine FFTw? O_o

Also, ich sags nochmal so: Eine FFT ist ein Spezialfall einer DFT, die auf dem Divide and Conquer-Verfahren beruht (das kennen wir aus der Schönhagen-Strasse-Matrixmultiplikation oder dem Quicksort-Algorithmus). Divide-and-Conquer-Algorithmen funktionieren nur mit Zweierpotenzen. Ich hab das ganze in dem Fall so geschrieben, dass die FFT solange wie möglich angewandt wird (also so oft wie möglich durch zwei geteilt wird) und dann DFTs ausgeführt werden. Bei Zahlen, die mit 2 teilerfremd sind, muss also immer eine DFT angewandt werden. Das ist der worst-case. Bei Zweierpotenzen kann komplett eine FFT angewandt werden, wodurch man eine Laufzeit von, ich glaube log n oder n log n oder sowas in der Art hat. Also wenn irgendwie möglich, sollte man diese Funktion immer mit Zweierpotenzen aufrufen.

SunBlack 19. Mär 2008 13:26

Re: Problem bei FFT
 
Zitat:

Zitat von 3_of_8
Was ist eine FFTw? O_o

FFTw = "Fastest Fourier Transform in the West". Vlt. kommt daher meine Gewohnheit mit den 2 F's ;).

sirius 19. Mär 2008 14:20

Re: Problem bei FFT
 
Zitat:

Zitat von 3_of_8
Bei Zahlen, die mit 2 teilerfremd sind, muss also immer eine DFT angewandt werden. Das ist der worst-case.

Es gibt für andere Potenzen noch andere Algorithmen als die FFT, welche auch schneller sind als die DFT. Aber das ist hier egal.

Zitat:

Zitat von SunBlack
Wann ist die Genauigkeit höher?

Nie :mrgreen:
(Wie ich schon weiter oben schrieb) Eine DFT ist der Einstieg in die Signalanalyse. Das ist dasselbe, wie, dass du Lesen lernen musst um Goethe interpretieren zu können. Die Fouriertransformation ist kein Allheilmittel. Du musst dir überlegen, was du willst, und dann deine DFT danach ausrichten und danach geht es erst richtig los. Weitere Berechnungen müssen folgen. Das hast du ja schon selber erkannt:
Zitat:

Zitat von SunBlack
Wenn ich aber immer Zeitfenster nehmen muss, werde ich es wohl irgendwie berechnen müssen, da ich es ja nicht relativ zum Ausgang brauche

Und genau so eine Analyse muss der DFT folgen. Die DFT kann einfach nicht mehr.

Eine DFT liefert nur eine exakte Analyse, wenn du ein Signal hast, dass entsprechend seiner Abtastwerte auch nur bestimmte Frequenzanteile beinhaltet und dann auch so, dass immer vollständige Perioden jedes Frequenzanteils im betrachteten Zeitfenster enthalten sind.

gammatester 19. Mär 2008 14:38

Re: Problem bei FFT
 
Zitat:

Zitat von 3_of_8
Was ist eine FFTw? O_o

Also, ich sags nochmal so: Eine FFT ist ein Spezialfall einer DFT, die auf dem Divide and Conquer-Verfahren beruht (das kennen wir aus der Schönhagen-Strasse-Matrixmultiplikation oder dem Quicksort-Algorithmus). Divide-and-Conquer-Algorithmen funktionieren nur mit Zweierpotenzen.

Wie kommst Du darauf? Divide-and-Conquer geht natürlich auch mit 3, 5 usw. ZB bei den Multiplikationsalgorithmen: 2 -> Karatsuba, 3 usw -> Toom-Cook

Zitat:

Zitat von 3_of_8
Bei Zahlen, die mit 2 teilerfremd sind, muss also immer eine DFT angewandt werden.

Auch das ist nicht richtig, bzw nicht mehr richtig. Die ersten FFTs arbeiteten mit 2er-Potenzen. Inwischen gibt's FFTs auch für andere Samplegrößen. Hier eine Delphi-Implementation: http://www.simdesign.nl/fft.html
Zitat:

This library provides a free Delphi implementation (source included) for a complex Fast Fourier Transform (FFT) on an arbitrary length data series.
Gruß Gammatester

3_of_8 19. Mär 2008 14:46

Re: Problem bei FFT
 
Okay, dann streich das "alle" und ersetze es durch "meine". ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.
Seite 5 von 6   « Erste     345 6      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz