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

Plotten mit der Zeit

 

Dellirius
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2009, 16:59     Titel: Plotten mit der Zeit
  Antworten mit Zitat      
Hi

Besteht die Möglichkeit, dass ich einen Plot so einstellen kann, das die Zeit(x-achse) mitgeht, resp das er 1s lang plottet die Daten aufzeichnet, danach den plot wieder löscht. Die Zeitachse sollte dementsprechent angepasst werden. Mit hold off erreiche ich etwas in dieser Art, nur leider bezieht sich das auch auf die y-Achse.


Griässli Fabian
Private Nachricht senden Benutzer-Profile anzeigen


Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2009, 17:04     Titel:
  Antworten mit Zitat      
Servus Fabian

Für die "hold off" Variante:
Speichere einfach 'YLIM' und vielleicht auch zusätzlich 'YTick' und übergebe diese Werte im neuen Plot.
_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Dellirius
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2009, 17:26     Titel:
  Antworten mit Zitat      
Vielen Dank für den Tipp, nur leider bin ich noch total der Neuling in dem Gebiet, meinst kannst du mir vielleicht ein simplen bsp-code posten?

Griässli
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2009, 17:41     Titel:
  Antworten mit Zitat      
Hallo nochmal

Nachdem ich jetzt natürlich nicht weiß, in welchem Kontext Du Deine Daten plottest, kann ich nicht mehr sagen als:
Code:
Achsengrenzen_Y = get( gca, 'YLim');
Achsenteilung_Y = get( gca, 'YTick');

plot( x, y, 'YLim', Achsengrenzen_Y, 'YTick', Achsenteilung_Y)


Wenn Deine Daten immer innerhalb eines bestimmten y- Bereichs liegen, kannst Du auch so vorgehen:
Code:
plot( x, y, 'YLim', [Dein_Y_min Dein_Y_max])

_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Dellirius
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2009, 17:54     Titel:
  Antworten mit Zitat      
Hi

Ich plotte von Simulink erzeugte Signale, die ich über eine S-Function an mein GUI(gui.m) übergebe.

Das Problem ist, das ganze wird recht langsam, da der Plot zurzeit alle Werte von Zeit 0 an im Plot darstellt(speichert). Deswegen dachte ich mir, auch sinnvollerweise, das ich nach einer Zeit x, die Daten nach hinten schiebe.

Hier mein Code, wie ich an die Daten komme und sie derzeit plotte:
Code:

function sys = mdlOutputs(t,x,u)

time = t;
amplitude = u(2);

haxes_eeg=findobj(gui.m,'Type','axes','Tag', 'axes_eeg');
axes(haxes_eeg)

plot(time,amplitude,'LineWidth',2,'Marker','.');

title('EEG-Signal')
ylabel('Amplitude')
xlabel('Zeit')

hold on
grid on

sys=[];
 


Zurzeit bekomme ich mit deinem eingefügten code die Fehlermeldung:Invalid line property: 'YTick'. Den Zugriff von einem anderen m-file(resp S-function) auf ein gui hat sich bisslang als nicht sehr einfach erwiesen Smile

Griässli und Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2009, 18:46     Titel:
  Antworten mit Zitat      
Gehe ich Recht in Der Annahme, dass Du Deine Funktion mdlOutputs(t,x,u) von ein anderen Stelle aus immer wieder aufrufst?

Wenn ja, könnte ich mir etwas in der Art vorstellen:
Code:
function sys = mdlOutputs(t,x,u)
   
    if length(t) > 100
        time = t(end-100 : end);
        amplitude = u(2, end-100 : end);
    else
        time = t;
        amplitude = u(2);
    end

    haxes_eeg=findobj(gui.m,'Type','axes','Tag', 'axes_eeg');
    axes(haxes_eeg)
   
    if isempty( get( gca, 'UserData'))
        set(gca, 'UserData', 1);
        lim_Y = [(min(time)*0.1) (max(time)*0.1)];
    else
        lim_Y = get( gca, 'YLim');
    end

    plot(time,amplitude,'LineWidth',2,'Marker','.', 'YLim', lim_Y);

    title('EEG-Signal')
    ylabel('Amplitude')
    xlabel('Zeit')

    grid on
