LabVIEWForum.de - Zeitachse eines Signals anpassen bzw. erzeugen

LabVIEWForum.de

Normale Version: Zeitachse eines Signals anpassen bzw. erzeugen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen.
Ich habe hier ein nettes Programm erstellt, mit dem ich die Daten eines Dreiachsensensors auswerten kann.
Dazu lese ich das Logfile des Sensors ein und erzeuge ein Signal daraus.

Der Sensor schreibt in die 1. Spalte die Zeit und in die 2., 3. und 4. Spalte jeweils die Achsen.
Leider wird der Zeitwert nur auf 1 Sekunde genau geschrieben, d.h. beispielsweise bei 100Hz Samplingrate haben 100 Werte die gleiche Zeit. Bisher habe ich mit Excel den Zeitwert vor dem Einlesen überschrieben, das nervt aber gewaltig bei vielen Messwerten.

Ist es möglich, das Signal "aufzudröseln" und den Zeitwert separat durch LabView vorzugeben? Hätte versucht, die erste Spalte beim Einlesen als normalen Wert zu betrachten und zu ignorieren, dann müsste ich aber auch wieder eine Samplingrate erzeugen und mit den Werten verknüpfen. Wie geht das Huh
Hallo uuuhl,

Zitat:Ist es möglich, das Signal "aufzudröseln" und den Zeitwert separat durch LabView vorzugeben?
Ja.

Zitat:Hätte versucht, die erste Spalte beim Einlesen als normalen Wert zu betrachten und zu ignorieren, dann müsste ich aber auch wieder eine Samplingrate erzeugen und mit den Werten verknüpfen.
Warum liest du den Zeitstempel nicht mit ein?

Zitat:Wie geht das
Zeitstempel einlesen und selbst den Sekundenbruchteil dazu addieren. Bei 100S/s also einfach jeweils für einen 100-Werte-Block die Rampe von 0.00…0.99s zum Zeitstempel addieren…
(31.01.2016 19:55 )uuuhl schrieb: [ -> ]Leider wird der Zeitwert nur auf 1 Sekunde genau geschrieben, d.h. beispielsweise bei 100Hz Samplingrate haben 100 Werte die gleiche Zeit.
Das kann auch eine ganz andere Ursache haben, und ganz oben auf der Beliebtheitsskala steht dieser Fehler: Die gespeicherten Daten enthalten das Komma als Dezimalzeichen, Labview will aber den Punkt. Oder umgekehrt.
So, habe jetzt Einiges versucht, leider immer noch erfolglos.
Zitat:Warum liest du den Zeitstempel nicht mit ein?

Weil er nur Ärger macht. Der Sensor gibt im Format TT.MM.JJJJ hh.mm.ss aus.
Wenn ich das in LabView einlese, bekomme ich zwar ein Signal, aber Zeit ist halt Irgendwas zwischen 0 und 14000.
Alle Filter melden dann logischerweise Fehler.

Zitat:Zeitstempel einlesen und selbst den Sekundenbruchteil dazu addieren.
Die "absolute Zeit" wäre mir egal, mir würde eine einfache "Taktung" in z.B. 0,01er Schritten als Zeitkomponente reichen, so mache ich das momentan mit Excel - einfach die erste Spalte mit 0,01 "runterziehen".

Wie addiert man die Zeit zum Signal?
Hallo uuuhl,

Zitat:Der Sensor gibt im Format TT.MM.JJJJ hh.mm.ss aus. Wenn ich das in LabView einlese, bekomme ich zwar ein Signal, aber Zeit ist halt Irgendwas zwischen 0 und 14000. Alle Filter melden dann logischerweise Fehler.
Und der Fehler liegt natürlich klar bei der Programmiersprache, oder?

Komisch, ich kann Zeitstempel bequem einlesen:
[attachment=55239]
Vielleicht ist es ja doch nur ein PEBCAK-Fall… Big Grin

