Algorithmus gesucht

hallo.

angenommen, ich habe drei perameter A, B und C. A und B können beliebige werte > 0 annehmen, C ist entweder 0 oder 1.
aus diesen werten soll ein wert D abgeleitet werden.
D basiert vor allem auf dem zeitverlauf der einzelnen parameter und auf minimal- und maxixmalwerten, aber auch auf logischen verknüpfungen.
also z.b. "wenn A innerhalb der letzten x sekunden von a0 auf a1 gestiegen ist und C = 0 oder B seit y sekunden

Hallo michael,

also z.b. "wenn A innerhalb der letzten x sekunden von a0 auf
a1 gestiegen ist und C = 0 oder B seit y sekunden

char BedingungA(void)
{
if ( A innerhalb der letzten x sekunden von a0 auf a1 gestiegen ist ) return TRUE;
return FALSE;
}

char BedingungB(void)
{
if (B seit y sekunden

MfG Peter(TOO)

hallo peter.

Deine AUssage ist nicht eindeutig, es fehlen da die Klammern
!!
(A && !C) || B
A && (!C || B)
???

die aussage war nur als beispiel zu verstehen. wie man die klammern setzt, soll erstmal egal sein. ich wollte nur verdeutlichen, daß eben nicht einfach A, B und C logisch verknüpfen kann, um die korrekte lösung für D zu erhalten.

Ein weiteres Problem sind:

  1. "wenn A innerhalb der letzten x sekunden von a0 auf a1
    gestiegen ist)
    Wie berechnest du das ???

das ist eben die frage. spontan würd ich da mit arrays und ableitungen und monotoniebetrachtungen im intervall x rumschmeißen, wobei der ganze sums mit jedem abtastzeitpunkt neu betrachtet werden müßte…

Beide Bedingungen lassen sich so nicht in einer
Programmiersprache darstellen.

ich dachte halt, vielleicht gibt’s irgendwelche verfahren mit irgendwelchen funktionen, matrizen, filtern, was auch immer.

vergleichbar wäre mein problem in etwa mit der bildverarbeitung, wo’s ja auch um die dynamische analyse dynamischer daten geht und z.b. anhand der signalverläufe über der zeit nach durchlaufen diverser filter auf einen bestimmten bildinhalt geschlossen werden kann, so daß am ende eine konkrete aussage wie „vorfahrtszeichen erkannt“ möglich ist.
es wäre ja ufer- und hoffnungslos, wenn ich da mit if-then-else hergehen und sagen würde „wenn ich zum zeitpunkt t-5 an den bildpunkten [1,10]…[1,100] einen graustufenwert zwischen A und B geseheh habe, und der farbwert auf der geraden zwischen den bildpunkten [1,10] und [20,80] größer als C war, und dieses muster bis zum zeitpunkt t sich um [5,5] bildpunkte verschoben hat, dann liegt ein objekt O mit den parametern P1, P2, P3 vor“.

gruß

michael

Hallo Michael,

wenn man nix weiss, kann man auch keinen Algorithmus schreiben. Bei deinen spärlichen Angaben bliebe nur ein neuronales Netz mit A,B,C als Eingänge und D als Ausgang und mit realen Daten trainieren.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo reinhard.

wenn man nix weiss, kann man auch keinen Algorithmus
schreiben. Bei deinen spärlichen Angaben bliebe nur ein
neuronales Netz mit A,B,C als Eingänge und D als Ausgang und
mit realen Daten trainieren.

also konkret: ich hab fahrdynamische daten (geschwindigkeit, lenkwinkel, …) eines autos und will daraus schlüsse ziehen, in welcher umgebung ich mich gerade aufhalte (wald, stadt, überland, …).

ja, sowas geht mit gps viiiiiiiiiiiel einfacher, aber das ganze soll unabhängig von externen informationsquellen realisiert werden.

neuronales netz wäre auch meine erste idee gewesen, aber vielleicht gibt’s noch andere/einfachere möglichkeiten?

gruß

michael

Moien

also konkret: ich hab fahrdynamische daten (geschwindigkeit,
lenkwinkel, …) eines autos und will daraus schlüsse ziehen,
in welcher umgebung ich mich gerade aufhalte (wald, stadt,
überland, …).

Geh über fuzzy-logik ran. Bei sowas kann man keine klaren Entscheidungen treffen. Wenn du binär arbeitest und Pech hast springt der Algo bei jeder Auswertung von einem Bereich in einen anderen.

Was die Zeit angeht: Mach ein A_aktuell und ein A_verlauf. Bei jeder Abtastung macht man A_aktuell = Sensorwert und A_verlauf = (A_aktuell + A_verlauf) / 2 (/2 kann man als shift programmieren, das können uC’s ganz gut. Divison dauert viel länger). Für de Ableitung dann das gleiche Spiel: A_verlauf_ableitung = (A_alt - A_aktuell + A_verlauf_ableitung ) / 2.

Der Ansatz liefert zwar „krumme“ Werte für die Verläufe, filtert aber Ausreisser mit minimalem Rechenaufwand sauber weg. Als Variante gibt’s auch A_verlauft = (A_verlauf / 2) + a_aktuell.

neuronales netz wäre auch meine erste idee gewesen, aber
vielleicht gibt’s noch andere/einfachere möglichkeiten?

Neuronale Netze wären schon ganz gut, aber die Überprüfung (liefert das Netz immer sinnvolle Werte ?) ist die Hölle.

cu