Hallo,
ich habe zwei unterschiedliche Datenquellen, welche ich synchronisieren möchte. Die eine Quelle besitzt aber keinen Zeitstempel und daher muss ich die Synchronisierung über die Parameter realisieren. Es existieren Parameter, welche von beiden Quellen aufgezeichnet werden. So in etwa:
Quelle 1: Parameter A, E, F
Quelle 2: Parameter A, B, C, D
Die Idee ist nun, die Messdaten der beiden Quellen so gegeneinander zu verschieben, bis der Fehler (MSE) zwischen den beiden Parametern A minimal ist. Leider hab ich keine genaue Idee, wie ich solch eine Minimierung vornehmen kann. Von "Hand" möchte ich die ungern programmieren, da wird es doch bestimmt eine Route geben. Kennt jemand so etwas?
Vielen Dank und einen schönen Sonntag
EDIT:
Ich habe mich jetzt mal an eine kleine Iplementierung gemacht. Bin aber nicht sicher, ob das sehr effizient ist. Gerade bei sehr großen Datenmengen wird die schleife recht lang.
Ein paar Kommentare zum Code:
1. Wozu löschst Du das Command-Window per CLC? Dies macht es schwerer eventuelle Fehler- oder Warn-Meldungen zu sehen. Deshalb ist das keine gute Idee.
2. CLEAR löscht den lokalen Workspace. Zu Beginn einer Funktion ist der aber sowieso leer. Das CLEAR verschwendet damit nur Zeit. Das ist zwar nicht viel, aber nützlich ist es nicht.
3. ERROR ist ein sehr wichtiger Befehl in Matlab. Wenn du eine Variable "error" nennst, kann man ihn aber nicht mehr direkt aufrufen. Du benutzt zwar diesen befehl bisher nicht, aber das sog. shadowing von Built-in Funktionen führt immer wieder zu unerwarteten Schwierigkeiten. Verwende also besser einen anderen Namen.
4. Das Programm sieht eigentlich nicht schlecht aus. Ein Effizienz-Problem ist die fehlende Pre-allocation vom MSE: In jeder Iteration wird das Array vergrößert. Dafür wird ein neues Array erzeugt und die alten Werte kopiert. Bei einer Endgröße von 30 Elementen, müssen also insgesamt SUM(1:30)*8 Byte reserviert und kopiert werden, was immerhin 3720 Byte sind, obwohl das Array am Schluss nur 240 Bytes benötigt. Dieser Overhead steigt aber mit zunehmender Endgröße rasant an: Bei 1000 Elementen benötigst Du schon mehr als 4MB, bei 10'000 schon 400MB.
Deshalb ist eine Pre-allocation Pflicht für effiziente Programme:
Hey Jan,
sry für die späte Rückmeldung. Erstmal danke für deine Code-Kommentare. Aktuell sieht es so aus:
Code:
function[ZeitschritteB] = MessdatenSynchronisation(ZeitschritteA, DatenA, DatenB )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
Leider ist der Code bei großen Werten nicht sehr sinnvoll. Muss mir da noch eine intelligentere Lösung überlegen. Vielleicht ist mein Code für jemanden mit weniger Messdaten ganz passabel.
Liebe Grüße
Einstellungen und Berechtigungen
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
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.