Tach,
Grundlagen Fragen zur FFT:
Meine "N"s bestimmen ja in wie viele "Spalten" mein Spektrum zerlegt
wird.
Nehmen wir an mein Signal wäre Sprache und ich räume ihm eine Bandbreite
von 2.8 kHz ein. Das maximale N was mein DSP zulässt ist 255.
Ergo steht eine "Spalte" für ca. 11 Hz.
Bis hier hin: richtig gedacht oder zurück auf los?
Reichen mir 255 * 11Hz um das Signal akkustisch annehmbar wieder zurück
zu wandeln und aus zu geben? Wo liegt die Grenze der "Spaltenbreite" und
wie wird das Fachtechnisch genannt?
Entsprechen die "Spalten" dem was man unter "Harmonischen" versteht?
Wenn ja wären meine obrigen annahmen Falsch. Wie würde sich die
Variation von N dann bemerkbar machen?
Frage zur Breite des "Messfensters".
Wenn die Länge des Fensters kürzer ist als die tiefste zu messende
Frequenz, wird diese dann noch erkannt oder liegt hier die untere
Frequenz für mein kleinstes N?
Gruß und Danke
Florian
Hallo,
Nehmen wir an mein Signal wäre Sprache und ich räume ihm eine Bandbreite
von 2.8 kHz ein. Das maximale N was mein DSP zulässt ist 255.
Ergo steht eine "Spalte" für ca. 11 Hz.
Bis hier hin: richtig gedacht oder zurück auf los?
--> Fast richtig, da das Spektrum ab der Mitte gespiegelt ist, hast Du
effektiv nur halb so viele "bins"
Reichen mir 255 * 11Hz um das Signal akkustisch annehmbar wieder zurück
zu wandeln und aus zu geben? Wo liegt die Grenze der "Spaltenbreite" und
wie wird das Fachtechnisch genannt?
--> Da hab ich leider keine Erfahrung...in der Theorie klappt das
verlustfreie umwandeln nur bei unendlich langen periodischen
Signalen...Sprachsignale sind leider nicht periodisch.
Entsprechen die "Spalten" dem was man unter "Harmonischen" versteht?
Wenn ja wären meine obrigen annahmen Falsch. Wie würde sich die
Variation von N dann bemerkbar machen?
--> Du hast die sog. Grundfrequenz und die harmonischen, also mehrfache
der Grundfrequenz. Die Variation von N verändert die
"Frequenzauflösung". Das heißt bei größerem N ist der Abstand zwischen
den Bins kleiner.
z.B. f_s = 10 Hz N=2 f_s = 10Hz N=4
delta_f = 5 Hz delta_f = 2,5 Hz
Außerdem steigt bei höheren N auch der Rechen- und Speicheraufwand.
Frage zur Breite des "Messfensters".
Wenn die Länge des Fensters kürzer ist als die tiefste zu messende
Frequenz, wird diese dann noch erkannt oder liegt hier die untere
Frequenz für mein kleinstes N?
--> Die Messfensterlänge ist von der Abtastfrequenz deines ADC und der
Anzahl der Samples N abhängig. Fensterlänge= N* 1/f_abtast. Alles was
unter der Grundfrequenz (der kleinsten EXAKT darstellbaren Frequenz)
liegt, wird auf den Gleichanteil, sowie die Grundfrequenz aufgeteilt. Du
kannst mit dem Ergebnis dann nur aussagen, dass die Transformierte
Frequenz irgendwo zwischen 0 und Grundfrequenz liegt.
Kommmst Du an Bücher ran? Unibibliothek oder ähnliches?
Würd dir folgendes empfehlen: FFT für Fußgänger. Der Autor macht
manchmal zu wenig zwischenschritte, aber mit ein bisschen Hirnschmalz
kann man das kompensieren ;-)
Florian H. wrote:
> Reichen mir 255 * 11Hz um das Signal akkustisch annehmbar wieder zurück> zu wandeln und aus zu geben? Wo liegt die Grenze der "Spaltenbreite" und> wie wird das Fachtechnisch genannt?
Durch die DFT/FFT verlierst du keine Informationen. Wenn dein Signal 256
Samples lang ist, dann kannst du es aus einer 256-Punkt-FFT wieder
perfekt rekonstruieren. Wenn dein Signal laenger als 256 Samples ist,
dann kannst du es in Bloecke aufteilen, die FFTs auf die Bloecke
anwenden, und aus diesen FFT-Bloecken wieder das Originalsignal
wiederherstellen. Nennt sich Overlap-Add-Methode oder DFT-Filterbank. In
der Realitaet ist es ein bisschen komplizierter, es gibt nicht umsonst
ganze Buecher zu dem Thema. Z.B.:
http://ccrma.stanford.edu/~jos/sasp/sasp.html
Entschuldige, aber man kann beispielsweise ein Rechtecksignal wegen des
Gibb'schen Überschwingers nie wieder perfekt rekonstruieren ;-)
Theoretisch bräuchte man unendlich viele Harmonische für die
Rekonstruktion. Die Abweichung des rekonstruierten Rechtecksignals geht
gegen einen bestimmten Wert der nicht Null ist.
Allgemein gilt: Je unstetiger das Ausgangssignal, desto stärker ist die
Abweichung des rekonstruierten Signals.
Bei stetigen Verläufen dagegen ist die Rekonstruktion besser möglich. Je
mehr der Verlauf einem Sinus ähnelt, desto besser das Ergebnis.
Gruß
Es geht doch um zeitdiskrete Signale, da gibt es kein stetig oder
unstetig. Egal was du in die FFT reinsteckst, nach der IFFT kommt wieder
das selbe raus.
Nochmal, es geht um zeitdiskrete Signale, da gibt es kein stetig oder
unstetig. Ein zeitdiskretes, periodisches Signal mit N Freiheitsgraden
wird durch durch ein diskretes, periodisches Spektrum mit N
Freiheitsgraden vollstaendig beschrieben. Mit der DFT kann man zwischen
diesen Darstellungen transformieren, nichts weiter.
Wenn du das Signal in den Frequenzbereich transformierst, das Spektrum
abschneidest, und es wieder zurueck transformierst, DANN tritt der
Effekt auf den du beschrieben hast (Gibbs-Effekt). Die DFT trifft aber
keine Schuld.
Ich störe den kleinen Diskurs nur ungerne. ;)
Zum Test habe ich mal in Excel (kein MatLab greifbar) einen Sinus
gebastelt und dessen Werte durch die FFT gejagt.
Folgendes Szenario:
Der Sinus hat 128 Werte und schwingt in diesem Zeitraum 4 mal mit voller
Peroide.
Nach der FFT habe ich die Werte durch 2 geteilt und lasse mir nur die
Hälfte der Werte anzeigen. (Wegen Spiegelung ab dem 64 Wert)
Nun tritt bei "Spalte" 5 ein Maximum auf, mit leichten Erhöhungen in den
Werten drum rum.
Meine Überlegung ist nun die: Nehmen wir an das ein Sample 1 ms
entspricht. Dann ist mein Fenster 128ms oder 0.128 Sekunden lang.
1/0,128 = 7,8125.
Das müsste doch dann die Grundfreuqenz sein, oder?
Alle weiteren N sind Vielfache dieser GF (die Harmonischen). Also müßte
5*7,8125 = 39 HZ doch der Frequenz meines Sinus entsprechen...
Nur wenn ich 0.128 durch 4 Teile und 1 durch das Ergebnis dividiere,
erhalten ich 31,25 Hz für meinen Sinus...
Mache ich einen Denkfehler?
Ok...
Ich habe mir die Excel Sache noch mal angesehen. Meine Datenreihe für
den Sinus beginnt bei 0 und hat dort den Wert 0. Mein Maximum rutscht
natürlich auf 4 wenn ich diesen ersten Wert weglasse. Logisch... Nur
warum darf ich den nicht mit zählen... Ah ok... ich ahne es...
Ok, dann müsste das ja beliebig gut funzen...
Werde morgen mal weiter testen und die Excel Datei rein stellen wenn
Interesse besteht.
Nacht ;)
Florian
Ääääääääääääääääähm...
Kann es sein das mein N0, also mein erstes N der von Marius weiter oben
erwähnte Gleichanteil ist?! :D
Also wäre N1 meine Grundfrequenz?
Florian
Andreas Schwarz wrote:
> Es geht doch um zeitdiskrete Signale, da gibt es kein stetig oder> unstetig. Egal was du in die FFT reinsteckst, nach der IFFT kommt wieder> das selbe raus.
Wenn dein Signal perfekt bandbegrenzt ist, dann ja. Wenn nicht, dann
bekommst du garantiert nicht das selbe Signal zurück (Leakage ist bei
einer zeitbegrenzten, diskreten FT immer vorhanden). In der Praxis kann
und muss man diese Abbweichungen jedoch vernachlässigen.
http://www.diru-beze.de/signale/skripte/SuS_SS05/fft-dft.pdf
Florian H. wrote:
> Ääääääääääääääääähm...> Kann es sein das mein N0, also mein erstes N der von Marius weiter oben> erwähnte Gleichanteil ist?! :D> Also wäre N1 meine Grundfrequenz?>> Florian
In der Tat, n0 ist dein Gleichanteil (f = 0). Die erste natürliche
Frequenz ist bei n1 zu finden.
Die DFT ist eine orthogonale Transformation von einem N-dimensionalen
Vektor in einen N-dimensionalen Vektor, dabei kann nichts verloren
gehen. Was bei der Abtastung passiert ist schon wieder eine ganz andere
Sache.
Hmmm....dann erkläre mir bitte wie ich aus einem Signal, welches
(beispielsweise) knapp unter der Grundfrequenz liegt hin- und
zurücktransformiere, so dass das Signal wie vorher aussieht...
;-)
Ok, angenommen die Frequenz meines Signals ist Grundfrequenz/2...
FFT --> Amplitude des Signals wird zu gleichen Teilen auf Gleichanteil
und
Grundfrequenz aufgeteilt...
IFFT--> Ich bekomme einen um den Gleichanteil verschobene Schwingung mit
Frequenz = Grundfrequenz
Wenn ich da einen Denkfehler habe, klär mich bitte auf.
Ich danke im Voraus
Marius wrote:
> Ok, angenommen die Frequenz meines Signals ist Grundfrequenz/2...>> FFT --> Amplitude des Signals wird zu gleichen Teilen auf Gleichanteil> und Grundfrequenz aufgeteilt...
Da ist der Denkfehler. Wenn das Signal ein Sinus mit der halben
Grundfrequenz ist, dann sieht die DFT nur eine halbe Periode des Sinus.
Wenn du dir die periodisch fortgesetzt vorstellst, dann ist das kein
Sinus mehr, sondern etwas das noch diverse andere Frequenzanteile
enthaelt. Darum bekommst du ein "verschmiertes" Spektrum (genauer, ein
mit dem Spektrum des Rechteckfensters gefaltetes). Das stoert die IDFT
aber nicht; solange du an dem Spektrum nichts aenderst kommt nach der
Ruecktransformation wieder exakt das selbe heraus.
Von der Seite stimmts...aber mein Signal, mit Grundfrequenz/2 wird nicht
korrekt dargestellt...darauf will ich hinaus. Immer wenn eine Frequenz
zwischen den Vielfachen "erwischt" wird, kommt ein falsches Ergebnis
raus...Stichwort: leakage
Was ist "falsch"? Dass das Ergebnis der DFT nicht notwendigerweise
genauso aussieht wie das Spektrum des kontinuierlichen Signals aus dem
du das Stueck fuer die DFT ausgeschnitten hast sollte klar sein. Das
DFT-Spektrum kann nur das darstellen was du reinsteckst, nicht mehr.
Hmmm....dann erkläre mir bitte wie ich aus einem Signal, welches
(beispielsweise) knapp unter der Grundfrequenz liegt hin- und
zurücktransformiere, so dass das Signal wie vorher aussieht...
;-)
-> Wenn ein Signal knapp unter der Grundfrequenz liegt, dann reicht der
Beobachtungszeitraum gar nicht aus, um diese Frequenz vollständig zu
erfassen.
Bsp: fs = 500. N = 6550.
Grundfrequenz = fs/6550 = 0,076
Beobachtungszeitraum = 1/0.076 = 13
Das heisst du musst mindestens 13 Sekunden beobachten, um diese Frequenz
(0,076Hz) vollständig zu erfassen.
Sollte nun die Frequenz unter der Grundfrequenz liegen, heisst das die
Frequenz wurde nicht vollständig erfasst und kann demzufolge auch nicht
rekonstruiert werden.
Bsp. Grundfrequenz = 0,05Hz
Beobachtungszeitraum = 1/0,05Hz = 20
An einem Sinus sieht man die Auswirkung dann. Der Sinus wird mitten in
seiner Schwingung abgeschnitten. Diese Fensterung kann man durch eine
Multiplikation mit einem Rechtecksignal(obwohl es das ja gar nicht
gibt;)) ausdrücken. Das heisst im Frequ-Bereich ist das eine Faltung...
Eine weitere Erklärung ist: Bei der DFT wird ein Signal im Zeitbereich
periodifiziert. Das geschieht durch das diskrete Spektrum (Abtastung
führt zu Periodifizierung im jeweils anderen Bereich). Das heisst, das
Signal was man vermeintlich zur Transformation übergibt ist nicht das
Signal. Die meisten Anwender vergessen einfach den Sachverhalt, dass im
Frequenzbereich ebenfalls ein abgetastetes also diskretes Signal steht.
Deshalb sollte man immer darauf achten, dass das Zeitsignal
periodifizierbar ist ohne Sprünge zu erzeugen.
Um auf das Beispiel mit der nicht vollständig erfassten Frequenz
zurückzukommen:
Es bedeutet ganz einfach, dass der Sinus mitten in der Periode
abgeschnitten wurde, durch die Periodifizierung aber ein Sprung (also
zusätzliche Frequenzen) erzeugt wurden. Wenn man den
Beobachtungszeitraum nun ausdehnt, um diese Frequenz genau zu erfassen,
dann erhält man auch sein Originalsignal wieder. Dasselbe tritt auf,
wenn man eine Sinushalbwelle transformiert. Auch hier wird durch die
Periodifizierung ein Sprung erzeugt.
Man darf nie den Fehler machen und Zeit- und Frequenzbereich getrennt
betrachten. Sie gehören IMMER zusammen.
Noch etwas zu unstetigen Signalen, die ein Voredner erwähnt hat:
Ein unstetiges Signal gibt es eigentlich nur im kontinuierlichen Fall.
Und da verletzt es eine Bedingung, um überhaupt mit FT transformiert
werden zu dürfen.
Jan wrote:
> Hmmm....dann erkläre mir bitte wie ich aus einem Signal, welches> (beispielsweise) knapp unter der Grundfrequenz liegt hin- und> zurücktransformiere, so dass das Signal wie vorher aussieht...> ;-)>> -> Wenn ein Signal knapp unter der Grundfrequenz liegt, dann reicht der> Beobachtungszeitraum gar nicht aus, um diese Frequenz vollständig zu> erfassen.
Was verstehst du unter "vollständig erfassen"?
Die FFT arbeitet auf einer Folge von Abtastwerten. Ob und wie diese
Abtastwerte irgend ein physikalisches Signal repräsentieren interessiert
die FFT nicht. Fakt ist, x = IFFT(FFT(x)), für alle x in C^N. Ob x eine
bezogen auf die Periodendauer "lange" Folge von Abtastwerten ist, oder
nur ein 2-Punkte-Ausschnitt einer "langsamen" Schwingung, nach
Transformation und Rücktransformation kommt exakt das selbe raus das man
reingesteckt hat.
@Florian H.:
Du schreibst, dass du in Excel eine FFT gemacht hast.
Könntest du mir bitte mal verraten wie das geht? Hast du da das
integrierte FFT-Makro verwendet oder selber was gebastelt?
Ich suche schon lange nach einem einigermassen verständlichen,
funktionierenden FFT-Code, den ich selber auch mal irgendwo
implementieren kann.
Vlt. wär das Excel-Sheet noch ganz hilfreich, könntest du es nicht mal
hier posten?
Grüsse
@Andreas Schwarz
Ich wollte damit auch nicht sagen, dass die FFT was anderes liefert. Es
ging mir darum, dass eine Frequenz die unter der Grundfrequenz liegt zu
gering ist um vollständig um Beobachtungszeitraum zu liegen.
Anders ausgedrückt:
Ein Sinus (angenommen ein Signal schwingt tatsächlich so) mit der
Frequenz 1Hz nur über 0,8 Sekunden beobachtet bei einer Abtastrate von
ca 1000Hz und dann transformiert, läßt die Frequenz 1Hz nicht erkennen,
da die Frequenzauflösung = 1000 / 800 = 1,25Hz beträgt. Wenn man das
Signal nun aber länger beobachtet (oder aufnimmt) kann man die Frequenz
auch im Spektrum ablesen. Natürlich wird das bei 1,1 Sekunden auch
wieder schwierig, da: 1000 / 1100 = 0,909Hz. Allerdings ist auch hier
die Schwingung mittendrin abgeschnitten.
Ich gebe zu der Satz:
"Sollte nun die Frequenz unter der Grundfrequenz liegen, heisst das die
Frequenz wurde nicht vollständig erfasst und kann demzufolge auch nicht
rekonstruiert werden."
ist so nicht richtig. Denn das Signal wird ja rekonstruiert. Allerdings
aus anderen Frequenzen als die vermeintlich in der Realität vorhandenen.
Es gibt nur Probleme, wenn man das Spektrum beeinflusst, denn die
tatsächlichen Frequenzen im Signal sind ja nicht zwangsläufig sichtbar.
Stichworte Rechteckfenster und Leckeffeckt.
Das Abschneiden des Sinus mitten in der Schwingung verhindert ja eine
vernünftige Periodifizierung, sodass dieses Signal kein Sinus mehr ist,
also ein Signal erzeugt wurde, dass mittendrin einen Sprung auf bspw
Null durchführt und somit weitere andere Frequenzen erzeugt, die sich
als Leckeffeckt bemerkbar machen.
Ich glaube in der Wikipedia ist ein kurzer Artikel zum Leckeffeckt mit
einigen Bildern vorhanden...