matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabProblem mit FFT
Foren für weitere Studienfächer findest Du auf www.vorhilfe.de z.B. Astronomie • Medizin • Elektrotechnik • Maschinenbau • Bauingenieurwesen • Jura • Psychologie • Geowissenschaften
Forum "Matlab" - Problem mit FFT
Problem mit FFT < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Problem mit FFT: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:37 Do 16.10.2014
Autor: notinX

Hallo,

ich bin mir nicht sicher ob mein Problem eher mathematischer Natur oder ein Problem mit Matlab ist. Es geht darum eine FFT der Funktion [mm] $y(t)=\sin(\omega_0 [/mm] t)$ mit [mm] $\omega_0=1$ [/mm] zu machen. Um es einfach zu halten mal folgendes Beispiel:
1: t=linspace(0,10);            
2: y=sin(t);                   
3: ft=fft(y);
4: plot(t,ft)

Als Ergebnis erhalte ich grob gesagt zwei Peaks was ich auch erwarten würde. Was mich aber wundert ist, dass die Lage der Peaks sehr stark von der Länge des betrachteten Intervalls abhängt, die Ausgabe dieses Codes:
1: t=linspace(0,1000);            
2: y=sin(t);                   
3: ft=fft(y);
4: plot(t,ft)

sieht komplett anders aus. Das kann ja irgendwie nicht sein, oder?
Die 'interessanten' Stellen des Spektrums sollten meiner Meinung immer um [mm] $\omega=\pm\omega_0$ [/mm] liegen, unabhängig von der Länge des Vektors aus dem die FFT berechnet wird.

Gruß,

notinX

        
Bezug
Problem mit FFT: Antwort
Status: (Antwort) fertig Status 
Datum: 16:58 Do 16.10.2014
Autor: Marcel

Hallo,

> Hallo,
>  
> ich bin mir nicht sicher ob mein Problem eher
> mathematischer Natur oder ein Problem mit Matlab ist. Es
> geht darum eine FFT der Funktion [mm]y(t)=\sin(\omega_0 t)[/mm] mit
> [mm]\omega_0=1[/mm] zu machen. Um es einfach zu halten mal folgendes
> Beispiel:
>  
1: t=linspace(0,10);            
2: > y=sin(t);                   
3: > ft=fft(y);
4: >  plot(t,ft)


benutze erst mal

    plot(t,sin(t)),

dann siehst Du schon, dass Du die Periode nicht trifftst.
Was ich auch sehe, ist, dass Du mit

    plot(t,fft(y))

eigentlich den Realteil von fft(y) plottest. Beachte, dass Du hier "komplexe
Fourierkoeffizienten" berechnest. Es wäre also sinnvoller:

    plot(t,abs(ft))

zu plotten.

>  Als Ergebnis erhalte ich grob gesagt zwei Peaks was ich
> auch erwarten würde. Was mich aber wundert ist, dass die
> Lage der Peaks sehr stark von der Länge des betrachteten
> Intervalls abhängt, die Ausgabe dieses Codes:
>  
1: t=linspace(0,1000);            
2: > y=sin(t);                   
3: > ft=fft(y);
4: >  plot(t,ft)

>  sieht komplett anders aus. Das kann ja irgendwie nicht
> sein, oder?

Doch. Was hat denn [mm] $\Delta [/mm] f$ mit der Anzahl der Abtastwerte zu tun?

>  Die 'interessanten' Stellen des Spektrums sollten meiner
> Meinung immer um [mm]\omega=\pm\omega_0[/mm] liegen, unabhängig von
> der Länge des Vektors aus dem die FFT berechnet wird.

Sind Sie auch. Was Du auch beachten mußt, ist, wie Matlab die FFT berechnet.
Da wird z.B., anders, als in manch' anderen Programmiersprachen, keine
Division durch die Anzahl der Abtastwerte durchgeführt. Das hat einen
gewissen "Amplitudenaufblähungseffekt".

Wenn Du ein wenig Geduld hast, würde ich Dir gleich mal einen Code
basteln, bei dem die Achsen im Original-Zeit-Bereich und im Amplitudenspektrum
entsprechend skaliert sind. Dann wirst Du sehen, dass das alles zusammen
passt, und wieso. Und bedenken sollte man auch immer ein wenig, dass
die FFT mit Zero-Padding-Methode arbeitet...

Gruß,
  Marcel

Bezug
                
Bezug
Problem mit FFT: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:48 Do 16.10.2014
Autor: notinX


>  
> benutze erst mal
>  
> plot(t,sin(t)),
>  
> dann siehst Du schon, dass Du die Periode nicht trifftst.

Was meinst Du mit 'nicht treffen'? Dass die Länge des Intervalls nicht einem Vielfachen den Periodendauer entspricht? Stellt das ein Problem dar? Bei einer Messreihe kann ich ja auch nicht oder nur umständlich die Intervalllänge so bestimmen, dass sie passt.

> Was ich auch sehe, ist, dass Du mit
>  
> plot(t,fft(y))
>  
> eigentlich den Realteil von fft(y) plottest. Beachte, dass
> Du hier "komplexe
>  Fourierkoeffizienten" berechnest. Es wäre also
> sinnvoller:
>  
> plot(t,abs(ft))
>  
> zu plotten.

Ja, das stimmt schon. Es geht mir aber um die Lage der Peaks, bzw. die entsprechenden Frequenzen daher macht es für mich eigentlich keinen Unterschied.


>  >  sieht komplett anders aus. Das kann ja irgendwie nicht
> > sein, oder?
>  
> Doch. Was hat denn [mm]\Delta f[/mm] mit der Anzahl der Abtastwerte
> zu tun?

Keine Ahnung, ich weiß nichtmal welches [mm]\Delta f[/mm] Du meinst.

>  
> >  Die 'interessanten' Stellen des Spektrums sollten meiner

> > Meinung immer um [mm]\omega=\pm\omega_0[/mm] liegen, unabhängig von
> > der Länge des Vektors aus dem die FFT berechnet wird.
>  
> Sind Sie auch. Was Du auch beachten mußt, ist, wie Matlab
> die FFT berechnet.
>  Da wird z.B., anders, als in manch' anderen
> Programmiersprachen, keine
>  Division durch die Anzahl der Abtastwerte durchgeführt.
> Das hat einen
>  gewissen "Amplitudenaufblähungseffekt".

Ja, die Amplituden werden auch größer. Das würde mich aber auch nicht stören, ich bin nur an den Frequenzen interessiert und die sollten unabhängig von der Intervalllänge sein.

>  
> Wenn Du ein wenig Geduld hast, würde ich Dir gleich mal
> einen Code
>  basteln, bei dem die Achsen im Original-Zeit-Bereich und

Sehr gerne :-)

Gruß,

notinX

Bezug
                        
Bezug
Problem mit FFT: Antwort
Status: (Antwort) fertig Status 
Datum: 18:23 Do 16.10.2014
Autor: Marcel

Hallo,

> >  

> > benutze erst mal
>  >  
> > plot(t,sin(t)),
>  >  
> > dann siehst Du schon, dass Du die Periode nicht trifftst.
>
> Was meinst Du mit 'nicht treffen'? Dass die Länge des
> Intervalls nicht einem Vielfachen den Periodendauer
> entspricht?

genau.

> Stellt das ein Problem dar? Bei einer Messreihe
> kann ich ja auch nicht oder nur umständlich die
> Intervalllänge so bestimmen, dass sie passt.

Ich hoffe mal, dass ich gerade den richtigen Begriff benutze, aber das ist
doch gerade der Leakage-Effekt.
Hinweis diesbezüglich: []Fensterfunktionen (klick!)

