DIAdem-Version: 10.2 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2007
Beiträge: 4
Registriert seit: Oct 2009
Kanäle normalisieren
Hallo liebe Forumteilnehmer,
ich habe meine zwei Waveformkanäle in Numerische Kanäle gewandelt. Die Kanäle haben die gleiche Länge (1000), da sie getriggert aufgenommen wurden. Ein Bild im Anhang soll meine weitere Frage verdeutlichen.
Ich möchte nun jedoch nur genau den Bereich der beiden Kanäle (Fz1 & Fz2) auf 100 normalisieren wo der Wert 10 überschritten wird. Also in diesem Beispiel ab ca. 0,5 bis 0,75 bzw. 0,78.
1. Muss ich dafür zuerst die Bereiche welche <10 sind auswählen und abschneiden bzw. löschen? Und wenn ja, welchen Befehl kann ich dafür im Skript verwenden?
2. Mit welchem Skript-Befehl kann ich anschließend die unterschiedlich langen Kanäle auf 100 normalisieren?
DIAdem-Version: 2010 (11.2), 2012beta DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 1995
Beiträge: 200
Registriert seit: Nov 2008
RE: Kanäle normalisieren
Hallo Jens,
da du Version 10.2 verwendest, würde ich die gute alte Tatsache nutzen, dass in der AUT-Syntax die Multiplikation von 0 mit NoValue per Definiton eine 0 ergibt.
DIAdem-Version: 10.2 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2007
Beiträge: 4
Registriert seit: Oct 2009
RE: Kanäle normalisieren
Hallo Voyager,
vielen Dank für deine Antwort dieser Befehl hiflt mir weiter. Ich möchte aber die Zeit auf 100 normalisieren um die Kanäle anschließend mitteln zu können ohne dass meine gemittelte Kurve in der Luft (>10) endet.
Jetzt wollte ich die Formel auch auf die Zeitachse anwenden. Dazu benötige ich jedoch:
1. den Startzeitpunkt wo der Wert der y-Achse >10 wird
2. einen Befehl um diesen Zeitpunkt dann von allen übrigen Werten der x-Achse zu subtrahieren (also um den Startzeitpunkt auf null zu setzen)
3. Einen Befehl in dem ich nun die neue Zeitachse von 0-100 skaliere.
Ich habe das ganze per Hand ausprobiert, die Aufzeichnungsfunktion nimmt dies jedoch nicht erfolgreich auf. Ich vermute ich muss den Startzeitpunkt
in einer Variable definieren und diese irgendwo ablegen...!?
Vielen Dank für eure Hilfe.
MfG Jens
05.10.2009, 08:17 (Dieser Beitrag wurde zuletzt bearbeitet: 05.10.2009 08:19 von voyager.)
DIAdem-Version: 2010 (11.2), 2012beta DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 1995
Beiträge: 200
Registriert seit: Nov 2008
RE: Kanäle normalisieren
Hallo Jens,
so ganz klar ist mir noch nicht, weshalb die Zeitachse umskaliert werden soll.
Falls die Kurvenverläufe tatsächlich so sauber sind und nicht um den Wert 10 zappeln, sollte die NoValue-Bearbeitung weiterhelfen.
Nach dem Setzen der Werte < 10 auf Novalue, einfach die NoValues aus X- und Y-Kanal löschen.
Anschließend per Formel oder Offset-Korrektur die X-Achse mit 0 beginnen lassen und dann in % umrechnen.
Für eine Mittelung müssten die Kanäle aber gleich lang sein. Daher vermute ich, dass noch eine Abbildung auf eine gemeinsame X-Achse notwendig sein wird ("linear abbilden").
Eine Alternative zum Weg per Novalue, ist die Find- und FindReverse-Funktion. Mit diesen beiden Funktionen findest du den Werteindex für Start(zeit) und Ende(zeit). Mit einem Blockkopierbefehl (z.B. DataAreaCopy) kann der gewünschte Bereich in neue Kanäle kopiert werden. Dann gehts wie oben mit Nullsetzen, Normieren und Abbilden weiter.
Ich hoffe ich habe jetzt verstanden was du meinst.
DIAdem-Version: 10.2 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2007
Beiträge: 4
Registriert seit: Oct 2009
RE: Kanäle normalisieren
Hallo Voyager,
vielen Dank für die Hilfe. Ich habe beide Lösungswege realisieren können. Ich bevorzuge nun die zweite Variante mit der ChnFind & ChnFindReverse Funktion, da ich hier Start- und Endwert getrennt wählen kann. Das habe ich bei dem befehl formulacalc nicht einbauen können.
Was mich jedoch wundert ist, dass es in DIAdem keinen speziellen Befehl gibt, um zwei Kanäle welche sich in ihrer Länge (x-Achse) unterscheiden, auf 100% zu skalieren. Denn dies benötige ich um die Kanäle anschließend zu mitteln. Wie gesagt es funktioniert nun, aber mir scheint als ob es eine noch einfachere Lösung geben muss als ca. 8 Skriptzeilen (NoValue > löchen > Offset korrigieren > umrechnen in % > linear abbilden...) zu schreiben. Das Problem tritt doch eigentlich immer auf wenn man zwei unterschiedlich lange Kanäle mitteln möchte. In Matlab sagte man mir, gibt es den Befehl interp1 dafür. Da ich Matlab nicht nutze weiß ich natürlich nicht ob es letzendlich einfacher ist.
Viele Grüße
Jens
06.10.2009, 07:42 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2009 07:43 von voyager.)
DIAdem-Version: 2010 (11.2), 2012beta DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 1995
Beiträge: 200
Registriert seit: Nov 2008
RE: Kanäle normalisieren
Hallo Jens,
die Matlab-Funktion "interp1" entspricht der linearen Abbildung "ChnMapLinCalc" in DIAdem.
In beiden Fällen gilt die Voraussetzung, dass der Wertebereich beider unterschiedlich langen X-Kanäle (weitgehend) übereinstimmt.
Willst du jetzt eigentlich die Mittelung unter Beibehaltung der echten Zeitdauer machen, oder den Zeitbereich zwischen Start- und Endwert auf 100% quetschen bzw. dehnen?
Falls du den Bereich zwischen Start und Ende für jedes Signal tatsächlich auf 0-100% normieren möchtest, kommst du auch bei Matlab sicher nicht um Nullkorrektur und Umrechnung in % herum.
Da du ja den Weg mit den Find-Funktionen bevorzugst, würde ich díe Blockkopiererei empfehlen. Dann entfällt die gesamt NoValue-Aktion.
DIAdem-Version: 10.2 DIAdem-Sprachversion: DE DIAdem Erfahrung seit: 2007
Beiträge: 4
Registriert seit: Oct 2009
RE: Kanäle normalisieren
Hallo Voyager,
meiner Meinung nach muss ich zwei unterschiedlich lange Kanäle um sie mitteln zu können auf 100% normalisieren um identische Wertepaare zu vergleichen. Ich verwende dafür den Befehl ChnLinGenImp("Time_100",201,0,0.5). Demnach reduziert sich meine Auflösung von 1000 Hz bei einem Messwertebereich von 250 ms auf eine Auflösung von 800 Hz. Bei 200 ms bleibt die Auflösung von 1000 Hz erhalten. Für die spätere Auswertung der Absolutwerte rechne ich dann die prozentualen Werte über die Gesamtzeit in die tatsächlichen Zeiten zurück. Mir ist auch bewusst, dass mir dabei ein Teil meiner Messfrequenz verloren geht, da ich immer von den kürzesten Zeiten ausgehen muss um eine Interpolation > 1000 Hz zu vermeiden. Eine andere Lösung habe ich aber bisher nicht.
PS: Ich bevorzuge auch das kopieren des gesamten Blockes.