Hallo, zum besseren Verständnis der Fourier Transformation habe ich die Fouriertransformation schriftlich gerechnet. Dafür habe ich die Formel der DFT verwendet. ( http://de.wikipedia.org/wiki/Fourier-Transformation ) Allerdings klappt es noch nicht. Ich habe die Formel mit for-schleifen realisiert. Allerdings stimmt da was nicht. Vielleicht kann mir jemand einen Tip geben. Hier mein Code: time = (0.01:0.01:1) N = length(time) w=2*pi sinus = 1.*sin(w.*10.*time); for k=1:N for n=1:N for time = 0.01:0.01:1 erg = 1.*sin(w.*10.*time) end end end ergebnis = abs(erg)/N; stem(time,ergebnis) Danke Gruß Dennis
was für Code soll das sein? liegt es vieleicht daran dass du in deiner innersten for-schleife ständig "erg" überschreibst ? bei Fourierreihen integrierst du über das Produkt aus gesuchten Sinus(u. Cosin.) und Eingangssignal. das gibt dir die geuchte Intensität einer Frequenz im Einganssignal
Oh, ich programmiere mit Matlab. Ja, ich denke da hast du recht und ich überschreibe erg immer wieder. Danke für den Tip. Hast du denn noch eine Idee, wie erg nicht überschrieben wird? ;) Danke
Müsste passen.
1 | clear j; |
2 | |
3 | time = (0.01:0.01:1) |
4 | w=2*pi |
5 | sinus = 1.*sin(w.*10.*time); |
6 | N = length(sinus) |
7 | |
8 | erg = zeros(N, 1); |
9 | |
10 | for k=1:N |
11 | for n=1:N |
12 | |
13 | erg(k) = erg(k) + ... |
14 | ( sinus(n) * exp(-j*2*pi/N * (k-1) * (n-1)) ); % ??? |
15 | |
16 | end |
17 | end |
18 | |
19 | ergebnis = abs(erg)/N; |
20 | stem(time,ergebnis) |
Ja, coole Sache. Danke. Es klappt. Wenn du mir jetzt noch sagen kannst, wieso die Amplitude der Transformation bei 0.5 ist und nicht bei 1, wäre ich dir sehr dankbar. Danke
Weil das Spektrum konjugiert komplex ist und somit zwei "gleiche" Bin's auftreten.
Mmmmh, ok, aber so 100%ig habe ich es noch nicht verstanden. Wie meinst du das mit den zwei gleichen Bins? Liegt das an der Nyquist Frequenz? Danke
Nimm dir mal ein Blatt Papier und schreib dir für ein Testsignal mit wenigen Abtastwerten die DFT auf. Du wirst dabei feststellen, dass immer 2 Werte komplex konjugiert zueinander auftreten. Die Frequenz der beiden ist f0 und fs-f0.
Gibt es eine Chance, die FT auf Abineveau zu verstehen? Ich komme bein Wiki-Artikel schon alleine durch die Darstellung durcheinander. Dieses Jahr fängt zwar mein Physikstudium an, aber solange möchte ich nicht warten. ;) Kennt jemand eine Seite, wo wenigstens das Prinzip verständlich erklärt wird?
Ich habe hier seinerzeit mal eine Minianleitung geschrieben, die dir zumindest schonmal eine Idee davon geben könnte, wie das funktioniert: Beitrag "Re: Frequenz über Mikrofon einlesen ATmega16 oder 32" Strenggenommen reichen diese Infos schon aus, um das zu programmieren oder von Hand durchzurechnen. Wir hatten hier im Forum mal jemanden, der eine Anleitung dazu schreiben wollte, habe aber nichts mehr davon gehört. Schöne Grüße Kai
@maxim: Das kannst du schon auf Abi-Niveau verstehen. Was die FT macht so vom praktischen Gesichtspunkt aus gesehen, ist dir ja klar. Um die Mathe dahinter zu verstehen brauchst du nur ein wenig Kenntnisse in: 1.) Linearer Algebra - Räume - Basisvektoren - orthogonale Unabhängigkeit 2.) Komplexer Analysis - Integrale - Konvergenz Damit kannst du den ganzen Spass wirklich grundlegend und hintergründig verstehen. Was die ganzen Algorithmen angeht schau dir mal Beispielcode an, da kommst du schon dahinter. Und wenn du die Hintergründe der FFT verstehen willst, dann such dir Information zum Thema "divide et impera" (also im Problemlösungssinne, nicht das olle Zeuch auf dem Schlachtfeld).
>...zwar mein Physikstudium
Vielleicht kannst Du Dich ja noch für EIT eintragen - ansonsten
verabschiede Dich schon mal jetzt von uC&Co...
> verabschiede Dich schon mal jetzt von uC&Co...
Wieso? Kann man doch auch zu Hause machen. Macht Spass und ist gesund.
Klar basteln kann (vielleicht) auch ein FÜSIKER... Aber wenn ihm die Richtung uC interessiert währe er vielleicht besser bei den Ing. untergebracht als bei den Füsikern. Macht man bei den Füsikern überhaupt DFT? In EIT braucht man das ständig - schon allein wg. der dig.Modulationsverfahren. Ich möchte jetzt niemanden irgendetwas schlecht reden - immerhin gibt´s ja auch noch die Technische Physik... Trotzdem bin ich der Meinung: wer gerne professionell 'bastelt' ist bei den Ing. besser aufgehoben. Anmerkung: Da gabs doch mal so ein nettes Vorwort eines Profs über das Wesen des Ingenieurberufs... hat das jemand hier? -Würde gut passen ;)
Ich möchte Physik mit Informatik kombinieren und nach dem Studium etwas in der Richtung machen. Vielleicht Elementarteiclehn-Physik und Simulationen am Computer oder vielleicht auch Halbleiterindustrie oder ... Da ist mein Hobby doch gar nicht so falsch, oder? Ich finde Physik (vorallem theoretische) halt sehr interessant. Aber sie eignet sich nicht so sehr als Hobby. ;) > verabschiede Dich schon mal jetzt von uC&Co... Vielleicht werde ich mein Hobby während dem Studium aus Zeitmangel (weiß nicht, wie es dort zugeht) aufs Eis legen müssen. Ansonsten weiß ich auch nicht, warum ein Physiker sich in seiner Freizeit nicht mit uCs beschäftigen könnte?! Mit was sollte ich mich Deiner Meinung nach dann beschäftigen? Nach Schwarzen Löchern suchen oder eine Weltuntergangsmaschine bauen? ;) Aus Beitrag "Re: Frequenz über Mikrofon einlesen ATmega16 oder 32" > Fang statt der FFT erstmal mit einer normalen Fourier-Analyse an. > Einfach das Ausgangssignal mit einem Sinus der zu testenden Frequenz > multiplizieren und das arithmetische Mittel bilden (a). Dasselbe noch > mal mit dem Cosinus (b). > sqrt(a² + b²) liefert dir dann einen Wert, der proportional zur > Amplitude ist. Ok, ist also doch nicht so kompliziert anzuwenden. Die Herleitung lass ich jetzt mal ... In der Linearen Algebra bin ich zwar fit, die Komplexe Analyse hatten wir aber nicht (war auf einem ITG). Dann werde ich mich mal durch die Formeln wuseln und hier vielleicht noch Fragen stellen.
Auf der Seite hier wird die FT gut erklärt: http://klimt.iwr.uni-heidelberg.de/PublicFG/ProjectB/CFT/dipluschimpf/node10.html Wenn ich nun also ein Signal zur Laufzeit analysieren und dabei die Amplitude von zehn Frequenzen bestimmen möchte, speichere ich ein kleines Stück des Signals und lasse zehnmal die FFT drüber laufen? Die Größe/Länge des Stücks bestimmt die unterste messbare Frequenz?
Beinahe: > ... lasse zehnmal die FFT drüber laufen? Die FFT liefert dir aus n Samples ein Spektrum mit n Punkten. D. h. wenn du z.B. eine 1024-Punkt-FFT machst, erhaltest du Informationen über 1024 Frequenzen, wobei die Hälfte davon natürlich Spiegelfrequenzen sind, durch das Abtasten. Wenn dich nur zehn Frequenzen interessieren, machst zu zehn mal eine DFT mit je einer Frequenzkomponente. > Größe/Länge des Stücks bestimmt die unterste messbare Frequenz? Die unterste messbare Frequenz ist immer 0Hz, der Mittelwert des Signals. Mit der Länge des Stücks bestimmst du die Frequenzauflösung, welche fs/n ist. fs ist die Samplingfrequenz.
Teilchenphysik... vergiss das. Das bedeutet einen Beschleuniger. Von denen gibt's nicht allzu viele. Dann musst in der Naehe von einem solchen wohnen und auch dort fuer eine Stelle anstehen. Da hast keine industriellen Alternativen. Mach was anderes, wo du zur Not eine eigene Firma gruenden kannst.
Die teifste erfassbare Frequenz ist durch die Samplingzeitdauer bestimmt, so gesehen ist eine Frequenz von Null nicht erfassbar. Wenn man eine Sekunde misst kommt man auf 1 Hz runter, fuer 1 mHz muss man 15 Minuten lang messen.
Für ein bestimmtes f kannst du dir die FFT folgendermaßen vorstellen: Du legst über den Graphen einmal sinus (imaginärteil) und cosinus (realteil) der Frequenz f, und multiplizierst das jeweils mit dem Graphen. Von dem was da rauskommt nimmst du den Flächeninhalt zwischen Graph und Zeitachse (Vorzeichen beachten, Fläche unter der Zeitachse ist negativ). Hast du nun Signale anderer Frequenz ist im Schnitt (betrachtet von - bis + unendlich) genauso viel über wie unter der Zeitachse. Hast du aber ein Signal der Frequenz f liegt mehr Fläche über (oder unter) der Zeitachse, das Ergebnis wird ungleich 0. Ob das nun beim sinus oder cosinus der Fall ist (bzw. wie stark es ausgeprägt ist), und ob das Vorzeichen positiv oder negativ ist, hängt nur von der Phasenverschiebung ab. Wenn du dir nun zB. rect(t) (1 in -0.5..0.5, sonst 0) vorstellst und einen Cosinus mit Frequenz 0.25 drüberlegst (Nullstellen bei -0.5 und 0.5) kommt offensichtlich was >0 raus. Stauchst du den Cosinus in Gedanken immer weiter zusammen kommt ein Punkt wo du 0 hast (der negative Teil wird ja wieder abgezogen), dann wird's negativ, dann wieder positiv, usw. - entsprechend der Si Funktion.
... wrote: > Die teifste erfassbare Frequenz ist durch die Samplingzeitdauer > bestimmt, so gesehen ist eine Frequenz von Null nicht erfassbar. Wenn > man eine Sekunde misst kommt man auf 1 Hz runter, fuer 1 mHz muss man 15 > Minuten lang messen. Das stimmt so nicht. Mit 24bit Auflösung kann ich dir bei 1 sample/sek sagen ob da 'ne Frequenz von 9nHz (Nanoherz!) anliegt oder nicht. Und dazu brauch ich nur 2 samples (mit mehr geht's noch genauer). Merke: die FFT taugt nur wenn du erwartest das viele Frequenzen vorhanden sein können. Für's Ausmessen einzelner Frequenzen taugt sie dagegen absolut garnix.
> Das stimmt so nicht. Mit 24bit Auflösung kann ich dir bei 1 sample/sek > sagen ob da 'ne Frequenz von 9nHz (Nanoherz!) anliegt oder nicht. Und >dazu brauch ich nur 2 samples (mit mehr geht's noch genauer). Das stimmt IMO so auch nicht. Du kannst zwar sehen, ob "da unten" (also nahe f=0 Hz) etwas ist -- aber ob es nun 9nHz oder doch vielleicht 8,5 nHz sind, das weißt Du nicht. Die Frequenzauflösung einer FFT ist halt begrenzt - im Prinzip ist eine DFT/FFT eine Filterbank mit eher schlechter Filtercharakteristik. Jedes Filter hat einen bestimmten Durchlassbereich, und zeigt die Amplitude Phase des Signals in diesem Frequenzbereich an. Um welche Frequenz nun genau innerhalb des Durchlassbereiches es sich handelt, kannst Du aber nicht erkennen. Gruß FL
Ich kann dir aber sagen ob das 9nHz oder 18nHz sind, oder vll auch 90mHz. FFT ist wie schon gesagt nur sinnvoll wenn du viele Frequenzen erwartest. Wenn du nur eine Frequenz erwartest ist die FFT absolut ungeeignet.
> Ich kann dir aber sagen ob das 9nHz oder 18nHz sind, oder vll auch > 90mHz. Hallo I_ H., wie soll das funktionieren (mit FFT)? Und dann noch (siehe früheren Post) mit 2 Samples? Gruß FL
Es funktioniert nicht mit FFT, aber 2 samples sind nicht korrekt - man braucht min. 3. Wenn es um irgendwas im Frequenzbereich geht ist die FFT auch nicht immer die optimale Lösung, auch wenn sie immer wieder als Allheilmittel angepriesen wird. Die Gleichung y=sin(wt) lässt sich mit 3 gegebenen Punkten in einem Intervall (es ging ja um niedrige Frequenzen) eindeutig lösen - fertig. Bei 24bit erkennt man auch die kleinen Unterschiede die bei 9nHz innerhalb von einer Sekunde entstehen. Mit unendlicher Auflösung könnte man die Frequenz auch exakt errechnen. Wie ich aber schon geschrieben hab klappt das nur wenn man eine einzige Frequenz erwartet - dann aber besser als die FFT. Für mein Oszi hab ich ein Prog geschrieben, das mit einer ähnlichen Methode eine Frequenz auf >5 Dezimalstellen genau ermittelt, wobei ungerade harmonische keinen Einfluss haben.
Du gehst dabei aber davon aus, dass in Deinem Signal nur diese eine Frequenz (und ungerade Harmonische?) vorhanden sind. Wenn Deinem Sinus z.B. Rauschen überlagert ist, wirst Du nicht viel Freude an dem Ergebnis haben ;-)
Diese Vorraussetzung hab ich oben auch jedesmal dazugeschrieben und soweit ich das rausgelesen hab ging es auch um Frequenzmessung unter dieser Vorraussetzung. Ein kleines bisschen Rauschen kann man aber auch wegrechnen, und wenn so 5..10 Perioden aufgezeichnet sind ist meine Variante etwa >100mal genauer als eine FFT, und auch genauer als viele aufgenommene Samples + FFT.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.