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

Farbbereich vom Spekrogramm anpassen

 

sprinter1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2015, 14:46     Titel: Farbbereich vom Spekrogramm anpassen
  Antworten mit Zitat      
Hallo,

für die Darstellung des frequenzabhängigen Verlaufs des Schalldrucks verschiedener Fahrzeugvorbeifahrten habe ich einige Spektrogramme erstellt. Das funktioniert auch alles wunderbar. Einziges Problem ist: Im Plot wird nur die Hälfte des zur Verfügung stehenden in der colorbar angezeigten Farbbereichs verwendet. Hauptsächlich Rot- und Gelbtöne. So kann man nicht viel erkennen. Besser wäre es, wenn auch die Blautöne genutzt werden. Möglicherweise liegt es daran, dass vereinzelnd sehr niedrige Werte vorkommen, diese dann in tiefblau angezeigt werden nur so selten sind, dass sie nicht auffallen. Die könnten dann auch ruhig weggelassen werden.

Hier der Ausschnitts des Codes. Ist ohne Messdateien natürlich nicht funktionsfähig, aber zumindest veranschaulicht er, dass nichts besonderes angestellt wird:
Code:

    % Parameter angeben
    nfft = 8192;
    window = hann(nfft);
    overlap = 0.5;
 
    % Spektroamm berechnen
    [S,F,T,P] = spectrogram(Analysierendes_Signal,window, round(overlap*nfft), nfft,Samplingrate_analysierendes_Signal, 'yaxis');
   
    % Plot erstellen
    surf(T,F,10*log10(P),'edgecolor','none'); axis tight;

    % Plot anpassen
    ylim([31.5 8000])
    xlim([0 16])
    xlabel('Zeit [s]'); ylabel('Frequenz [Hz]');
    set(gca,'YTick',[31.5 63 125 250 500 1000 2000 4000 8000])
    set(gca,'YTickLabel',{'31,5' '63','125','250','500','1k','2k','4k','8k'})
    set(gca,'Yscale','log')
    set(gca,'XTick',[1:2:15])
    set(gca,'XTickLabel',{'-14','-12','-10','-8','6','-4','-2','0','2'})
    view(0,90)

    % colorbar erstellen
    cb=colorbar('location','northoutside','position',[0.675 0.95 .225 .025]);
    set(cb,'xaxisloc','top');
    zlab = get(cb,'ylabel');
    set(zlab,'String','Ampl. [dB]','FontSize', 7);
     
    % Titel hinzufügen
    Titel_Name = [Name{kk}  ' ' Geschwindigkeit{pp}];
    title(Titel_Name)
 


Im Anhang ein Bild, welches die Problematik darstellt.

Über Tipp würde ich mich sehr freuen!

Spektrogramm.png
 Beschreibung:

Download
 Dateiname:  Spektrogramm.png
 Dateigröße:  318.46 KB
 Heruntergeladen:  393 mal


sprinter1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2015, 14:50     Titel:
  Antworten mit Zitat      
Leider falsches Bild eingefügt Rolling Eyes
Wäre toll, wenn es jemand löschen könnte. Hier das richtige...

Spektrogramm.png
 Beschreibung:

Download
 Dateiname:  Spektrogramm.png
 Dateigröße:  30.08 KB
 Heruntergeladen:  336 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.12.2015, 14:57     Titel:
  Antworten mit Zitat      
Hallo,

generell kann das durch Setzen der Eigenschaft clim beeinflusst werden.
Code:


Sollte bei Spektrogrammen auch klappen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
toeh
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 04.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2016, 15:49     Titel: Achsenskalierung Spektrogramme
  Antworten mit Zitat      
Hallo, bin neu hier und mit Matlab nur ein wenig bewandert.
Ich habe auch eine Frage zur Gestaltung von Spektrogrammen. Meine Spektrogramme funktionieren, alles super, bis auf die Skalierung der x- und y-Achse. Mein Datenumfang ist sehr groß, sodass Matlab automatisch die Zeit in Minuten und die Frequenz in Kilohertz angibt. Genau das möchte ich nicht. Wie kann ich dem Befehl "spectrogram" sagen, dass ich die Zeit in Sekunden und die Frequenz in Hertz haben möchte? Ich hab die Hilfe schon verwendet, aber sie gibt mir keinen Hinweis dazu.
Ich freue mich auf eine Antwort und danke herzlich im Voraus.

Gruß
Toeh
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: 04.01.2016, 17:44     Titel:
  Antworten mit Zitat      
Hallo,

wie wäre es du rechnest t und f einfach entsprechend auf die gewünschte Größe um?

Code:

% Plot erstellen
    surf( T * 60 , F * 1000, 10*log10(P) ,'edgecolor','none'); axis tight;
 


Dann kannst du noch die Labels der Achsen mit

Code:

ax = gca;
ax.XTick =[1,...]
ax.XTickLabel = {'1',...}
ax.YTick =[1,...]
ax.YTickLabel = {'1',...}
 


