Diese zum Teil aus dem Matlab fft-Dokumentation entnommen:fft/ifft: Sampling-Frequenz und Dauer der Signal
Fs = 30; % Sampling frequency
T = 1/Fs; % Sample time
L = 130; % Length of signal
t = (0:L-1)*T; % Time vector
x = sin(2*pi*1*t); % 1 Hz sinus
plot(real(ifft(abs(fft(x))))); % fft then ifft
% Fs = 30, L = 60/90/120 ... : ok
% Fs = 20, L = 60/80/100 ... : ok
% Fs = 30, L = 50/70/80 ... : not ok
Es scheint mir, dass, wenn die Länge des Signals ein Vielfaches der Abtastfrequenz ist, die Sinuskurve wird korrekt rekonstruiert (abgesehen von einigen Verschiebungen), z hier Fs = 30, L = 60
:
Wenn jedoch zum Beispiel Fs = 30, L = 80
(kein Mehrfach), sieht das Ergebnis ungerade:
Ist dieses Verhalten richtig? Warum passiert das und wie kann ich das vermeiden? Einfach einen Teil des Signals wegwerfen, so dass die Länge der Abtastfrequenz "passt"?
Vielen Dank, dass sie löst. Trotzdem verstehe ich nicht, warum die Phaseninformation benötigt wird. Könnten Sie das ein bisschen genauer erläutern? Warum funktioniert es (abgesehen von der Verschiebung) in einigen Fällen korrekt? – Tobold
Überprüfen Sie die fft (oder dft) Definition. Die Häufigkeiten im Ergebnis von fft (X) sind (Fs/2) * (0 ... (N/2) +1)/(N/2 + 1). Um zu Ihrem 1Hz-Sinus zu kommen, müssen Sie k so finden, dass (Fs/2) * k/(N/2 + 1) = 1. Wenn k eine ganze Zahl ist (runde Zahl), wird keine Phase (Verzögerung) benötigt 1Hz, und das passiert, wenn N/Fs (oder L/Fs in Ihrem Fall) eine ganze Zahl ist. Wenn dies nicht der Fall ist, gibt es keine 1Hz in Ihrem FFT-Ausgang, und der Algorithmus "repräsentiert" 1Hz in einem Wert k, der nahe bei 1Hz plus einem Phasenwert liegt, der ihn auf 1Hz verzögert. Ich hoffe meine Erklärung ist etwas, was klar ist. :) – Ran
Danke! Jetzt ist es klar :) – Tobold