Forum: Digitale Signalverarbeitung / DSP / Machine Learning Einfache FFT mit Octave - wirre Ergebnisse


von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Ich experimentiere gerade mit der FFT in Octave und scheitere daran ein 
vernünftiges Ergebnis für die Phasenlage zu ermitteln. Ein minimales 
Beispiel ist das folgende - der erzeugte Plot ist im Anhang:

1
% 1000 points from [0..1)
2
x = (0:999)/1000;
3
4
% function to FFT and plot
5
y = 1/4*sin(2*pi*5*x + pi) + 1/2*sin(2*pi*10*x + pi/2) + sin(2*pi*20*x + pi/4);
6
7
z = fft(y);
8
amplitudes = abs(z) ./ (length(z) ./ 2);
9
phases = angle(z);
10
11
% plot 0..N
12
N = 50;
13
14
% real parts - looks okay
15
subplot(4, 1, 1);
16
stem(0:N-1, real(z(1:N)));
17
18
% imag parts - looks okay
19
subplot(4, 1, 2);
20
stem(0:N-1, imag(z(1:N)));
21
22
% freuqnecy/amplitude - looks okay
23
subplot(4, 1, 3);
24
stem(0:N-1, amplitudes(1:N));
25
26
% frequency/phase - ???
27
subplot(4, 1, 4);
28
stem(0:N-1, phases(1:N));

Die Frequenzanteile (3. Abbildung von oben) scheinen noch korrekt. Die 
Phasenlage (4. Abbildung von oben) finde ich jedoch sehr merkwürdig - 
die Werte erscheinen mir fast zufällig zu sein. Woran kann das liegen?

von Georg A. (georga)


Lesenswert?

> Woran kann das liegen?

Welche sinnvolle Phase erwartest du denn bei einem Betrag von so gut wie 
0+-Genauigkeitsrauschen?

Deine drei signifikanten Frequenzen haben ja auch die richtige Phase...

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

> Welche sinnvolle Phase erwartest du denn bei einem Betrag von so gut wie
> 0+-Genauigkeitsrauschen?
>
> Deine drei signifikanten Frequenzen haben ja auch die richtige Phase...

Okay, numerisches Problem also - gibt's eine Funktion in Octave um Werte 
die sich nur um ein kleines epsilon von einem Wert k unterscheiden auf k 
zu setzen (hab auf die Schnelle keine gefunden). Oder löst man das 
anders?


> Hättest du mal klaus_problem.png statt fft_problem.png angehängt, dann
> könnten wir helfen. Denn die FFT ist hier bestimmt nicht das Problem!

Siehe Anhang

von Helmut S. (helmuts)


Lesenswert?

Die Phase aus der FFT von deinen 5Hz, 10Hz, 20Hz ist laut Ergebnis pi/2, 
0, -pi/4, weil Winkel der FFT auf cos() bezogen ist. Das Ergebnis stimmt 
somit.

von Klaus (Gast)


Lesenswert?

Mein Gott hängen hier schwierige Leute rum. Danke, ich komm selbst klar. 
Bitte keine weitere Hilfe.

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
Noch kein Account? Hier anmelden.