> > Was ich auch sehe, ist, dass Du mit
>  >  
> > plot(t,fft(y))
>  >  
> > eigentlich den Realteil von fft(y) plottest. Beachte, dass
> > Du hier "komplexe
>  >  Fourierkoeffizienten" berechnest. Es wäre also
> > sinnvoller:
>  >  
> > plot(t,abs(ft))
>  >  
> > zu plotten.
>  
> Ja, das stimmt schon. Es geht mir aber um die Lage der
> Peaks, bzw. die entsprechenden Frequenzen daher macht es
> für mich eigentlich keinen Unterschied.

Natürlich kann das einen machen. Der Betrag ist doch die Summe aus
Realteil-Quadrat und Imaginärteil-Quadrat hoch 1/2. Überlege Dir mal, was
Signale machen, die achsensymmetrisch sind, und was Signale machen,
die zum Ursprung punktsymmetrisch sind.
Im Sinne von: Welchen Einfluss hat das auf den Real- bzw. Imaginärteil
der Fourierkoeffizienten?
Eine erste Idee liefert dabei schon: Sinus ist punktsymmetrisch, Cosinus
ist achsensymmetrisch...

>
> >  >  sieht komplett anders aus. Das kann ja irgendwie nicht

> > > sein, oder?
>  >  
> > Doch. Was hat denn [mm]\Delta f[/mm] mit der Anzahl der Abtastwerte
> > zu tun?
>  
> Keine Ahnung, ich weiß nichtmal welches [mm]\Delta f[/mm] Du
> meinst.

Na, Du musst doch wissen, wie die Frequenzskala zu skalieren ist. Dabei
hat sowohl die Abtastfrequenz als auch die Anzahl der Punkte, die Du in
die FFT einfließen läßt, einen Einfluß.
  

> >  

> > >  Die 'interessanten' Stellen des Spektrums sollten meiner

> > > Meinung immer um [mm]\omega=\pm\omega_0[/mm] liegen, unabhängig von
> > > der Länge des Vektors aus dem die FFT berechnet wird.
>  >  
> > Sind Sie auch. Was Du auch beachten mußt, ist, wie Matlab
> > die FFT berechnet.
>  >  Da wird z.B., anders, als in manch' anderen
> > Programmiersprachen, keine
>  >  Division durch die Anzahl der Abtastwerte
> durchgeführt.
> > Das hat einen
>  >  gewissen "Amplitudenaufblähungseffekt".
>  
> Ja, die Amplituden werden auch größer. Das würde mich
> aber auch nicht stören, ich bin nur an den Frequenzen
> interessiert und die sollten unabhängig von der
> Intervalllänge sein.

Sind sie, aber man muss wissen, wie man sie berechnet.
  

> >  

> > Wenn Du ein wenig Geduld hast, würde ich Dir gleich mal
> > einen Code
>  >  basteln, bei dem die Achsen im Original-Zeit-Bereich
> und
>
> Sehr gerne :-)

Ich habe mal einen Beispielcode in der anderen Antwort angehängt. Ich
habe aber auch vor einem halben Jahr mal einen guten Link gehabt, der
einiges zur FFT erklärt hat. Ich such' das auch nochmal raus.

P.S. Es gibt übrigens auch noch einen Algorithmus, der Dir die Grundfrequenz
schätzen kann. Der heißt Quinn-Algorithmus, den habe ich erst vor einigen
Tagen noch getestet. Wenn Bedarf besteht, dann kann ich den auch nachtragen.
Z.B. kann es ja sein, dass im Frequenzspektrum das [mm] $\Delta [/mm] f$ , sagen wir einfach
mal, [mm] $3\,$ [/mm] Hz ist. Du weißt aber, dass die Grundfrequenz Deines Signals 50 Hz
ist, d.h. der 17. fft-Wert würde zu 3*16=48 Hz passen, und der 18. fft-Wert zu
$3*17=51$ Hz passen. Der Quinn-Algorithmus würde dann im Endeffekt aus
Messdaten herausrechnen, dass die *richtige* Stelle, die zur Grundfrequenz
passt, dann 17.66... wäre [mm] ($(17.66-1)*3\approx [/mm] 50$).

