Regressiongerade

Gast #125264
Lesenswert?
• ▲
▼
Hallo an alle!
Habe ein Problem moechte jeweils einem 8bit Wert aus dem A/D Wandler
einen anderen Wert einer anderen Kurve zuordnen. Bei 256 Werten waere
das ein riesen Programmieraufwand,oder sehe ich das falsch. Habe jetzt
eine Regressiongerade bestimmt mit dem ich den Kurvenverlauf bestimmen
koennte.Problem hierbei sind die
Koeffizienten.y=5,4094E-8*x^4-1,898E-5*x^3+2,4812E-3*x+4,31354347
Nun klar brauch ich nicht alle Stellen und das Ergebnis soll auch keine
Nachkommastellen mehr aufweisen also gerundet sein, aber wie kann ich
das berechnen?
Gast #125266
Lesenswert?
• ▲
▼
Ich würd dir schon vorschlagen es mit einer Tabelle zu machen, wenn du
nicht alle Werte benötigst, kannst du deine Tabelle auch
dementsprechend verkleinern. Machst einfach zur Sicherheit eine
Berichsüberprüfung bevor du den Tabellenwert ausliest. Um den
Flashspeicher würde ich mir nicht unbedingt sorgen machen, denn du
sparst einiges wenn du auf Float verzichten kannst.

Gruß
Peter
Gast #125268
Lesenswert?
• ▲
▼
einfach was in der Art:


const int look_up[] = {1,2,5,7,8,45,5,6,...};

Zugriff dann mit

unsigned char ad_wert;
int wert;
 ad_wert = hole_ad_wert();
 wert = look_up[ad_wert];

so, oder so ähnlich, einfach den AD-Wert als index in der Tabelle
verwenden, und dir so den zugehörigen wert holen....
Gast #125270
Lesenswert?
• ▲
▼
Ok, war erst mal mein Fehler, hab nicht gelesen, dass das "Programmiere
in Assembler!" von dir war. Dachte das war mal wieder einer der
hilfreichen Kommentare die man manchmal so liest...
Ich programmiere kein Assembler, von dem her kann ich dir auch bei der
Umsetzung nicht weiterhelfen. Dürfte aber auch nicht weiter schwer
sein, wenn du das Prinzip verstanden hast. Sowas wie Felder sollte es
ja auch in assembler geben ;)
Gruß
Peter
Gast #125272
Lesenswert?
• ▲
▼
Hi!
Da du nicht gesagt hast welcher uC eben mal als PaP:

lade Indexreg.mit Adr.Tabellenanfang
addiere zum Indexreg. AD-Wert
hole Wert,laut Index,aus Tabelle


Tabelle:1;3;5;7;..

Einfacher geht es kaum.

MfG Uwe
Gast #125274
Lesenswert?
• ▲
▼
Frage stellt sich jetzt nur noch nach der Skalierung.
Die Funktion ist bei 65->66 null, bei 255 hätte sie den Wert -81.67 und
bei einem ADC-Wert von 1 hätte die Funktion dann einen Wert von 4,316
(gerundet).
Villeicht brauchst Du ja Amplituden, die einen anderen Wertebereich von
x bedingen würden. musst das also nochmal mit deinem Wertebereich
multiplizieren. Denn erst bei 348->349 wird die Funktion wieder 0 und
schmeisst dann wieder positive Werte.
Also wenn Du den gesamten wertebereich erfassen musst, und nicht nur
einen Teil der Kurve-

Ich habe eben mal den wertebereich von 1020 -> 1023 (10bit-anschlag vom
ADC) anzeigen lassen. 38929!! Da läuft dir dein Integer über, ist ja
blöd. Aber Du sagtest ja, du hast nur 255 Werte. Trotzdem aufpassen

Casio baut bessere Taschenrechner als Klaviere...
Gruß
Axel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren