WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

FFT in Simulink OHNE Leackage

 

hshshs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2014, 18:08     Titel: FFT in Simulink OHNE Leackage
  Antworten mit Zitat      
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!

fft3.JPG
 Beschreibung:

Download
 Dateiname:  fft3.JPG
 Dateigröße:  31.42 KB
 Heruntergeladen:  478 mal
fft2.JPG
 Beschreibung:

Download
 Dateiname:  fft2.JPG
 Dateigröße:  139.4 KB
 Heruntergeladen:  459 mal
fft1.JPG
 Beschreibung:

Download
 Dateiname:  fft1.JPG
 Dateigröße:  25.29 KB
 Heruntergeladen:  458 mal


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 15.11.2014, 19:49     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
hshshs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.11.2014, 21:05     Titel:
  Antworten mit Zitat      
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?

fft_v2.mdl
 Beschreibung:

Download
 Dateiname:  fft_v2.mdl
 Dateigröße:  32.92 KB
 Heruntergeladen:  447 mal
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 15.11.2014, 22:24     Titel:
  Antworten mit Zitat      
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.

Code:

Fs = ... % Abtastfreuquenz
N = ... % Anzahl Messwerte -> Y = fft(signal, N)

df = FS/N; % Frequenzauflösung

% damit ergibt sich der Frequenzvektor
f = 0:df:Fs/2 % für den positiven Freq.-bereich
 


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".
Private Nachricht senden Benutzer-Profile anzeigen
 
hshshs

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2014, 22:45     Titel:
  Antworten mit Zitat      
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ß
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.