|
|
FFT in Simulink OHNE Leackage |
|
hshshs |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.11.2014, 18:08
Titel: FFT in Simulink OHNE Leackage
|
|
|
|
|
Hi,
ich möchte in Simulink für ein Referat eine ganz einfache FFT realisieren, allerdings tritt bei mir, gal wie ich die Parameter wähle, immer Leackage auf.
Bsp:
Eingangssignal:
Sinus
f=100 Hz --> T = 0,01 s
a=1
Sample Based: Samples per Period = 1024, Sample Time = 0,01s/1024
Solver:
Fixed Step Solver: 0,01s/1024
Simulation Time = 0,01s * 16
FFT:
Anzahl der Samples: 1024*16
Also mein Plan ist, einen 100 Hz Sinus mit genau 1024*16 Abtastwerten (also 16 perioden) iner FFT zu unterwerfen.
Jetzt denk ich mir eigtl. dass ich doch durch die "Fensterung" von GENAU einer Anzahl von N Periode (also bei mir 16) nur bei der Grundfrequenz eine Spektralkomponente > 0 bekommen dürfte.
Schau ich mir jetzt aber das Frequenzdiagramm an erhalt ich bei auftragen von log. Betrag über der Frequenz bei allen harmonischen eine Amplitude mit etwa -140 dB. Komischerweise auch nicht für alle -140 dB sondern leicht "schwingend". Für alle Frequenzkomponenten die keine harmonischen der SInusfrequenz sind erhalte ich etwa -3000 dB.
Wo kommen jetzt diese Werte bei -140dB etwa her?
Liegt das irgendwie daran, dass matlab ja wetediskret rechnen muss? (Also an Stellen an denen gerundet wird o.ä.?)
Im Anhang sind Screenshots vom Blockschaltbild und der Frequenzdiagramme (einmal log. Betrag [dB] über Frequenz und einmal Betrag über Frequenz)
Oder hab ich irgendeinen Denkfehler in meinem Aufbau?
Danke im Voraus für die Hilfe!
Beschreibung: |
|
Download |
Dateiname: |
fft3.JPG |
Dateigröße: |
31.42 KB |
Heruntergeladen: |
478 mal |
Beschreibung: |
|
Download |
Dateiname: |
fft2.JPG |
Dateigröße: |
139.4 KB |
Heruntergeladen: |
459 mal |
Beschreibung: |
|
Download |
Dateiname: |
fft1.JPG |
Dateigröße: |
25.29 KB |
Heruntergeladen: |
458 mal |
|
|
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 15.11.2014, 19:49
Titel:
|
|
Wie Leakage sieht das für mich nicht aus. Offensichtlich stimmt da etwas an der Skalierung der Amplitude nicht. In fft3.jpg sind 500 zu sehen...es müssten ja aber 0.5 bei einem zweiseitigen Spektrum sein, wenn a=1.
Kannst du mal bitte das *.mdl file anhängen?
|
|
|
hshshs |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.11.2014, 21:05
Titel:
|
|
SOrry hatte die Amplitude zwischenzeitlich auf 1000 umgestellt, mit a=1 ist es dann auch 0,5.
Hier aber trotzdem mal das .mdl file.
Wieso sieht das für dich nicht nach leakage aus?
Beschreibung: |
|
Download |
Dateiname: |
fft_v2.mdl |
Dateigröße: |
32.92 KB |
Heruntergeladen: |
447 mal |
|
|
|
DSP |
Forum-Meister
|
|
Beiträge: 2.117
|
|
|
|
Anmeldedatum: 28.02.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2014b
|
|
|
|
|
|
Verfasst am: 15.11.2014, 22:24
Titel:
|
|
|
|
|
Das ist defintiv kein Leakage, da die Amplitude exakt 0.5 beträgt und die Spektrallinie auch exakt bei der Signalfrequenz von 100 Hz liegt.
Leakage tritt ja nur dann auf, wenn eben das Signal nicht mit voller Periode in das Fenster passt oder aber anders ausgedrückt, die Signalfrequenz kein ganzes Vielfaches der Frequenzauflösung df ist.
Die FFT berechnet nun zu jeder diskreten Frequenz n*df, wobei n=0,1,2,...N/2+1 den Frequenzanteil des Signals. Liegt meine Signalfreq. nun nicht genau bei diesen Werten, kann die Amplitude nicht korrekt wiedergegeben werden und es treten Nebenmaxima rechts und links der Signalfreq. auf ("Verschmieren des Spektrums" oder Leakage genannt). Somit müsste hier die Amplitude geringer sein und die Spektrallinie wäre eben nicht bei 100Hz, da n*df nicht auf diesen Wert kommen würde. Ist bei dir aber nicht der Fall.
Das Betragsspektrum ist vollkommen in Ordnung. Warum nun bei der Darstellung in dB nun diese kleinen Maxima auftreten, kann ich nicht genau beantworten. Wobei -160dB = 1e-8 ... sehr klein ist bzw. man kann es vernachlässigen. Aber...ich nehme mal an das sich um Rundungen innerhalb des FFT Blocks handelt. Dort gibt es ja auch unter Data Typen einen "Rounding mode".
|
|
|
hshshs |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.11.2014, 22:45
Titel:
|
|
Danke für die Hilfe.
Das Betragsspektrum mit lin. Skalierung erschließt sich mir jetzt auch.
Was mich schon noch etwas verwirrt, ist das Betragsspektrum in dB, die darin vorhandenen Nebenmaxima und wo diese herkommen. Aber möglicherweise hast du mit deiner Vermutung diesbezüglich ja recht.
Gruß
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|