Hallo. Ich arbeite mich gerade durch den Capsense Source Code (PSOC3) durch. Wenn sich der Wert am Sensor ändert,z.b. durch Temperaturschwankung, soll eine Referenz(SensorBaseline[]) diese folgen.Eigentlich ganz simple aber trotzdem verstehe ich den Algorithmus nicht: UpdateSensorBaseline() { uint32 calc; uint16 RawData; //new sample RawData = input; /* Make full Baseline 23 bits */ calc = (uint32) SensorBaseline[sensor] << 8u; calc |= (uint32) SensorBaselineLow[sensor]; /* Add Raw Data to Baseline */ calc += RawData; /* Sub the high Baseline */ calc -= SensorBaseline[sensor]; /* Put Baseline and BaselineLow */ SensorBaseline[sensor] = ((uint16) (calc >> 8u)); SensorBaselineLow[sensor] = ((uint8) calc); } //global deklariert: uint16 SensorBaseline[max_SENSOR]; //used to store fraction byte of baseline value uint8 SensorBaselineLow[max_SENSOR]; Warum bildet man nicht einfach die Differenz des Sensorwertes und der Referenz: RawData - SensorBaseline=Diff. Und addiert Diff anschl. zur Referenz: Diff+SensorBaseline=SensorBaseline. Mich verwundert auch der Kommentar: //used to store fraction byte of baseline value uint8 SensorBaselineLow[max_SENSOR]; Was soll hier ein fraction Byte bedeuten?
Das ist ein IIR-Filter mit y_n+1 = (y_n * 255 + x ) / 256 Wegen der einfacheren Berechnung ist 255 als y_n * 256 - y_n realisiert MfG
Ahh,jetzt machts Sinn. Dankeschön. Aber wie komm ich auf : y_n * 256 - y_n = 255? Und warum gibt es dort ein fraction Byte: SensorBaselineLow?
Christian schrieb: > Ahh,jetzt machts Sinn. Dankeschön. > Aber wie komm ich auf : y_n * 256 - y_n = 255? nicht 255 y_n * 255 ist ersetzt worden durch y_n * 256 - y_n > Und warum gibt es dort ein fraction Byte: SensorBaselineLow? Damit man zwar in ganzen Zahlen rechnen kann aber trotzdem sowas wie "Kommastellen" hat. Du kannst ja auch anstelle von in Euro in Cent rechnen. Anstelle von 3 Euro 80 + 5 Euro 75 3.80 5.75 ------ 9.55 rechnest du einfach 380 575 ---- 955 das heisst dein Ergebnis ist 9 Euro. und die 55 sind das 'Kleingedruckte', die Nachkommastellen. Hier halt nicht dezimal, sondern in Form von 8 Bit
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.