Zitat:mir würde eine einfache "Taktung" in z.B. 0,01er Schritten als Zeitkomponente reichen
Es gibt da Funktionen in der Signalverarbeitungspalette, die generieren dir eine Rampe mit frei wählbarer Stufung…

Zitat:So, habe jetzt Einiges versucht, leider immer noch erfolglos.
So ein Forum funktioniert am besten, wenn der Fragende Beispiele seiner (wenn auch erfolglosen) Versuche anhängen würde.
Und noch viel besser, wenn die dazu passenden Beispiel-Daten bereitgestellt würden!
Vielen Dank schon mal für die Hinweise.

Hier mal ein kleiner Aufbau der das Problem erklären sollte inklusive Testfile.
Die Werte werden eingelesen, und zwar mit der ersten Spalte als "normalen" Werten.
Es folgt das Aufspalten und die erste Spalte mit dem seltsamen Zeitinformationen wird ignoriert.
Nun zähle ich die Anzahl an Samples und teile sie durch die (einstellbare) Samplingrate.
Das Ergebnis sollte nun die Zeit sein, über die die Messwerte ermittelt wurden.

Diese möchte ich nun als X-Achse oder eben Zeit an das Signal "anfügen", damit nachfolgende Filter usw. nicht verwirrt werden. Im Beispiel hier falsch dargestellt, da die Rampe einfach als weiteres Signal dargestellt wird.
Hallo uuuhl,

Zitat:Ich habe hier ein nettes Programm erstellt
Aha. Ein VI bestehend aus ExpressVIs…
Du gibst an, seit >7 Jahren mit LabVIEW zu arbeiten. Und alles was dabei herauskommt, sind 3 ExpressVIs und lauter DDT-Drähte?

Du willst also mit einem ExpressVI eine Datei einlesen, die ein Format verwendet, welches dieses ExpressVI nicht kennt?
Du wunderst dich, warum dabei eine "komische" X-Achse herauskommt?

Zitat:Die Werte werden eingelesen, und zwar mit der ersten Spalte als "normalen" Werten.
Warum machst du das so? Was hast du dir dabei überlegt?
Wenn du in den ExpressVI-Einstellungen einfach mal die Datei testweise lädst (ja, das geht im Assistenten), dann siehst du doch schon, wie diese Datei eingelesen wird…
Und warum hast du dann nicht konsequenterweise die "erste Zeile ist Zeitkanal" eingestellt? Hmm (Nicht, dass das was helfen würde.)

Zitat:Nun zähle ich die Anzahl an Samples und teile sie durch die (einstellbare) Samplingrate. Das Ergebnis sollte nun die Zeit sein, über die die Messwerte ermittelt wurden.
Aha, du rechnest also z.B. 1600 Samples geteilt durch 80Hz = 20s. Damit erzeugst du eine Rampe.
Nur: Hast du dir überlegt (oder gar angeschaut), was für eine Rampe dabei erzeugt wird? Was sind Anfangs- und Endwert der Rampe? Was soll die Funktion mit dem DBL-Wert, den du da berechnest, eigentlich anstellen?

Zitat:Der Sensor gibt im Format TT.MM.JJJJ hh.mm.ss aus.
Aha. In der Datei finde ich nur Zeitangaben nach dem Schema " mm : ss , u". Das passt irgendwie nicht zu deiner Aussage in Beitrag #4.
Ist das jetzt eine komplett verkehrte Beispiel-Datei oder hast du vorher einfach nicht richtig lesen können?

Mit welchem Programm wurde diese Txt-Datei erstellt?
Warum liest du nicht einfach die Datei als Text ein, suchst nach dem "Tag" "*DATA", um alles danach als Daten zu verwerten?
Und warum wandelst du nicht einfach den Zeitstempel mit dem oben gezeigten Schema um?

Und warum hat man bei einem solch kleinen VI so viele "Warum?"-Fragen?
Hallo GerdW,

Zitat:Aha. Ein VI bestehend aus ExpressVIs…
Du gibst an, seit >7 Jahren mit LabVIEW zu arbeiten. Und alles was dabei herauskommt, sind 3 ExpressVIs und lauter DDT-Drähte?

