Hallo, ich habe ein Problem bei der Ermittlung vom zeitlichen Abstand zweier Hoch- und Tiefpunkte in einem Kurvenverlauf. Ich weiss, dass die Hoch- und Tiefpunkte jeweils maximal 10 Messzeitpunkte auseinander liegen und habe daher ein Programm geschrieben, welches ein Fenster von 10 Messzeitpunkten über die Teilmenge meiner Messpunkte hinüberschiebt und Ort und Betrag der maximalen und minimalen Punkte aufzeichnet. Die Differenz beider Werte wird lokal ermittelt und wenn sie größer ist als die global ermittelten Werte, wird stets der Ort von globalem Minimum oder Maximum sowie der wert erneuert. Das Fenster beginnt kurz nach dem Beginn einer einer Datenmenge (200 Stück, beginn bei 50) und soll 25 Messzeitpunkte weit verschoben werden, d.h. der maximale zeitliche Abstand kann 35 Datenpunkte betragen (Fenster von 10 Werten und dieses wird 25 werte weit geschoben). Anschließend wird der Abstand beider Minima und der Abstand beider Maxima errechnet. Zeitlich liegen zwei Messpunkte jeweils 22,7 Millisekunden auseinander. Der Abstand wird also ermittelt und 1 Minute = 600000us wird durch dieses Produkt geteilt, so dass eine Frequenz errechnet wird. Das Problem ist, dass der Wert, den ich dabei erhalte auf einen zeitlichen Abstand von ~65-70 Datenpunkten schließen lässt und ich beim besten Willen nicht sehe, wo der Fehler ist. Ich meine, der Abstand kann maximal 35 werden, weil das zweite Maxima-Minima Paar doch erst dort beginnt ermittelt zu werden, wo das erste gefunden wurde. Mehr Augen sehen mehr, Wo habe ich einen Fehler gemacht? mfg und schonmal vielen Dank
Hier testest du auch auf Gleichheit if(scan<=lok_Min_1) hier jedoch nicht if(scan<lok_Min_2) aber das wird wahrscheinlich nicht der Fehler sein.
achja,
Puls_IR ist uint16_t.
Kann diese Zeile
> Puls_IR = (600000/ (Delta_T * 227));
aufgrund des 600000er Wertes die Probleme bewirken?
Bereits (Delta_T * 227) läuft über, wenn uint16_t Delta_T > 288 ist. Teste mal: Puls_IR = (uint16_t)(600000UL / ((uint32_t)Delta_T * 227));
hm ich werde die Änderung einbringen, aber ehrlich gesagt kann ich nicht erkennen, wie Delta_T überhaupt einen Wert größer als 35 bekommen sollte... Das zweite Maximum sollte doch höchstens 25 + Fensterlänge = 35 vom ersten entfernt sein...
Kann sein, ich habe auf Grund der Frage nach dem Ausdruck formal den Ausdruck bewertet aber die Programmlogik nicht nachvollzogen.
...und was sagst du zu der Programmlogik? logisch oder nicht logisch? nur mal am Rande aus Verzweiflung gefragt: Kann es sein, dass ein Mikrocontroller trotz Klammersetzung die Punkt-Vor-Strich Regeln nicht beherrscht?
> nur mal am Rande aus Verzweiflung gefragt: Kann es sein, dass ein > Mikrocontroller trotz Klammersetzung die Punkt-Vor-Strich Regeln nicht > beherrscht? Doch das tut er :)
> ...und was sagst du zu der Programmlogik? > logisch oder nicht logisch? Es ist heute abend für mich zu spät so eine komplexe Frage noch anzupacken. Lieber den Sonntag noch ruhig ausklingen lassen. Komplex weil man komplett theoretisch an die Sache rangehen muss, also ob die Beschreibung eine gültige Logik enthält, dann ob die korrekt in Programmcode umgesetzt wurde. Der pragmatische Weg mit Testdaten und lauffähigem Programm debuggen, scheidet ja mangels Testdaten und lauffähigem Programm aus. Was beim oberflächlichen Blick auffällt ist, dass du nacheinander auf zwei Arrays arbeitest: Pletyrot bei der ersten Teilsuche und Pletyinfra bei der zweiten Teilsuche und davon steht nix in der Beschreibung. Auch dass die Arrays nicht komplett (also keine PLETYLANGE Elemente lang) durchsucht werden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.