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

Systemzeit auf der x-Achse anzeigen

 

noose
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.01.09
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 16.01.2009, 13:00     Titel: Systemzeit auf der x-Achse anzeigen
  Antworten mit Zitat      
Hallo Forum,
seit einigen Tagen probiere ich mich leider erfolglos an folgendem Problem:
Ich nehme über eine A/D-Karte Daten in Echtzeit auf und zeige sie in einem Diagramm an. Nun sollen aber auf der x-Achse nicht die Samples oder die Messzeit stehen sondern der genaue Zeitpunkt in hh:mm:ss, d.h. wenn die Aufnahme z.b. 10:45:00 startet und 30s dauert sollen an der x-Achse in z.b. 10 Ticks die Werte von 10:45:00 bis 10:45:30 stehen.
Ich habe hier mal ein einfaches Beispiel für eine Datenaufnahme von der Soundkarte über 10s mit einem 3s Preview und einem Diagramm über die Gesamtzeit. (Ist das Beispiel DAQDOC5_2 für die Data Acquisition Toolbox).

Code:
function daqdoc5_2

AI = analoginput('winsound');

chan = addchannel(AI,1);

duration = 10; % Ten second acquisition
set(AI,'SampleRate',8000)
ActualRate = get(AI,'SampleRate');
set(AI,'SamplesPerTrigger',duration*ActualRate)
preview = 16000;
subplot(211)
set(gcf,'doublebuffer','on')
P = plot(zeros(preview,1)); grid on
title('Preview Data')
xlabel('Samples')
ylabel('Signal Level (Volts)')

start(AI)
while AI.SamplesAcquired < preview
end
while AI.SamplesAcquired < duration*ActualRate
   data = peekdata(AI,preview);
   set(P,'ydata',data)
   drawnow
end

data = getdata(AI);
subplot(212),
plot(data),
grid on
title('All Acquired Data')
xlabel('Samples')
ylabel('Signal level (volts)')

delete(AI)
clear AI


Hat da jemand eine Idee wie man die XTickLabels entsprechend ändern kann? Ich hab einiges probiert, aber immer ohne Erfolg.
Vielen Dank
noose
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2009, 17:12     Titel:
  Antworten mit Zitat      
Die Aktuelle Zeit in einem etwas eigentümlichen Serial Date Format bekommst Du mit now().

Dabei ist der Ganzanteil die Zahl der Tage seit dem ersten Januar im Jahr 0.
Der Bruchanteil sind die Stunden. Mitternacht ist dabei um ,0, Mittag um ,5 und 6 Uhr abends um ,75.

Deine einzelnen Ticks kannst Du damit im serial-date-format berechnen.

Für eine hübschere Anzeige gibt es dann noch datestr(). Die Funktion nimmt ein serial date entgegen und gibt Datum und Uhrzeit aus.

Diese hübschen Werte gibst Du dann noch als XTickLabel vor und (fast) alles ist prima.
Private Nachricht senden Benutzer-Profile anzeigen
 
noose
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.01.09
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 17.01.2009, 10:26     Titel:
  Antworten mit Zitat      
Danke Epfi,
bei dem Versuch mein Problem zu beschreiben, habe ich vollkommen vergessen zu erwähnen, dass ich es schon bis zur Ausgabe der Zeit im richtigen Format geschafft hatte. Ich bin dann daran gescheitert den Vektor für XTickLabel korrekt zu erzeugen, da dieser ja permanent neu geschrieben werden muss, und das auch noch zeitlich richtig zur laufenden Datenaufnahme. Was ich auch schon geschafft hatte, ist den XTickLabel-Vektor zwar mit der aktuellen Zeit aber überall die gleiche Zeit zu "füllen". Dadurch wurde die Zeit auf der x-Achse zwar richtig dargestellt, allerdings leider auf allen Ticks die gleiche Zeit.
Ich hoffe das war verständlich, ist ganz schön schwierig wenn man gerade mit Matlab (und Programmieren überhaupt) anfängt und dann gleich mit einer solchen Aufgabe ins kalte Wasser geschmissen wird Smile

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 17.01.2009, 11:44     Titel:
  Antworten mit Zitat      
Wenn du die Samplefrequenz kennst und die Umrechnung von Sample auf richtige Zeit schaffst, dann einfach die Achsen vordefinieren im einem bestimmten Bereich und fixieren. Nun sollte es doch möglich sein den Xticklabel Vektor einmal umzurechnen und beim plotten dann zu verwenden? Oder hab ich was übersehen?
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2009, 17:22     Titel:
  Antworten mit Zitat      
Der XTickVektor verändert sich ja laufend. Das ist ein Plot, der immer die letzten paar Sekunden der aktuellen Aufnahme anzeigt. Die XTickLabels müssen also ständig aktualisiert werden.

Code:

%vor dem beginn der Aufzeichnung
num_labels = 5; %anzahl der angezeigten labels
set(gca, 'XTickLabelMode', 'manual');
set(gca, 'XTickMode', 'manual');
set(gca, 'XTick', linspace(0,preview,num_labels));
xlabel_step = (preview/samplerate/(num_labels-1))/(24*3600); %abstand zwischen zwei ticks im matlab-zeitformat


%in der schleife dann immer den aktuellen Zeitvektor neuberechnen und zuweisen
zeit = now();
labelvektor = datestr([zeit-4*xlabel_step; zeit-3*xlabel_step; zeit-2*xlabel_step; zeit-1*xlabel_step; zeit-0*xlabel_step]);
set(gca, 'XTickLabel', labelvektor);
 


Dann noch datestr so erweitern, dass es Milisekunden anzeigt und das Datum weglässt und gut.
Private Nachricht senden Benutzer-Profile anzeigen
 
noose
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.01.09
Wohnort: ---
Version: R2007a
     Beitrag Verfasst am: 17.01.2009, 21:37     Titel:
  Antworten mit Zitat      
...super, es funktioniert.

Vielen vielen Dank
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.