www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP DFT von einem Sinus Signal


Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab einen Sinus mit Hilfe einer DFT in den Frequenzbereich 
überführt.
Dies hab ich mit Matlab realisiert.
Nun ist es in der Realität ja so, dass die Messdauer nicht unendlich ist 
sondern nur für eine bestimmte kurze Zeit Tm. Dies bedeutet doch, dass 
ich im Zeitberich den abgetasteten Sinus mit einer Fensterfunktion r(t) 
multiplizieren muss. Im Frequenzbereich entspricht dies ja einer 
Faltung.

Wie kann man dies in Matlab realisieren?
Wenn ich nun zur Fensterung ein Blackman-Fenster benutzen will, wie kann 
man dies in Matlab realisieren?

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich zum Beispiel für die Fensterung das Hanning-Fenster verwenden 
möchte, dann müsste man doch das abgetastete Signal x(k) (z.B. von einem 
Sinus) mit der Fensterfunktion f(k) multiplizieren.

X1(k)=x(k)f(k)

Das x(k) von einem Sinus:
x_k = [1 , 0.707 , 0 , -0.707 , -1 , -0.707 , 0 , 0.707 , 1 , 0.707 , 0 , -0.707 , -1 , -0.707 ,0, 0.707];

Wenn ich nun mit Matlab diese Fensterung durchführen möchte, muss ich 
diesen Vektor mit der fensterung multiplizieren?

Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Netz hab ich ein Beispiel gefunden. Sobald ich aber für die 
Fensterung ein Rechteck benutze, ist der Amplitudengang viel besser wie 
z.B. beim Hanning-Fenster.Das verstehe ich nicht.

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach den Vergleich mal mit einer Fensterlänge, die NICHT einem 
ganzzahligen Vielfachen der sin-Periodendauer entspricht. Sollte anders 
aussehen.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verhält sich genauso. Wie müsste ich mein Matlab Programm "DFT_SINUS.M" 
erweitern, damit ich den Effekt einer Fensterung in Frequenzbereich 
sehen kann?

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz oben hab ich mal testweise geschrieben:

y = a1*sin(2*pi*f1*0.793*t); % y-Vektor


Wenn man dann unten das rectwin durch z.b. hann ersetzt, sieht man ein 
schärferes Spektrum. Vor allem in der Figure8 wird das deutlich.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank! Wie müsste ich das MAtlab-Programm "DFT_SINUS.m" abändern, 
damit die Fensterung funktioniert und das man z.B. den Unterschied 
zwischen einem Rechteck und Hanning Fenster sehen kann?

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeile 19 durch

y = a1*sin(2*pi*f1*0.793*t); % y-Vektor
oder
y = a1*sin(2*pi*f1*0.092*t); % y-Vektor

ersetzen. Zusätzlich in Zeile 100 halt nen anderen Fenstertyp einsetzen.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ich dan nicht so ganz verstehe ist, warum hast du die Frequenz f1 um 
den Faktor 0.793 bzw. 0.092 verkleinert?

Nun ist es in der Realität ja so, dass die Messdauer nicht unendlich ist
sondern nur für eine bestimmte kurze Zeit Tm. Dies bedeutet doch, dass
ich im Zeitbereich den abgetasteten Sinus mit einer Fensterfunktion r(t)
multiplizieren muss. Im Frequenzbereich entspricht dies ja einer
Faltung.Bin mir nicht sicher ob dies so korrekt ist.

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort "Leakage". Wenn du ein Rechteckfenster nimmst, kriegst du ja 
ein si-Spektrum.
Ist dein Rechteckfenster so lang, dass eine ganzzahlige Anzahl von 
Perioden erfasst wird, fallen die Nullstellen vom si genau mit den 
periodischen Wiederholungen zusammen. Dann hast du kein Problem und auch 
keine Verbesserung durch eine andere Fensterung.
Ist dies nicht der Fall, sind die Nullstellen der si eben nicht mehr auf 
den Wiederholungen und du kriegst Nebenlinien. Jetzt hilft es, ein 
"sanfteres" Fenster zu nehmen, dessen Welligkeit im Spektrum nicht so 
ausgeprägt ist und eher einem Hügel ähnelt. Das sind dann hamming, hann 
usw. Dann ist die genaue Lage der periodischen Wiederholungen egal, weil 
die Amplitude des Fensterspektrums in diesem Bereich Null ist und dabei 
kaum mehr Wellen hat.

Ich hätte die Frequnz auch vergrößern können, habe mir dein file aber 
nicht genau angeschaut und wollte keine Probleme mit der Nyquist-Grenze 
kriegen. Es kommt vor allem darauf an, dass der Sinus irgendwo mitten in 
der Periode "abgehackt" wird, dass man einen Effekt zugunsten der 
"sanften" Fenster sieht.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Realität ist es ja so, dass die Messdauer nicht unendlich ist
sondern nur für eine bestimmte kurze Zeit Tm. Dies bedeutet doch, dass
ich im Zeitberich den abgetasteten Sinus mit einer Fensterfunktion r(t)
multiplizieren muss, oder?. Im Frequenzbereich entspricht dies ja einer
Faltung.

Was würde es bringen, wenn ich auf f(t) ein Fenster drüberlege?
Also ich meine mit einem Hanning-Fenster multipliziere?

Oder müsste ich das Hanning-Fenster nur über den Sinus legen?

(mit x meine ich die Spitzenspannung des Sinus)

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Praxis nimmt man einen Satz aus Messwerten fester Länge, z.B. 
512. Das entspricht einer Multiplikation des abgetasteten Sinus im 
Zeitbereich mit einem Rechteckfenster entsprechender Länge.

Dann kann man sich entscheiden, ob man es dabei belässt 
(-->Rechteckfenster) oder ob man zur Vermeidung des Leakage zusätzlich 
ein sanftes Fenster draufmultipliziert (-->Hann, Hamming,...) und damit 
die Messwerte entsprechend der Fensterfunktion gewichtet.

Es sind also auf den abgetasteten Sinus eine bis zwei Fensterfunktionen 
anzuwenden. Das Rechteck ist fix, und gegen Leakage kann man noch mit 
einem sanften Fenster angehen.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sehe ich dann im Spektrum bei einem Rechteckfenster kein sin(x)/x 
?

Autor: Jens (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte mit Matlab einen Sinus, der mit einem Rechteckfenster 
überlagert ist, im Frequenzbereich darstellen.Wie bekomme ich dies mit 
Matlab hin, so das ich ein sin(x)/x Darstellung, wie im Bild vom Anhang 
bekomme?

  

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit zero padding:
plot(abs(fft([sin(0:0.3:2*pi) zeros(1,1000)])))

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas, danke für die Unterstützung.
Macht diese Matlab Zeile eine Multiplikation vom Sinus mit einem 
Rechteck?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck's dir doch an. Sinus mit Rechteck multipliziert = ein Stück Sinus 
mit vielen Nullen hinten dran.

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.