end

_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Dellirius
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2009, 19:25     Titel:
  Antworten mit Zitat      
Hey Dagnabit

Ich dank dir für den code, leider bekomme ich noch eine Fehlermeldung:

Bad value for line property: 'YLimInclude'

Ich denke das werde ich noch herausfinden. Ansonsten wen ich mir den code anschaue, kann ich mir Vorstellen das es genau sowas ist was ich brauche;-)

Ich danke dir.

mfg Fabian
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2009, 19:34     Titel:
  Antworten mit Zitat      
Ok, da hab ich Dir einen Blödsinn gesagt.
Machs so
Code:
plot(time,amplitude,'LineWidth',2,'Marker','.');
set(gca, 'YLim', lim_Y);

_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Dellirius
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 06.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2009, 12:56     Titel:
  Antworten mit Zitat      
Hey, ich dank dir nochmals für deine Hilfe. Dein Code hat leider nicht das gemacht was ich erwartet habe Smile.....

Aber dein Code hat mir den Input gegeben, ich konnte es nun folgend lösen:

Code:

    haxes_eeg=findobj(gui.m,'Type','axes','Tag', 'axes_eeg');
    axes(haxes_eeg)
    time = t;
    amplitude = u(2);
   
    lim_X = [(min(time)*0.1) (max(time+5)*0.1)];
    set(gca, 'XLim', lim_X);
    plot(time,amplitude,'LineWidth',2,'Marker','.');
 


Das ganze wahr doch recht simple. Ich danke dir nochmals für deine Unterstüzung und wünsche ein schönes Weekend

griässli Fabian
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2009, 13:09     Titel:
  Antworten mit Zitat      
Servus Fabian

Ersteinmal; Ich habe keine Ahnung von Simulink.

Aber ich gehe mal davon aus, dass Du in Simulink kontinuierlich Daten erzeugst.
Die Daten zum Darstellen werden immer mehr; der Platz im Plotfenster nicht.
Jetzt hättest Du gerne, dass, wenn eine gewisse Anzahl von Messungen erreicht ist, der älteste Datensatz aus dem Plot rausfliegt und dafür der jüngste abgebildet wird?

Die Funktion mdlOutputs(t,x,u) wird von ?irgendwo? immer wieder (sagen wir mal jede Sekunde) gestartet?

Zusatzfrage: Sind die Y- Daten (Amplituden) normiert?

% --------------------
Eine for Schleife macht in der Funktion nur dann Sinn, wenn:
1. Deine Daten statisch sind; also keine mehr dazu kommen.
2. Du sozusagen einen kleinen Film ablaufen lassen möchtest ( die for Schleife rattert einfach von Anfangs- zu Endwert).

Die erste if- Schleife in meinem Code ist dazu da die Daten zu begrenzen: solange nicht mehr als 100 Datensätze da sind, nehme alle.
wenn mehr als 100 Datensätze verfügbar sind, nehme die letzten 100.

Und verzeihe!: ich habe da noch einen Fehler im vorletzten Code eingebaut.
korrekt ist:
Code:
if isempty( get( gca, 'UserData'))
        set(gca, 'UserData', 1);
        lim_Y = [(min(amplitude)*0.1) (max(amplitude)*0.1)];
    else
        lim_Y = get( gca, 'YLim');
    end

Dieser Code dient dazu die Y-Achse konstant zu halten.
_________________

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2009, 13:10     Titel:
  Antworten mit Zitat      
Ok, Deinen letzten beitrag hab ich nicht mehr mitbekommen.

Also auch ein schönes Wochenende.
_________________

lg
Martin
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.