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

spectrogram output

 

tob
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2011, 11:25     Titel: spectrogram output
  Antworten mit Zitat      
Hallo an alle,

ich habe folgendes Problem:

ich benutze spectrogram um das Spektrum von einem Vibrationssignal x (m/s^2) zu erzeugen.

[S,F,T]=spectrogram(x,window,noverlap,F,fs)

S ist eine Matrix von komplexen Zahlen. Bis daher alles klar.

Wenn ich die Amplituden erhalten will: abs(real(S)). Müssten dann die Amplituden in m/s^2 sein oder??

In manchen Foren wird empfohlen 20*log(abs(S)) zu rechnen was dann dB ergeben soll, was aber von mir aus nicht stimmt da erstens die Amplitude ja der reele Teil der Komplexen Zahl ist und zweitens um dB zu erhalten ich ja irgend einen Vergleichswert brauche (wie in der Akustik den Vergleichsdruck p0).

Kurze Zusammenfassung der Frage:
Bei einem input x in m/s^2, wie erhalte ich die Amplituden und in welcher Einheit sind sie?
Hat es physikalisch Sinn 20*log(abs(S)) zu rechnen?

Tob[/b]
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: 21.09.2011, 11:49     Titel:
  Antworten mit Zitat      
Code:
In manchen Foren wird empfohlen 20*log(abs(S)) zu rechnen was dann dB ergeben soll, was aber von mir aus nicht stimmt da erstens die Amplitude ja der reele Teil der Komplexen Zahl...


Wie kommst du denn darauf? Die Amplitude ist der Betrag der komplexen Zahl und nicht nur der Realteil:

abs(S) = sqrt(realteil^2 + imaginärteil^2)

Die Umrechnung in dB ist auch lediglich eine Skalierung, so dass man eine logarithmische Darstellung hat. Das hat den Vorteil, dass man größere Bereiche übersichtlicher Darstellen kann und Verläufe teils vereinfacht/ besser interpretierbar dargestellt werden können. So wird z.B. aus einem exponentiellem Verlauf eine Gerade Wink. Du kannst es aber eben auch linear darstellen...kommt darauf an, was für ein Signal du hast. Wenn du das Spektrogramm darstellen lässt, wird die Amplitude jedenfalls in dB skaliert 20*log(abs(S)+eps)

Die Einheit wird dadurch aber nicht verändert, sondern bleibt gleich zum Eingangsignal.
Private Nachricht senden Benutzer-Profile anzeigen
 
tob
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2011, 12:24     Titel:
  Antworten mit Zitat      
...stimmt danke...war davon überzeugt dass es nur der reele teil wäre, ist aber Blödsinn...
Private Nachricht senden Benutzer-Profile anzeigen
 
tob
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2011, 13:50     Titel:
  Antworten mit Zitat      
...nochmal zur Einheit...

ich versteh dann nur nicht dass ich bei einem Maximalwert von 100 m/s^2 im Eingangssignal Amplituden von bis zu 3000 bekomme...das können doch keine m/s^2 sein...
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: 21.09.2011, 14:13     Titel:
  Antworten mit Zitat      
In der Tat kann ich es auch nicht nachvollziehen, warum das Spektrum S nicht wie bei einem Amplitudenspektrum mittels FFT skaliert wird.

Bei einer FFT muss der Betrag entweder durch N (=Anzahl Messwerte) geteilt werden, wenn man sowohl das positive als auch das negative Frequenzspektrum darstellt. Da ja aber nur der positive Teil interessiert (und auch nur dieser in spectrogram verwendet wird), wird außer dem Gleichanteil (f = 0) und der der Anteil bei der Nyqistfreq. mit N/2 skaliert. Nehmen wir an, die Segmentlänge (das Zeitsignal wird ja in Segmente zerlegt) beim spectrogram sei N=1024,
dann ist S=[1:513] Werte lang, wobei S(1) der Gleichanteil und S(513) der Wert bei der Nyqistfreq. ist.

Bsp:

Code:
% Berechnung der FFT
% ------------------
H = fft(y,N);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
amplH = abs(H);
% Skalierung
amplitudengang = [amplH(1)/N amplH(2:N/2)/(N/2) amplH((N/2)+1)/N ]; % DC-Bin und Nyqiust auf N normieren!
 


Ob beim Spektrogramm der Skalierungsfaktor N nun die Segmentlänge ist, oder aber die Länge des kompl. Signals ist, weiß ich auch nicht. Ich vermute mal ersters...probier das einfach mal aus.
Private Nachricht senden Benutzer-Profile anzeigen
 
tob
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2011, 16:59     Titel:
  Antworten mit Zitat      
Nur um nochmal sicher zu gehen:

Code:
%Fs, signal...
nfft = 2048;
noverlap = floor(0.5*nfft);
window = hann(nfft);

[B,T,F] = spectrogram(signal,window,noverlap,nfft,Fs);
%b: beliebig gewählte Zeile
w1=((abs(B(b,:))));
w1=w1';
w=20*log10(2*abs(w1)/2048);
 


w ergibt dann den Verlauf der Amplitude in dB einer gewissen Frequenz (b) über die Zeit.

Ist das so richtig?
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: 21.09.2011, 17:29     Titel:
  Antworten mit Zitat      
So lange b nicht 1 (=Gleichanteil) oder 1025 (= Nyquistfreq.) entspricht das meiner oberen Annahme. Aber ich kann die Richtigkeit der Skalierung nicht garantieren...es muss ja eine Grund geben, warum das in der Matlab Funktion spectrogram() nicht gemacht wird. Ich habe die Skalierung ja nur einfach für ein Frequenzspektrum (siehe FFT Bsp.) eines Signals übertragen.

Edit: Warum berechnest du denn zwei mal den abs()...ist doch unnötig.
Private Nachricht senden Benutzer-Profile anzeigen
 
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.