Aber ich suche Dir jetzt vielleicht erstmal die Dokumentationen zur
FFT, denn die haben mir auch viel weitergeholfen, raus.

Gruß,
  Marcel

Bezug
        
Bezug
Problem mit FFT: Skalierung
Status: (Antwort) fertig Status 
Datum: 18:08 Do 16.10.2014
Autor: Marcel

Hallo nochmal,

okay, also schauen wir uns das nochmal an:
Du hattest
1:
2: t=linspace(0,10);
3: y=sin(t);
4: ft=fft(y);

Bei Dir war [mm] $\omega_0=1\,$ [/mm] und [mm] $y(t)=\sin(\omega_0 t)\,.$ [/mm]

Es ist also mit
N=length(t)
dann

   [mm] $N=100\,.$ [/mm]

Anders gesagt: Die Abtastfrequenz wäre hier

    [mm] $f_{abt}=N/(10\text{ s})=10$ [/mm] Hz.

D.h. es ist

    [mm] $\Delta t=1/f_{abt}=1/10 \,$s. [/mm]

Im Frequenzspektrum berechnet sich dann

    [mm] $\Delta f=\frac{1}{N}*f_{abt}=\frac{1}{100}*10\,$ Hz$=\frac{1}{10}$ [/mm] Hz.

Beachte nun, dass Matlab Felder mit dem Index 1 starten läßt, daher
ist es sinnvoll,

    [mm] $f_k=\frac{\red{k-1}}{N}*f_{abt}$ [/mm]

zur Skalierung zu verwenden.
(Der Fourierkoeffizient, der zu 0 Hz passt, ist $fft(1)$!)

Also:
1:
2: % Optional: Direkte Vorgabe von Delta_t:
3: % Optional: Direkte Vorgabe von Delta_t:
4: Delta_t=1/10^4.
5: t=0:Delta_t:2*pi-Delta_t; % Eingabe von t in Sekunden!
6: Delta_t=t(2)-t(1); % Zeit zwischen zwei Abtastwerten - Voraussetzung:
7:                    % äquidistante Abtastung!
8: N=length(t); % Anzahl der Abtastwerte
9: y=sin(10*t);
10: ft=fft(y)/N;  % Grund der Division durch N: Amplitudennormierung
11: f_abt=1/Delta_t; % Abtastfrequenz -> Hinweis: Auswertung mach nur
12:                  % bis f_abt/2 Sinn, siehe Abtasttheorem
13: ScaleFreq=0:N-1; % Skalierung der Frequenzachse im Frequenzspektrum
14: ScaleFreq=f_abt/N*ScaleFreq;
15: plot(ScaleFreq,abs(ft));
16: xlabel('Frequenz [Hz]');
17: ylabel('Amplitude');
18: pause(5);
19: KreisScaleFreq=2*pi*ScaleFreq;
20: plot(KreisScaleFreq,abs(ft));
21: xlabel('Kreisfrequenz');
22: ylabel('Amplitude');


Wenn Du ihn ausführst, wirst Du folgendes feststellen:
1. Ich habe extra mal nicht direkt [mm] $\sin$ [/mm] benutzt, sondern [mm] $\sin(10*t)\,.$ [/mm]
Grund: Wir erwarten dann im Amplitudenspektrum den Peak bei [mm] $\omega=10,$ [/mm]
was im Frequenzspektrum [mm] $10/2/\pi=1.5915$ [/mm] (natürlich nur approximativ) Hz
entspricht. Das wirst Du im ersten Plot sehen.
Im 2. Plot (der nach 5 Sekunden zu sehen ist) siehst Du tatsächlich auf der
"kreisfrequenzskalierten Achse", dass der Peak dort bei [mm] $\omega=10$ [/mm] ist.

2. Dieses "perfekte Treffen von [mm] $\omega=10$" [/mm] auf der "kreisfrequenzskalierten
Achse" hat durchaus damit zu tun, dass ich das Signal *perdiodisch passend*
cutte.