Im Anhang ein PDF vom Blockdiagramm des VIs. Der Übersichtlichkeit halber habe ich das gepostete Beispiel verwendet.
Bei mir geht es hauptsächlich darum, Messwerte mit Kurven aus der Norm zu vergleichen. Die sind in den jeweiligen Konstantenarrays verpackt.
Das ist vermutlich nicht die aller anspruchsvollste Aufgabe, aber mehr brauche ich nicht.
Mit den verhassten Express- VIs geht das relativ einfach und hat für meine Zwecke bisher gut funktioniert.
Ich koche auch seit einigen Jahren Essen, geh laufen und fahre Rad. Trotzdem bin ich weit davon entfernt, ein Sterne- Koch, Sprinter oder Tour de France- Fahrer zu sein.

Weiterhin im Anhang die Quelldatei des Sensors. Zeitformat wie beschrieben, aber Datei im Excel-CSV- Format, und das liest das Express-VI nicht.
Beim Umwandeln in MS-DOS Text- Format geht ein Teil der Zeitspalte verloren, siehe Datei gepostet am 4.2.
Wie beschrieben habe ich die erste Spalte bisher mit Excel überschrieben (0.01, 0.02, 0.03,....) und dann wie von dir erwähnt "als Zeitkanal" eingelesen. Das ist bei vielen Messwerten aber nervig, daher wollte ich das im LabView korrigieren.

Zitat:Warum machst du das so? Was hast du dir dabei überlegt?
Der Gedanke war -wie erwähnt- das Zeitsignal aus dem Logfile des Sensors zu ignorieren und durch eine selbstgebaute Taktung mit einstellbarer Samplingfrequenz zu ersetzen. Und genau hier hakt es bei mir.

Der etwas scharfe Unterton in deinem letzten Beitrag ist mir nicht entgangen.
Soweit für mich erkennbar habe ich die Forenregeln eingehalten und in vernünftigem Deutsch höflich eine Frage gestellt.
Sollte dich das dennoch beleidigt haben, möchte ich mich dafür entschuldigen.
An dem PDF kann ich jetzt nur erkennen, dass dein BD viel zu groß geraten ist. Analysieren kann man da gar nichts, da wir die Einstellungen der ganzen Express-VIs nicht kennen.

--

Welches Dateiformat willst du jetzt eigentlich einlesen? Die csv-Datei aus dem letzten Beitrag oder die txt-Datei aus Beitrag #6 - bei der aber die Zeit-Information mangelhaft hinterlegt ist - 5 Werte haben immer denselben Zeitstempel...

Gruß, Jens
(06.02.2016 15:53 )jg schrieb: [ -> ]... bei der aber die Zeit-Information mangelhaft hinterlegt ist - 5 Werte haben immer denselben Zeitstempel...
Das passiert eben, wenn man mit einem dt von 20ms erfasst und dann die Zeit nur mit einer Nachkommatelle, also auf 100ms genau, aufzeichnet. Dümmer gehts nimmer.
Da bleibt dann nur noch, nicht die Zeitdaten selbst zu verwenden, sondern das vermutliche dt, unter der Annahme daß es konstant ist, aus den Daten zu berechnen und im Graphen zu verwenden.
[attachment=55258] [attachment=55259]
[attachment=55260]
(Die Datei LOG45_test.txt muß sich mit im Verzeichnis des VI befinden)

Edit:
Und hier noch eine Variante mit Glättung und sinnvoller Dezimierung der Datenpunkte, bei Vermeidung von Zeitverschiebungen. Das ist nur eine Kür zur Befriedigung meines eigenen Ego; es ist ansonsten zu kompliziert als dass es jemand verstehen muss. Ich will diesen Teil zu einem SubVI machen, da es in LV so eine wunderschöne Funktion nicht zu geben scheint.Big Grin
[attachment=55262]
Seiten: 1 2
Referenz-URLs