mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Zero Padding


Autor: Nik084 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Delete Me (skywalker)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Harald M. (mare_crisium)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gamon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nik084 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: gamon (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Nik084 (Gast)
Datum:

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

Autor: Harald M. (mare_crisium)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nik084,

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

mare_crisium

Autor: Peter K. (peter26)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Mark Brandis (markbrandis)
Datum:

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

Autor: Peter K. (peter26)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter K. (peter26)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter K. schrieb:
> plot(sig_freq,'-*')

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

lg Peter

Autor: Michael Lenz (hochbett)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: df1as (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.