3. Die Amplituden werden skaliert. Diese Skalierung passt dann zu der
*Interpretation der FFT-Werte im Vergleich mit den theoretischen
(komplexen) Fourierkoeffizienten*.

4. Was Du siehst, ist das zweiseitige Amplitudenspektrum. Das heißt,
eigentlich wäre es sinnvoll, den Plot ein wenig zu modifzieren, so dass
er symmetrisch um die 0 läuft.

5. Dadurch, dass Du das zweiseitige Amplitudenspektrum siehst, erklärt
sich auch, dass [mm] $abs(ft(11))=0.5\,,$ [/mm] und nicht [mm] $=1\,$ [/mm] ist. Beachte den Zusammenhang,
der zwischen den F.K. der reellen und der komplexen Version einer F.R.
besteht.

P.S. Oben Code brauchst Du nicht copy&pasten, ich hänge einfach die
Matlab/Octave-Datei an. Wie gesagt:
Beachte, dass ich dort [mm] $y=\sin(\red{\,10\,}t)$ [/mm] benutze.

P.P.S. Du kannst natürlich auch noch das Phasenspektrum plotten. Oder Du
plottest Real- und Imaginärteil. Beachte, dass das Amplitudenspektrum
nur einen Teil der Signalinformation eines periodischen, reellen Signals
enthält.

[a]FFT_Amplitude.m

Gruß,
  Marcel

Dateianhänge:
Anhang Nr. 1 (Typ: m) [nicht öffentlich]
Bezug
        
Bezug
Problem mit FFT: Literatur
Status: (Antwort) fertig Status 
Datum: 18:41 Do 16.10.2014
Autor: Marcel

Der erste Link ist - m.E. nach - sehr Praxis-nah. Die anderen durchaus
interessant und weiterführend:

[]http://nt.eit.uni-kl.de/fileadmin/lehre/nt-lab/anleitung/dft_de.pdf

[]http://ti.tuwien.ac.at/cps/teaching/courses/dspv/files/DFT-FFT.pdf

[]http://www.mathe.tu-freiberg.de/~ernst/Lehre/Grundkurs/numerik6.pdf

[]https://staff.ti.bfh.ch/sha1/Math2.pdf

