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

Fensterung

 

Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.09.2015, 16:20     Titel:
  Antworten mit Zitat      
Ich weiß es ist vielleicht eine sehr blöde Frage und vermutlich weiß hier jeder warum das so ist außer mir...

Aber ich verstehe nicht so ganz warum die Daten der FFT quasi ganz zu anfang nicht von Null herlaufen sondern irgendwo weiter oben auf der y-achse beginnen.
Kann mir das vielleicht jemand für blöde erklären?!

Amplitude spectrum for az, z = 25,0 m, load level 28.fig
 Beschreibung:

Download
 Dateiname:  Amplitude spectrum for az, z = 25,0 m, load level 28.fig
 Dateigröße:  994.41 KB
 Heruntergeladen:  508 mal
Amplitude spectrum for az, z = 17,0 m, load level 28.fig
 Beschreibung:

Download
 Dateiname:  Amplitude spectrum for az, z = 17,0 m, load level 28.fig
 Dateigröße:  994.45 KB
 Heruntergeladen:  484 mal
Amplitude spectrum for az, z = 6,0 m, load level 28.fig
 Beschreibung:

Download
 Dateiname:  Amplitude spectrum for az, z = 6,0 m, load level 28.fig
 Dateigröße:  994.76 KB
 Heruntergeladen:  509 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.09.2015, 19:39     Titel:
  Antworten mit Zitat      
In dieser Darstellung mit dem beschränktem Bereich ist das schwer zu sagen. Es kommt mir so etwas unnatürlich vor. Ich würde an deiner Stelle die dB Skalierung bevorzugen und auch nicht die y-Achse limitieren. Du kannst ja gern nur den interessanten Frequenzbereich von 0-20Hz nehmen, aber mal bitte ohne Limit von y und in dB. Hänge mal noch diese Plots an.
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 08:04     Titel:
  Antworten mit Zitat      
wenn ich die y-achse nicht limitiere dann sehe ich den peak quasi gar nicht... verstehe nicht weswegen er oben beginnt...

Beispiel ohne y-limit.fig
 Beschreibung:

Download
 Dateiname:  Beispiel ohne y-limit.fig
 Dateigröße:  996.08 KB
 Heruntergeladen:  498 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 08:25     Titel:
  Antworten mit Zitat      
kann ich für die änderung in db einfach den folgenden Befehl benutzen?

ydb = mag2db(y)
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.09.2015, 08:34     Titel:
  Antworten mit Zitat      
Die FFT Funktion liefert dir schon die richtige Skalierung in einem Vektor. Du musst ihn nur verwenden Wink

Code:

...
[mag, mag_dB, fv] = FFT_betragsspektrum( y(i,:), nfft, Fs, 1, 0) ; % Funktionsaufruf

    % mag = lineare Skalierung
    % mag_dB = log. Skalierung 20*log10(mag)

    plot(fv,mag_dB,'b');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 08:39     Titel:
  Antworten mit Zitat      
ja Embarassed ich bin echt manchmal etwas durch den Wind... Aber nun zeigt es mir etwas an, das ich noch weniger verstehe... :-/

Beispiel ohne y-limit und mag_dB.fig
 Beschreibung:

Download
 Dateiname:  Beispiel ohne y-limit und mag_dB.fig
 Dateigröße:  981.67 KB
 Heruntergeladen:  494 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.09.2015, 09:39     Titel:
  Antworten mit Zitat      
Die dB Skalierung hat den Vorteil, dass große Wertebereich besser dargestellt werden können. Wenn man wie in deinem Fall vor allem im niederfrequenten Bereich hohe Amplituden hat und im Anschluss nur noch ganz kleine, sind dort die Frequenzanteile in der linearen Darstellung kaum noch richtig zu sehen.

40dB = 100
20dB = 10
0 dB = 1 -> also keine Verstärkung
- 3dB = 1/sqrt(2) = 0.707
-20dB = 0.1
-20dB = 0.01

Der etwas eckige Verlauf deines Spektrums liegt wohl an der zu geringen Anzahl an Messwerten. Ich empfehle dir daher die Anzahl Messwerte nfft zu erhöhen.

Code:

nfft = length(y(i,:));
% nächste 2er Potenz
nfft = 2^nextpow2(nfft);

[mag, mag_dB, fv] = FFT_betragsspektrum( y(i,:), nfft, Fs, 1, 0) ; % Funktionsaufruf
 


Nur als Bsp...eine 2er Potenz als Anzahl ist deshalb sinnvoll, da der FFT Algorithmus daraufhin optimiert ist und dann effizient rechnen kann. Es ist aber nicht zwingend notwendig. Ich weiß ja nicht wie viele Messwerte dein Signal hat.

Wenn du das nfft erhöhst, werden automatisch Nullen an y angefügt und die Frequenzauflösung df wird damit besser. Denn df = Fs/nfft.

