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

Manuelles YTickLabel skaliert beim Zoomen nicht mit

 

Paul222

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2010, 17:29     Titel: Manuelles YTickLabel skaliert beim Zoomen nicht mit
  Antworten mit Zitat      
Hallo Zusammen,

habe folgendes Problem: Ich lasse eine Art Spektrogram in meinem GUI anzeigen und würde gerne dem User ein Zoomen ermöglichen. Da die Berechnung der Frequenzen mittels STFT Blockweise erfolgt werden im Spektrogram nicht die "richtigen" Frequenzen angezeigt -> ich korrigiere diese falschen Frequenzwerte mittels folgender Codezeile:

Code:
set(gca,'YTickLabel',fs/Nblock*get(gca,'YTick'))
% fs = Abtastfrequenz
% Nblock = Blocklänge der FFT
 


das funktioniert soweit auch wie es soll, nur sobald man in das Bild hineinzoomt, zeigt die Skalierung der Y-Achse nur mehr falsche Werte. Hat jemand eine Ahnung, wie man das Problem lösen könnte?

Vielen Dank für eure Hilfe und Zeit
LG Paul


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.10.2010, 21:27     Titel: Re: Manuelles YTickLabel skaliert beim Zoomen nicht mit
  Antworten mit Zitat      
Hallo Paul222,

kannst statt der Y-Tick-Label einfach die Y-Werte ändern?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul222

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2010, 10:26     Titel: Re: Manuelles YTickLabel skaliert beim Zoomen nicht mit
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Paul222,

kannst statt der Y-Tick-Label einfach die Y-Werte ändern?

Gruß, Jan


Hey Jan!

Danke für deine Antwort! Tja... die Idee hatte ich auch schon, das wäre sicher der einfachste Weg, aber irgendwie krieg ichs gerade nicht gebacken, wie man Frequenzen, bzw. das gesamte Frequenzspektrum um einen bestimmten Wert verschieben kann.
Mein konkretes Beispiel sieht so aus: ich erzeuge z.B. eine einzelne Sinusschwingung und will mir diese in einem Spektrogram anzeigen lassen. Ich verwende hierfür eine 4096 Punkte FFT mit 20% Overlap um die Zeitinformation nicht zu verlieren. Im Falle eines 2500 Hz Sinus und einer Abtastfrequenz von 25600Hz ergibt sich im Spektrogram dann ein Wert bei 401. Der Zusammenhang hierfür lautet ja:
Code:

f=fs/Nblock*fbin;
% f=wahre Frequenz
% fs=Abtastfrequenz
% Nblock=Blocklänge der FFT
% fbin in diesem Fall 401
 

Also meine 2500Hz werden aktuell als 401Hz interpretiert und ich würde das ganze Spektrum einfach gerne rückverschieben.
Mein Spektrogram zeichne ich übrigens so:
Code:

imagesc(20*log10(eps+abs(squeeze(fw(:,1:end/2+1,1))))')
% in fw stehen meine Frequenzspektren drin
% fw hat drei dimensionen fw(Zeitpunkte, Frequenz-bins, Signalkanäle)
% der imagesc-Befehl zeichnet so wie oben angeführt also ein Spektrogram über die gesamte Zeit, das halbe Spektrum und für meinen ersten Messkanal in dem die 2500Hz gemessen wurden
 

Vielleicht hat ja jemand hierzu eine Idee, würd mich freuen.

Danke LG
Paul
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.10.2010, 11:39     Titel: Re: Manuelles YTickLabel skaliert beim Zoomen nicht mit
  Antworten mit Zitat      
Hallo Paul,

Im ersten Post hast Du die Y-Ticks mit "fs/Nblock" multipliziert. Kannst Du dann auch einfach die YData aller gezeichneten Objekte mit der gleichen Zahl mutliplizieren?

Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul222

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2010, 16:00     Titel: Re: Manuelles YTickLabel skaliert beim Zoomen nicht mit
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Paul,

Im ersten Post hast Du die Y-Ticks mit "fs/Nblock" multipliziert. Kannst Du dann auch einfach die YData aller gezeichneten Objekte mit der gleichen Zahl mutliplizieren?

Jan


Hallo Jan!

Es soll keine Ausrede sein, dass ich gerade mein erstes GUI programmiere... ich hab' jetzt durch deinen Tip die Tomatenscheiben von meinen Augen genommen und mein im Nachhinein betrachtet simples Problem mit folgenden Zeilen gelöst:
Code:

spectro=imagesc(20*log10(eps+abs(squeeze(fw(:,1:end/2+1,1))))')
ypsilon = get(spectro,'YData');
set(spectro,'YData',ypsilon*fs/Nblock);
 


Danke noch mal für deinen Gedankenanstoß
LG Paul
 
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.