Interessant (schau' mal in der Bib) sind durchaus auch Bücher, die etwa
Namen wie

    "Digitale Signalverarbeitung"

    "Digitale Signalverarbeitung in Matlab"

tragen.

Edit: Vergessen hatte ich oben noch ein Skript von []Prof. Plonka-Hoch:

Am Besten einfach auf ihrer alten Homepage:

    []https://www.uni-due.de/mathematik/plonka/Fourieranalysis/Fourieranalysis.html

stöbern, etwa:

    []https://www.uni-due.de/mathematik/plonka/Fourieranalysis/kap1bis8.pdf

Gruß,
  Marcel

Bezug
                
Bezug
Problem mit FFT: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:40 So 19.10.2014
Autor: notinX

Erst mal vielen Dank für die ausführliche Antwort und das Matlab-Skript.
Ich habe jetzt mal ein bisschen rumgebastelt und das hier (in Anlehnung an Deinen Vorschlag) erstellt:

1: deltat = 1e-2;                     
2: t = 0:deltat:2*pi-deltat;           
3: N = length(t);                   
4: fa = 1/deltat;                     
5: f = 5;                             
6: w = 2*pi*f;                       
7: y = sin(w*t);
8:
9: F = fft(y)/N;                     
10: fachse = 0:N-1;                        
11: fachse = fa/N*fachse;
12:
13: subplot(2,1,1)
14: plot(t,y)
15: title('Signal')
16: xlabel('Zeit [s]')
17: subplot(2,1,2)
18: plot(fachse,abs(F)) 
19: title('Amplitudenspektrum')
20: xlabel('Frequenz [Hz]')
21: ylabel('Amplitude')


Das sieht schon wesentlich besser aus und der erste Peak ist jetzt auch immer bei 5 bzw. bei f egal wie groß das Intervall ist. Ganz durchgeblickt habe ich aber noch nicht.
Wieso ist der zweite Peak nicht bei -f und wieso wandert er bei Änderung von [mm] $\Delta [/mm] t$ (deltat)?
Und entspricht die Amplitude im Frequenzspektrum nicht der der Funktion y, also 1 in diesem Fall?

Gruß,

notinX

Bezug
                        
Bezug
Problem mit FFT: Antwort
Status: (Antwort) fertig Status 
Datum: 18:01 So 19.10.2014
Autor: Marcel

Hallo,

> Erst mal vielen Dank für die ausführliche Antwort und das
> Matlab-Skript.
>  Ich habe jetzt mal ein bisschen rumgebastelt und das hier
> (in Anlehnung an Deinen Vorschlag) erstellt:
>  
>
1: deltat = 1e-2;                     
2: > t = 0:deltat:2*pi-deltat;           
3: > N = length(t);                   
4: > fa = 1/deltat;                     
5: > f = 5;                             
6: > w = 2*pi*f;                       
7: > y = sin(w*t);
8: >  
9: > F = fft(y)/N;                     
10: > fachse = 0:N-1;                        
11: > fachse = fa/N*fachse;
12: >  
13: > subplot(2,1,1)
14: >  plot(t,y)
15: >  title('Signal')
16: >  xlabel('Zeit [s]')[/s]
17: > [s] subplot(2,1,2)[/s]
18: > [s] plot(fachse,abs(F)) [/s]
19: > [s]title('Amplitudenspektrum')[/s]
20: > [s] xlabel('Frequenz [Hz]')[/s]
21: > [s] ylabel('Amplitude')
[/s]


>

ich gucke mir das gleich mal an.

> Das sieht schon wesentlich besser aus und der erste Peak
> ist jetzt auch immer bei 5 bzw. bei f egal wie groß das
> Intervall ist. Ganz durchgeblickt habe ich aber noch
> nicht.
>  Wieso ist der zweite Peak nicht bei -f

Weil Du gar nicht das Amplitudenspektrum im negativen Bereich berechnest,
bzw. indirekt machst Du das schon. Du siehst es halt nach der halben
Abtastfrequenz. Wenn Du etwa eine Abtastfrequenz von 10000 Hz hast,
dann siehst Du "Fourierkoeffizienten" bis 5000 Hz, danach wird das
darauffolgende symmetrisch. Der "Fourierkoeffizient", den Du aber etwa
bei $8800$ Hz siehst, würdest Du eigentlich bei $-1200$ Hz abzutragen haben.

> und wieso wandert
> er bei Änderung von [mm]\Delta t[/mm] (deltat)?

Das verstehe ich gerade auch nicht, bzw. ich muss mir erstmal Deinen
Code angucken, was jedenfalls eine kleine Weile dauern wird. Hast Du
Dich an die Skalierungen, die Du meinem ersten Link ja entnehmen kannst,
gehalten?

> Und entspricht die Amplitude im Frequenzspektrum nicht der
> der Funktion y, also 1 in diesem Fall?

Im zweiseitigen Amplitudenspektrum werden die Amplituden *verteilt*, d.h.,
wenn Du oben bei reeller Fourierreihe denkst, dass

    wegen [mm] $a_1=0$ [/mm] und [mm] $b_1=1$ [/mm] dann zu [mm] $w=2\pi [/mm] f$ die Amplitude [mm] $(a_1^2+b_1^2)^{1/2}=0$ [/mm]

gehört, so stimmt das, weil das EINSEITIGE Amplitudenspektrum damit
arbeitet.

Das ZWEISEITIGE sagt aber

    "Ich will bei [mm] $-5\,$ [/mm] Hz und bei [mm] $+5\,$ [/mm] Hz einen Ausschlag sehen",

und dieser ist dann jeweils

    [mm] $(a_1^2+b_1^2)^{1/2}/2\,.$ [/mm]

Wie schon erwähnt: Schau' Dir an, wie die Fourierkoeffizienten von reeller
und komplexer Darstellung einer Funktion als Fourierreihe zusammenhängen.

Beim einseitigen Amplitudenspektrum würde man den Betrag des entsprechenden
Fourierkoeffizienten, der zu einer gewissen Frequenz gehört, den man mit
der FFT berechnet hat, VERDOPPELN.

Die FFT selber liefert ein Ergebnis, wobei die Amplituden zum ZWEISEITIGEN
Amplitudenspektrum passen (sofern man die [mm] $1/N\,$ [/mm] Division mitnimmt).

Gruß,
  Marcel

Bezug
                                
Bezug
Problem mit FFT: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:11 So 19.10.2014
Autor: notinX


>  
> Das verstehe ich gerade auch nicht, bzw. ich muss mir
> erstmal Deinen
>  Code angucken, was jedenfalls eine kleine Weile dauern
> wird. Hast Du
>  Dich an die Skalierungen, die Du meinem ersten Link ja
> entnehmen kannst,
>  gehalten?

Ich denke schon, ich hab sie höchstens umbenannt. In Deinem Beispiel ist das aber genauso, zumindest im Kreisfrequenzsprektrum. Je kleiner Du Delta_t wählst, desto weiter verschiebt sich der zweite Peak nach rechts (zu größeren Werten).

Gruß,

notinX

Bezug
                                        
Bezug
Problem mit FFT: Antwort
Status: (Antwort) fertig Status 
Datum: 18:16 So 19.10.2014
Autor: Marcel

Hallo,

> >  

> > Das verstehe ich gerade auch nicht, bzw. ich muss mir
> > erstmal Deinen
>  >  Code angucken, was jedenfalls eine kleine Weile dauern
> > wird. Hast Du
>  >  Dich an die Skalierungen, die Du meinem ersten Link ja
> > entnehmen kannst,
>  >  gehalten?
>  
> Ich denke schon, ich hab sie höchstens umbenannt. In
> Deinem Beispiel ist das aber genauso, zumindest im
> Kreisfrequenzsprektrum. Je kleiner Du [mm][code]Delta_t[/code][/mm]
> wählst, desto weiter verschiebt sich der zweite Peak nach
> rechts (zu größeren Werten).

na, das ist doch logisch: Wenn Du eine höhere Abtastfrequenz hast, dann
wird neben dem zu 5 Hz gehörigen Peak halt der zu [mm] $-5\,$ [/mm] Hz zugehörige
an der Stelle

    "Abtastfrequenz - 5 Hz"

angezeigt. Alles, was Du nach der halben Abtastfrequenz siehst, müßtest
Du im Prinzip um die Abtastfrequenz nach links verschieben, wenn Du das
zweiseitige Amplitudenspektrum darstellen willst.

P.S. Wenn Du ein wenig wartest, modifiziere ich die FFT-Darstellung diesbezüglich
nochmal.

Gruß,
  Marcel

Bezug
                                                
Bezug
Problem mit FFT: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:35 So 19.10.2014
Autor: hanspeter.schmid

Hallo zusammen,

Matlab / FFT / Skalierung ist immer etwas schwierig, vor allem wenn man noch Windows verwendet. Ich habe deshalb mal das folgende Dokument geschrieben:

[]How to use the FFT and Matlab’s pwelch function for signal and noise simulations and measurements

Ich hoffe das hilft.

Gruss,
Hanspeter


Bezug
                                                        
Bezug
Problem mit FFT: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 20:33 So 19.10.2014
Autor: Marcel

Hallo Hanspeter,

> Hallo zusammen,
>  
> Matlab / FFT / Skalierung ist immer etwas schwierig, vor
> allem wenn man noch Windows verwendet. Ich habe deshalb mal
> das folgende Dokument geschrieben:
>  
> []How to use the FFT and Matlab’s pwelch function for signal and noise simulations and measurements
>  
> Ich hoffe das hilft.

ich sehe jetzt gerade nicht, wo die gefragten Details dort wirklich erklärt
werden, aber ich habe es auch nur überflogen und daher eventuell einfach
die entscheidenden Stellen überlesen.

Ich habe auch mal was bzgl. Matlab und FFT zusammengeschrieben, ich
muss aber mal gucken, ob ich das nur handschriftlich oder auch digital
gemacht habe. Vor allem habe ich dabei den Zusammenhang zwischen
der Theorie (theoretische Berechnung der Fourierkoeffizienten) mit der
Praxis (Approximation des Integrals mit Stützstellen) zusammengetragen,
so dass man ein Zusammenspiel zwischen Theorie und Praxis durchaus
erkennen kann.

Falls ich es nur handschriftlich habe, so werde ich, falls Bedarf besteht,
das Ganze demnächst auch mal gerne in Latex abtippen.

Ansonsten muss ich aber sagen: Unabhängig davon, dass ich in Deinem
Dokument nicht (direkt) die hier gestellten Fragen beantwortet sehe:
Für mich ist es auf jeden Fall interessant. :-)

Gruß,
  Marcel

Bezug
                                        
Bezug
Problem mit FFT: Code zweiseitiges Ampl.-Sp.
Status: (Antwort) fertig Status 
Datum: 19:30 So 19.10.2014
Autor: Marcel

Hallo,

im Anhang der Code zum zweiseitigen Amplitudenspektrum.

Dazu noch eine Bemerkung:
Du hast eine gerade Anzahl an Auswertungspunkten mitgenommen
gehabt (628).
Eigentlich sollte hier "Symmetrien" um die Stelle 315=628/2+1 zu sehen sein, also
[mm] $F(314)=\overline{F(316)}$, [/mm]
[mm] $F(313)=\overline{F(317)}$ [/mm] (das passt auch) und dann sollte natürlich eigentlich
auch F(1)=F(315) F(1)=F(628) gelten, was hier aber nicht der Fall ist (vermutlich aus
numerischen Gründen, Du kannst Dir aber auch mal überlegen, ob es vielleicht
nicht doch an anderen Gründen liegen kann).

Weil [mm] $F(1)\not=F(628)$ [/mm] gilt, habe ich einfach F(628) entfernt - so dass aus den
ursprünglich 628 Werten nun nur noch 627 übrig bleiben.
(Beachte übrigens: Der Realteil von F(628) stimmt fast mit F(1) überein, und
F(1) darf eigentlich keinen Imaginärteil enthalten...)

Wenn Du eine ungerade Anzahl an Punkten hast, dann werden wir vielleicht
ein solches Problem vermeiden können. Das teste ich gleich mal. Bis dahin
erst mal der Code, der zu einer geraden Anzal an Punkten passt.

Siehe Anhang:

    [a]Matheraum_FFT.m

P.S. Noch ein Hinweis: Wenn Du, entsprechend Deiner Sinus-Schwingung,
aus

    t=0:deltat:2*pi-deltat

einfach

    t=0:deltat:2-deltat

machst, wirst Du auch sehen, dass wir *idealer* werden, d.h., dass die
Amplituden bei [mm] $\pm [/mm] 5$ Hz auch zu dem Wert [mm] $1/2\,$ [/mm] passen, den wir erwarten!
Wobei ich da wohl noch einen kleinen Fehler zu haben schein, denn ich
sehe im negativen Bereich den Ausschlag ein wenig falsch... Mal gucken,
was es da noch zu korrigieren gibt.


Edit: Fehler behoben!

Beachte auch meine Modifikation von t!

Edit2: Eben hatte ich leider die falsche Datei hochgeladen. Jetzt die
richtige (20.10 Uhr)

Edit3 und damit letztes Edit: Mit einer kleinen Modifikation habe ich es
hinbekommen, dass die Plots unabhängig davon, ob N gerade oder ungerade
ist, (hoffentlich) passen.

Gruß,
  Marcel

Dateianhänge:
Anhang Nr. 1 (Typ: m) [nicht öffentlich]
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]