Der Peak am Anfang kommt vermutlich durch den Gleichsignalanteil, welcher > 0 ist. Einfach mal sum(y(i,Smile)/nfft ausgeben lassen. Dieser Wert entspricht dem Gleichsignalanteil im Spektrum.
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 09:47     Titel:
  Antworten mit Zitat      
Vielen Dank für deine ausführliche Erklärung. Das hilft mir weiter vorallem was das Verständnis angeht Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 09:53     Titel:
  Antworten mit Zitat      
leider bekomme ich jedoch dann wieder die folgende meldung, die ich schon mal hatte.... :-/

Error using .*
Matrix dimensions must agree.

Error in FFT_betragsspektrum (line 31)
sig_win = sig .* win * nfft / sum(win); % Fensterung mit Amplitudenkorrektur

ich habe jeweils in meinen Signalen 17642 x 1 Messwerte, aber nun ich ja meine Länge nfft 32768....
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 10:09     Titel:
  Antworten mit Zitat      
also habe ich nun für sig= 17642 x 1 und für win = 32768 x 1.

Wie kann ich das ändern?
Das liegt ja nun daran, dass ich nfft erhöht habe.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.09.2015, 10:12     Titel:
  Antworten mit Zitat      
Gut das du mich darauf hinweist. Das ist ein Fehler in meiner Funktion. Das Anhängen von Nullen passiert automatisch in der Funktion fft(). Setzt man aber ein Fenster ein, muss das sig vorher schon manuell ergänzt werden, damit es die gleiche Länge wie das Fenster win hat. Hier die Korrektur...

Code:

function [mag, mag_dB, fv] = FFT_betragsspektrum( signal, nfft, fa, window, scale)
% Input:
% Signal im Zeitbereich
% nfft = Anzahl Messwerte für fft
% wenn nfft > length(sig) -> fft(sig,nfft) führt Zeropadding durch
% fa = Abtastfreq.
% window: 1 =  Fensterung mit Hanning window
% scale: 0 = keine Impulsantwort als Eingang, 1 = Impulsantwort
% Output:
% Magnitude des Spektrums linear und dB skaliert
% Frequenzvektor fv in [Hz] von 0...fa/2

% un-,gerade Anzahl Messwerte?
if mod(nfft,2) == 0;
    k = (nfft/2) + 1;
else
    nfft = nfft + 1;
    k = (nfft/2) + 1;
end

fn = fa/2; % Nyquistfreq.
df = fa/nfft; % Frequenzauflösung des Spektrums
% Frequenzvektor: Darstellung bis Nyquistfreq.
fv = 0: df : fn;

sig = signal(:);

% Fensterung
if window == 1
    if nfft > size(sig,1)
         win = hann(size(sig,1)); % Hanning Fensterfunktion
         sig_win = sig .* win * size(sig,1) / sum(win);        
    else
         win = hann(nfft); % Hanning Fensterfunktion
         sig_win = sig .* win * nfft / sum(win); % Fensterung mit Amplitudenkorrektur
    end
   
    sig = sig_win;
end

% Signal transformieren
Fy = fft(sig,nfft);
 
%   Betrag - nur positives Freq.spektrum
if scale == 0
    Fy_pos0 = abs(Fy(1:k));

    %   Skalierung  
    mag = [Fy_pos0(1)/nfft ;Fy_pos0(2:k-1)/(nfft/2);Fy_pos0(k)/nfft];
else % nicht durch nfft teilen bei Impulsantwort
    mag = abs(Fy(1:k));
end

% Umrechnung in dB
mag_dB = 20*log10(mag + eps); % eps = kleine Konstante zur Vermeidung von log(0)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 10:21     Titel:
  Antworten mit Zitat      
Okay cool, vielen Dank. Nun bekomme ich folgende Abbildung raus. Sieht schon mal besser aus.

Aber nochmal kurz zu dem Gleichsignal. Kann ich das denn quasi rausnehmen? Sodass ich am Anfang irgendwie bei Null beginne? Das versteh ich noch nicht so ganz.

Beispiel ohne y-limit und mag_dB berichtigt.fig
 Beschreibung:

Download
 Dateiname:  Beispiel ohne y-limit und mag_dB berichtigt.fig
 Dateigröße:  1.31 MB
 Heruntergeladen:  458 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 10:21     Titel:
  Antworten mit Zitat      
Ich bin ja vor allem daran interessiert wie groß die Amplituden sind im Vergleich zueinander. Und wenn ich mir das nun genauer ansehe und nicht mit dB Skallierung sieht es noch etwas verwirrender aus...

Beispiel mit y-limit und mag.fig
 Beschreibung:

Download
 Dateiname:  Beispiel mit y-limit und mag.fig
 Dateigröße:  1.33 MB
 Heruntergeladen:  532 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.09.2015, 10:35     Titel:
  Antworten mit Zitat      
Der Gleichsignalanteil ist nichts anderes als eine Verschiebung auf der y-Achse. Man kann ihn rausrechnen durch...

Code:

signal = signal - sum(signal)/length(signal)
 


Tatsichlich ist aber nicht nur ein Gleichsignalanteil vorhanden sondern erst bei 0.03Hz die größte Amplitude des Spektrums. In so fern würdest du selbst mit einem Gleichsignalanteil von 0 einen Peak bei 0.03Hz im Spektrum sehen. Offensichtlich ist diese Frequenz in deiner Messung enthalten.

Was die Auswertung deiner Daten angeht, kann ich dir nicht wirklich helfen. Das musst du schon selber machen. Ich kann dir nur bei der richtigen Berechnung und Darstellung des Frequenzspektrums behilflich sein.
Private Nachricht senden Benutzer-Profile anzeigen
 
Karolinchen
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 08.09.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 10:48     Titel:
  Antworten mit Zitat      
Jap ist mir bewusst Smile Aber du hilfst mir trotzdem extrem weiter, vielen Dank dafür !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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.