bearbeiten.
Private Nachricht senden Benutzer-Profile anzeigen
 
toeh
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 04.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2016, 10:46     Titel:
  Antworten mit Zitat      
Hallo DSP,

ich stehe gerade auf dem Schlauch: Aus der Zeit in Sekunden und einer Beschleunigung errechnet mir das Spektrogramm eine Abhängigkeit zwischen der Zeit, welche automatisch von Matlab in Minuten umgerechnet wird, und einer Frequenz, die automatisch in Kilohertz ausgegeben wird.
Wie kann ich in diesen Automatismus eingreifen, sodass die Einheiten Sekunden und Hertz als Größen im Spektrogramm erscheinen?

Beispiel:
spectrogram(Sensor1,256,120,256,fs)
title('Sensor1');

xlabel und ylabel verändern die Achsen nur augenscheinlich, inhaltlich logischerweise nicht.

Meinst du, dass ich mir t und f aus dem Spektrogramm ausgeben lassen soll (wie geht das) und mir diese Größen mit "surf" erstelle?

Viele Grüße
Toeh
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: 05.01.2016, 20:04     Titel:
  Antworten mit Zitat      
Siehe 1. Post Wink

Code:
% Spektroamm berechnen
    [S,F,T,P] = spectrogram(Analysierendes_Signal,window, round(overlap*nfft), nfft,Samplingrate_analysierendes_Signal, 'yaxis');


Und zur Darstellung dann meinen Code verwenden. x- und ylabel sind nur die Beschriftung der Achsennamen. Mit den ticks kannst du die Zahlen an den Achsen ändern. Nutze die Matlab Doku Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
toeh
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 04.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2016, 08:27     Titel:
  Antworten mit Zitat      
Herzlichen Dank DSP, ich werde deine Empfehlung umsetzen. Very Happy

Viele Grüße
Toeh
Private Nachricht senden Benutzer-Profile anzeigen
 
toeh
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 04.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.01.2016, 17:10     Titel:
  Antworten mit Zitat      
Hallo DSP,

ich wollte mich nochmal zurückmelden und herzlich danken, auch wenn es schon einen Weile her ist.
Das 3D-Diagramm sieht super aus, aber 2D ist aussagekräftiger.
Mit plot bekomme ich es nicht recht hin.
Kannst du mir noch eine Hilfestellung geben, das Spektrogramm 2D zu plotten?

Viele Grüße
Toeh
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.01.2016, 18:06     Titel:
  Antworten mit Zitat      
Hallo,

ein Spektrogramm in 2D erstelle ich so:

Code:

% Spektroamm berechnen
    [S,F,T,P] = spectrogram(Analysierendes_Signal,window, round(overlap*nfft), nfft,Samplingrate_analysierendes_Signal, 'yaxis');

imagesc(t,fv,S);
axis xy
colormap(gca,jet);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
toeh
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 04.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2016, 10:49     Titel:
  Antworten mit Zitat      
Hallo DSP,

danke der Antwort. Deine Lösung brachte mich nur nicht auf den richtigen Zweig. t und fv sind die x- und y-Vektoren in der Darstellung für imagesc. S ist die Variable aus der Spektralanalyse. t ist bei mir die Zeit, fv das Messignal?
Es kommt zwar ein Bild heraus, was nahezu komplett eine Farbe abbildet, aber nicht das typische Spektrogramm darstellt. Auch kann dieses Bild mit allen anderen Variablen außer S erstellt werden. S ist ein komplexer Vektor, der hier einen Error verzappt. Was mache ich falsch?

Viele Grüße
Toeh
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: 01.02.2016, 18:25     Titel:
  Antworten mit Zitat      
Hallo,

sorry, ich habe nicht auf die Variablennamen geachtet. Copy and Paste Wink

Code:

% Spektroamm berechnen
[S,F,T,P] = spectrogram(Analysierendes_Signal,window, round(overlap*nfft), nfft,Samplingrate_analysierendes_Signal, 'yaxis');

imagesc(T,F,P); % evtl. statt P auch 10*log10(P+eps) oder 20*log10(P+eps) für Amplitude in dB
axis xy
colormap(gca,jet);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
toeh
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 04.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2016, 13:11     Titel:
  Antworten mit Zitat      
Danke, super, jetzt ist es so wie ich es haben möchte!
Für alle, die auch mal so ein Problem haben sollten, hier der ganze Schriebs:

Code:
[S, F, T, P]=spectrogram(Laser,1024,950,1024,fs)
imagesc(T,F,10*log10(P+eps));  % 2D-Bild
colorbar('eastoutside');             % Colorbar
colormap(gca,jet);
axis xy
view(90,90)                              % 90°-Drehung
set(gca,'xdir','reverse')              % Anpassung der y-Achse aufgrund Drehung
ylabel('Frequenz [Hz]'); xlabel('Zeit [s]');
set(gca,'FontSize',14);


Vielen Dank.
Gruß Toeh
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 - 2025 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.