Forum: Mikrocontroller und Digitale Elektronik Einmal C-Programm prüfen


von Wolfgang S. (wsm)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe im Netz beiliegendes Programm für den Kalman-Filter gefunden 
und für mich in eine andere Sprache umgeschrieben.

Zur Überprüfung suche ich jemand, der das C-Programm mal laufen lässt 
und mir die ersten 20 ausgegebenen Werte zukommen lässt, so dass ich 
diese zur Kontrolle mit den Ausgaben meines Programmes vergleichen kann.

Danke.

W.

von argh! (Gast)


Angehängte Dateien:

Lesenswert?

Wenn's dich glücklich macht...

von Wolfgang S. (wsm)


Lesenswert?

das war schnell, danke.

Kann ich die Ausgabe auch mal mit 4 NAchkommastellen haben ?

Danke

W.

von Achim M. (minifloat)


Angehängte Dateien:

Lesenswert?

Bittedanke. mfg mf

von argh! (Gast)


Angehängte Dateien:

Lesenswert?

Wolfgang Schmidt schrieb:
> das war schnell, danke.
>
> Kann ich die Ausgabe auch mal mit 4 NAchkommastellen haben ?
>
> Danke
>
> W.

Hier.

von Achim M. (minifloat)


Lesenswert?

Da war wohl argh schneller.

An den TO aus reinem Interesse: in welche Sprache hast dus denn 
umgeschrieben?
mfg mf

von argh! (Gast)


Lesenswert?

Mini Float schrieb:
> Da war wohl argh schneller.
:D

Ich hab immer ein Code::Blocks-Projekt auf dem Desktop für genau solche 
Fälle. Vorher war da ein Sudokusolver drin, jetzt halt irgendein 
Filterzeugs (zu hoch für mich)...

Und die Anzahl Dezimalstellen zu erhöhen ist ja wahrlich keine Kunst, 
ebenso die Ausgabe in eine Datei zu bekommen.

Ist übrigens sauber geschrieben, nur 2 Warnungen unused argc, argv.

von Oliver J. (skriptkiddy)


Angehängte Dateien:

Lesenswert?

bitte schön

von Oliver J. (skriptkiddy)


Angehängte Dateien:

Lesenswert?

hier nochmal mit 4 Dezimalstellen

von argh! (Gast)


Lesenswert?

Oliver J. schrieb:
> hier nochmal mit 4 Dezimalstellen

Guck mal weiter oben. ;-)

Interessant solche Threads, die zeigen dass es hier einige hilfsbereite 
Leute gibt. :-)

von Wolfgang S. (wsm)


Lesenswert?

Erst mal vielen Dank für die Hilfe.

Ihr dürft mich schlagen, aber ich habe den Code in BASCOM umgeschrieben.

Nach dem Vergleich mit euren Ergebnissen kann ich sagen, dass ich genau 
die gleichen Werte erhalte (trotz BASCOM).

Verwundert bin ich nur über die Ergebniswerte. Die passen so garnicht zu 
den Eingaben. Kalman-Ergebnisse erwarte ich als geglättete Werte in der 
Größenordnung der Einganswerte.

Hier enthalten die Ergebnisse richtige Ausreiser, so dass vermutlich im 
Ausgangscode ein Fehler enthalten ist.
Zum Schluss sehen die Ergebnisse jedoch ganz gut aus.


Kann von euch jemand die Kalman-Ergebnisse beurteilen ?

Danke

W.

von Achim M. (minifloat)


Lesenswert?

Wolfgang Schmidt schrieb:
> Nach dem Vergleich mit euren Ergebnissen kann ich sagen, dass ich genau
> die gleichen Werte erhalte (trotz BASCOM).

Gleichheit der Ergebnisse wird dir hier auch kaum einer anzweifeln. Aber 
Geschwindigkeit... duckundweg

von argh! (Gast)


Lesenswert?

Mini Float schrieb:
> Wolfgang Schmidt schrieb:
>> Nach dem Vergleich mit euren Ergebnissen kann ich sagen, dass ich genau
>> die gleichen Werte erhalte (trotz BASCOM).
>
> Gleichheit der Ergebnisse wird dir hier auch kaum einer anzweifeln. Aber
> Geschwindigkeit... *duckundweg*

Ach Troll, elender! :D lach (s. auch AVR-Studio-Thread...)

von Wolfgang S. (wsm)


Lesenswert?

Wo gibt es denn eine Aussage über die Geschwindigkeit des gleichen Codes 
in BASCOM und C auf dem gleichen Atmega ?

Wer kann den einmal die Laufzeit messen ?
z.B. mit einem Atmega 8 oder 32 und bitte Quarzfrequenz angeben

Vorschlag:

Nur die Rechnungen durchführen und nach dem Abschluss ein "fertig" 
ausgeben.

Ich werde das in den nächsten Tagen dann auch mal machen.

Oder hat jemand einen Simulator der die Takte für einen Aufruf der 
Funktion ausgeben kann ?

W.

von Wolfgang S. (wsm)


Lesenswert?

Ich habe gerade 13247 Zyklen für einen Aufruf der Kalman-Funktion 
gemessen.

Für alle 500 Werte sind das ohne Ausgaben rund 0,415 Sekunden mit einem 
Atmega32 und 16MHz Takt.

W.

von Achim M. (minifloat)


Lesenswert?

Wolfgang Schmidt schrieb:
> Ich habe gerade 13247 Zyklen für einen Aufruf der Kalman-Funktion
> gemessen.

Weil in dieser Funktion in float gerechnet wird, wird es kaum einen 
Unterschied zwischen C und Bascom geben.

Wolfgang Schmidt schrieb:
> Ich habe gerade 13247 Zyklen [...] gemessen.

Das kann man pauschal nicht sagen, da für float z.B. mal mehr, mal 
weniger geshiftet werden muss, bis eine normalisierte Zahl rauskommt(bei 
Multiplikationen). Die Multiplikationen können nur zum Teil in Hardware 
ausgeführt werden, da der in der Hardware vorhandene Multiplier keine 
24bit-Zahlen verarbeiten kann(23 bit Mantisse mit wegnormalisierter 
"leading one").

Außerdem wird in der Funktion auch dividiert. Weil die kleinen Megas 
keinen Divider in Hardware haben, lassen sich auch hier keine absoluten 
Zykluscounts angeben.

mfg mf

von Wolfgang S. (wsm)


Lesenswert?

Mini Float schrieb:
> Weil in dieser Funktion in float gerechnet wird, wird es kaum einen
> Unterschied zwischen C und Bascom geben.

Genau diesen Satz wollte ich von einem C-Programmierer hören.
Damit dürfte die Überheblichkeit der C-Programmierer einen Dämpfer 
bekommen haben.

Dass die im Simulator angegebene Zyklenzahl von Randbedingungen abhängt, 
ist doch klar.

Normalerweise gewinnt der bessere Programmierer. Ob C++ oder BASCOM oder 
auch PASCAL ist fast egal.
Nur Assembler nimmt eine Sonderstellung ein.

W.

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
Noch kein Account? Hier anmelden.