Habe grundlegende Verständnisprobleme bei der FFT!

OP #2588790
Lesenswert?

Hi,

habe mich jetzt schon eine Zeit lang mit DSP und der FFT beschäftigt, 
aber ich habe da noch  Probleme:

Ich habe mir in Matlab ein Cosinus-Signal gebastelt mit einer Länge von 
N = 128 und einer Frequenz von 32Hz.
So wie ich die FFT verstehe, gibt mir die FFT ein Frequenzspektrum 
zurück, mit Peaks an den Frequenzen die dem Eingangssignal entsprechen. 
( Das Eingangssignal kann ja aus mehreren überlagerten Signalen bestehen 
)

Habe versucht den Frequenzgang auf 0 - 32Hz zu normieren.
Also sollte mir die FFT von einem Signal mit 32Hz, einen Peak bei 32Hz 
anzeigen.
Nur das tut sie bei mir nicht ganz.

Entweder liegt es an meinem Verständnis für Matlab, für die FFT oder 
wahrscheinlich an beidem ;)

Ich habe auch ein Problem die Zahl Pi in mein Signal zu bringen:
Wenn ich zb. so schreibe: x = cos(n*pi*f) , dann sind in x nur 1er und 
kein cosinus.
1
N = 128;                     % Length of signal
2
f = 32;                      % Frequenz
3
n = 0:N-1;
4

5
x = cos(n*f); 
6

7

8
% FFT
9
fx = fft(x);
10

11

12
figure;
13
subplot(3,1,1)
14
plot(n,x) 
15
title('x(t)')
16

17
subplot(3,1,2)
18
plot(abs(fft(x))) 
19
title('Spectrum of x(t)')
20

21
subplot(3,1,3)
22
plot(linspace(0, f, N),abs(fx))  % Normiert auf Werte zwischen 0 und 32 Hz
23
title('Spectrum of x(t)')
24
xlabel('0 - 32 Hz');

Hoffe mir kann wer helfen..
Lg
Max
Angehängte Dateien:
Gast #2588905
Lesenswert?

kann es sein, dass da noch die Normierung auf PI fehlt?

Dein Cosinu soll doch sicher von 0...2 pi laufen.

Im Spkerum sehe ich an der 16. und der n-16. Stelle den peek.

16/128 * fs = 1/8 fs

mit 2pi * 1/8 = 3/4 -> > als Nyqist!

Ich würde sagen, du hast eine Art undersampling durchgeführt ...


Du solltest mal mehrere Frequenzen addieren und zwar so, dass sie alle 
unterhalb der Nyquistfrequenz sind.

Also

fs = 100% = 128 pkte
f1 = 25%
f2 = 35%
Gast #2589525
Lesenswert?

Hi, nur mal ganz schnell, mach den cos mal so:


dt=0.00001;                     %Abtastzeit in s, ist Geschmackssache
N=1000;
t=[0:dt:(N-1)*dt]';             %Zeitvektor

f=32;

y = cos(2  pi  f * t);

Ausserdem musst du beachten, in welcher Reihenfolge die fft-Funktion das 
Ergebnis in den Ergebnis-Vektor schreibt --> erst die kleinsten 
positiven..., dann die größten negativen (imaginären, die selten 
jemanden interesiert)... ENDE des Vektors.


viele Grüße
OP #2590249
Lesenswert?

Danke für die Antworten!
Die Darstellung passt jetzt.
1
fs = 1000;
2
dt=1/fs;                     %Abtastzeit in s
3
N=100;
4
t=[0:dt:(N-1)*dt]';             %Zeitvektor
5
f=100;                           % Frequenz
6

7
x = cos(2* pi * f * t);
8

9
% FFT
10
fx = fft(x);
11

12
figure;
13
subplot(2,1,1)
14
plot(t,x);
15
title('x(t)');
16

17
subplot(2,1,2)
18
plot(linspace(0, fs, N),abs(fx));
19
title('Spectrum of x(t)')

Aber bei der Darstellung der x-Achse im Frequenzgang habe ich noch 
leichte Probleme.

Also ich habe eine Abtastfrequenz von 10kHz, was der Gesamtbandbreite 
der FFT entspricht. Mein Cosinus hat eine Frequenz von 100 Hz, dort habe 
ich auch einen Peak.
Nur wieso ist bei 900 Hz ebenfalls ein Peak?
Angehängte Dateien:
#2590274
Lesenswert?

Wie Heinz angedeutet hat bitte Nyquist-Shannon beachten.

Deweiteren hat matlab eine gute Hilfe. Z.B. 
http://www.mathworks.de/help/techdoc/ref/fft.html


1
fs = 1000;
2
dt=1/fs;                     %Abtastzeit in s
3
N=100;
4
t=[0:dt:(N-1)*dt]';             %Zeitvektor
5
f=100;                           % Frequenz
6

7
x = cos(2* pi * f * t);
8

9
% FFT
10
fx = fft(x);
11
fx = fftshift(fx);
12

13
figure;
14
subplot(2,1,1)
15
plot(t,x);
16
title('x(t)');
17

18
subplot(2,1,2)
19
plot(linspace(-fs/2, fs/2, N),abs(fx));
20
title('Spectrum of x(t)')

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren