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
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
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).
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.