Hallo, ich nehme mit einem ADC(f_ab= 1MHZ) ein periodisches Signal auf und bekomme so um die 500 Abtastwerte. Diese möchte ich dann mit einer FFT auswerten. Die Frequenzauflösung wäre ja dann 2kHZ. Die würde ich gern erhöhen, dabei bin ich auf das Zero-Padding gestoßen. Meine Frage nun: Wieviel Nullen darf man denn anhängen, also wo ist da die Grenze? Muss ich sonst noch was beachten?
Soweit ich das verstanden habe, kannst du nur so viele Nullen anhängen, sodass die Gesamtzahl der Samples nicht größer als die Genauigkeit der FFT ist. Beispielsweise möchtest du eine 1024 FFT machen, hast aber nur die 500 Abtastwerte. Also kannst du maximal 524 Nullen anhängen. Mehr würde die FFT dann sowieso nicht ausspucken. Das ist jetzt vielleicht nicht in jeder Hinsicht exakt korrekt erklärt, dürfte deine Frage aber erstmal beantworten.
Nik084, das Zero-padding wurde erfunden, um Messreihen auf ganze 2er-Potenzen zu erweitern (z.B. von 500 Messpunkten auf 512). Die FFT ist halt auf 2^N Messwerte angewiesen. Aber! Die FFT hält alles, was man ihr zur Analyse vorwirft, für echte Messwerte. Entsprechend "sieht" sie, wenn man z.B. ein periodischen Signal mit Nullen erweitert, ein periodisches Signal mit Unterbrechung; d.h. das Nutzsignal, multipliziert mit einer Rechteckfunktion. Entsprechend bekommt man dann als Ergebnis das Spektrum des periodischen Signals, gefaltet mit dem des Recheck-Impulses. Die zusätzliche Auflösung, geht also nicht auf Dein Nutzsignal zurück, sondern ist, genaugenommen, ein Artefakt. Genausogut könntest Du Dein Spektrum per Interpolation spreizen. Die Menge an Information, die in einer Messreihe enthalten ist (grob gesagt die Anzahl binärer Stellen), wird durch die Fouriertransformation nicht grösser. Bestenfalls bleibt sie konstant. mare_crisium
Hi also wie Harald F. schon sagte kriegst du das durch Interpolation hin und zwar wird dein Spektrum nicht beeinflusst jedoch die Nyquist-Grenze erhöht sich. Da das Spektrum periodisch ist musst du dann dein Nutzsignal mit einem Tiefpass filtern. Gruß Gamon
Hi, schonmal danke für die Antworten. Ok also zeropadding ist wohl die falsche Wahl. Würde das denn was bringen wenn ich einfach mehrere Perioden des Nutzsignals aufnehme? Dann hätte ich ja mehr Abtastwerte, aber die Information würde dadurch ja auch nicht wirklich steigen. Ansonsten beschäftige ich mich mal mit Interpolation.
Das Aufaddieren von Einzelsignalen kann die Messung verbessern. Es wird z.B. bei Pulse-FT-NMR-Spektroskopie oder der FTIR-Spektroskopie gemacht, um das Signal/Rausch-Verhältnis zu vergrößern.
also nur so mal grundsätzlich dein SNR Wert ist bei dieser Abtastung wirklich super da brauchst du dir gar keine gedanken zu machen. Aber eine Frage möchtest du jetzt die Abtastung erhöhen oder die Frequenz deines Signals?
Ich wollte eigentlich nur die Auflösung der FFT erhöhen, um die Freqenz des Nutzsignals besser aufzulösen.
Nik084, Um eine bessere spektrale Auflösung zu bekommen, hilft nur eine längere Messzeit. mare_crisium
Hi ... Also mir hat in der Hinsicht sehr geholfen ... das man sich vorstellt das die FFT(DFT) eigentlich die DTFT abtastet ... je länger dein Signal ist desto schmäler wird die Mainlobe in der DTFT, durch anfügen der Nullen wird die DTFT dann nur noch öfter abgetastet ... was an der Mainlobebreite nichts ändert. Auch bezgl. Fensterung ist das Rechteckfenster (das du ja indirekt andwendest) optimal hinsichtlich der Mainlobebreite. Was jedoch passiern kann ist, das wenn die Abtastung der DTFT zu gering ist das zb. bei Ermittlung der Signalfrequenz (Aufgrund des Maximums im Frequenzbereich) ein Fehler auftritt, weil eben gerade der Abtastpunkt nicht am Maximum der Sincfunction liegen kann -> deshalb benötigst du Zeropadding. .) Um Auflösung zu erhöhen -> mehr Signalinformation .) Um Frequenzgenaugigkeit zu erhöhen -> Zeropadding Hab dir auch 2 Plots angehängt (nicht wirklich sehr professionell, ohne Beschriftung aber sollen ja nur die Auswirkung von Zerropadding zeigen). Hoffe ich hab dich nicht zu sehr verwirrt :-) lg Peter
Hm, ist das was man da sieht (also bei dem mit Zero-Padding) der Betrag von sinc(x)?
Ja genau der Plot stellt den Betragsfrequenzganz eines Sinussignals dar (sig=sin(0:0.1:10*pi)) -> deshalb auch die halbe Sincfunktion. Um den Effekt zu zeigen kann man sich auch einfach die Fouriertransformierte der Fensterfunktion (Rechteck) anschaun. Einfaches Programm dazu: (in Matlab) %% rect_sig=ones(1,500); % Fensterfunktion -> Signalauschnitt sig_freq=fft(rect_sig,1024); % Auffüllen auf 1024 Werte -> Zeropadding sig_freq=fftshift(sig_freq); plot(sig_freq,'-*') %% lg Peter
Peter K. schrieb:
> plot(sig_freq,'-*')
Natürlich plot(abs(sig_freq),'-*');
lg Peter
> Hi also wie Harald F. schon sagte kriegst du das durch Interpolation hin > und zwar wird dein Spektrum nicht beeinflusst Doch, es wird verändert; oft nur wenig, aber manchmal auch stärker: Du kannst ja mal einen sinusförmigen Puls von 1 Wellenlänge nehmen, mit der FFT transformieren und dann unterschiedlich viele Nullen anhängen. Je nachdem, wieviele Nullen Du anhängst, ändert sich die Frequenz mit der maximalen Amplitude sehr stark. Der Grund ist, daß die FFT das periodisierte Signal transformieren will. Wenn Dein Signal mit Nullen eine Länge hat, die ein Vielfaches einer Periodendauer ist, wird die richtige Frequenz angezeigt, sonst eine falsche. Gruß, Michael
Michael Lenz schrieb: > Beitrag melden | Bearbeiten | Löschen | Mar Michael Lenz schrieb: >> Hi also wie Harald F. schon sagte kriegst du das durch Interpolation hin >> und zwar wird dein Spektrum nicht beeinflusst > Doch, es wird verändert; oft nur wenig, aber manchmal auch stärker: > > Du kannst ja mal einen sinusförmigen Puls von 1 Wellenlänge nehmen, mit > der FFT transformieren und dann unterschiedlich viele Nullen anhängen. > Je nachdem, wieviele Nullen Du anhängst, ändert sich die Frequenz mit > der maximalen Amplitude sehr stark. > > Der Grund ist, daß die FFT das periodisierte Signal transformieren will. > Wenn Dein Signal mit Nullen eine Länge hat, die ein Vielfaches einer > Periodendauer ist, wird die richtige Frequenz angezeigt, sonst eine > falsche. > > > > Gruß, > Michael Das nennt man leakage-effect - dein Spektrum "läuft" aus. Wikipedia zeigt das sehr schön: http://de.wikipedia.org/wiki/Leck-Effekt
Bei Bilddatenkompressionen, die mit ähnlichen Faltungsalgorithmen arbeiten, z. B. Wavelet (SPIHT, JPEG-2000), wird vor der Transformation (2-D-Faltung) der Bildinhalt zur Aufrundung auf die erforderlichen n x 2^m (m = wave-levels) an beiden Bildrändern (rechts und unten) gespiegelt, nicht gepadded. Bei 500 Messwerten würde man dann a[500] = a[498], a[501] = a[497] etc. setzen, um auf 512 zu kommen. Das Spiegeln hat weniger Einfluss auf das Kompressionsergebnis (erzielbarer Kompressionsfaktor für verlustfreie Kompression) als es das Anhängen von Nullen hätte. Zur reinen Frequenzanalyse hingegen weiß ich nicht, ob hier Spiegeln ggf. nicht auch besser wäre, als Nullen anzuhängen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.