Forum: Digitale Signalverarbeitung / DSP / Machine Learning Zero Padding


von Nik084 (Gast)


Lesenswert?

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?

von Delete M. (skywalker)


Lesenswert?

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.

von Harald M. (mare_crisium)


Lesenswert?

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

von gamon (Gast)


Lesenswert?

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

von Nik084 (Gast)


Lesenswert?

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.

von Stefan B. (Gast)


Lesenswert?

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.

von gamon (Gast)


Lesenswert?

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?

von Nik084 (Gast)


Lesenswert?

Ich wollte eigentlich nur die Auflösung der FFT erhöhen, um die Freqenz 
des Nutzsignals besser aufzulösen.

von Harald M. (mare_crisium)


Lesenswert?

Nik084,

Um eine bessere spektrale Auflösung zu bekommen, hilft nur eine längere 
Messzeit.

mare_crisium

von Peter K. (peter26)


Angehängte Dateien:

Lesenswert?

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

von Mark B. (markbrandis)


Lesenswert?

Hm, ist das was man da sieht (also bei dem mit Zero-Padding) der Betrag 
von sinc(x)?

von Peter K. (peter26)


Lesenswert?

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

von Peter K. (peter26)


Lesenswert?

Peter K. schrieb:
> plot(sig_freq,'-*')

Natürlich plot(abs(sig_freq),'-*');

lg Peter

von Michael L. (Gast)


Lesenswert?

> 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

von Steffen (Gast)


Lesenswert?

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

von df1as (Gast)


Lesenswert?

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