www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Fourier zu Fuß


Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Eugen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Interessierter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das Code aus Matlab?

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, hat sich erledigt.
Trotzdem danke

Autor: die ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Müsste passen.

clear j;

time = (0.01:0.01:1)
w=2*pi
sinus = 1.*sin(w.*10.*time);
N = length(sinus)

erg = zeros(N, 1);

for k=1:N
  for n=1:N

      erg(k) = erg(k) + ...
              ( sinus(n) * exp(-j*2*pi/N * (k-1) * (n-1)) );   % ???

  end
end

ergebnis = abs(erg)/N;
stem(time,ergebnis)

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: die ??? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil das Spektrum konjugiert komplex ist und somit zwei "gleiche" Bin's 
auftreten.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Kai G. (runtimeterror)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ralf Schwarz (spacedog) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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).

Autor: Ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>...zwar mein Physikstudium
Vielleicht kannst Du Dich ja noch für EIT eintragen - ansonsten 
verabschiede Dich schon mal jetzt von uC&Co...

Autor: Ralf Schwarz (spacedog) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> verabschiede Dich schon mal jetzt von uC&Co...

Wieso? Kann man doch auch zu Hause machen. Macht Spass und ist gesund.

Autor: Ing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Maxim S. (maxim) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf der Seite hier wird die FT gut erklärt: 
http://klimt.iwr.uni-heidelberg.de/PublicFG/Projec...

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?

Autor: Ralf Schwarz (spacedog) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: 3360 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... 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.

Autor: FL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: FL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: FL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;-)

Autor: I_ H. (i_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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