Hallo, ich erhalte von einem AD-Wandler einen 24bit Wert. Die letzten 5 Bits schwanken, also möchte ich den Wert filtern. Wie geht man am besten vor? u32 sample; sample=adwert; sample=sample>>5; sample=sample<<5; return(sample); oder ist es besser den Wert zu filtern? static float a,b; a=((float)sample*0.7)+(b*0.3); b=a; return((u32)a); oder alles quatsch!
Michael wrote:
> oder alles quatsch!
Ja !
Die erste Lösung ist Mist, da du Genauigkeit verschenkst, die zweite da
float viel weniger Genauigkeit hat als long !
static unsigned long wert;
wert=wert-wert/4+sample;
return(wert/4);
Das entspricht in etwa der float Lösung ist aber genauer und um den
Faktor 100 schneller und etwa 2kByte kleiner.
Brauchst du denn die 24 BIT effektiv ? Du solltest aus mindestens 8 oder 16 Messungen den Mittelwert bilden. Üblicherweise verschafft man sich so die nötige Stabilität. 24 BIT ist schon recht heftig. Werde dir darüber klar welche Auflösung du wirklich brauchst. Vielleicht kannst du mal die Meßaufgabe beschreiben. 5 Stellen schwanken, auch das ist sehr Viel.
Die Lösung von Benedikt funktioniert schon sehr gut. Laut meiner Berechnung würden 18 Bit der 24 genügen.
Dann kannst du durchaus die überflüssigen BITs herausschieben. sample = adwert >> 6; aus deinem Beispiel. Dann mach ne Mittelwertbildung über 32 Messungen und schon ist Ruhe. Warum 32 ? im Prinzip geht nätürlich 2, 4, 8, 16, 32 ... und dann wieder BIT's schieben. Das spart das Rechnen.
Kleine Anmerkung: Was hängt da vorne dran mit 24 Bit ? Ich kenne fast nix, was "echte" 24 Bit erzeugt und dies zu messen ist ne ganz andere Größenordnung. Das ganze ist ähnlich wie bei den PC-Lautsprechern mit 1000W PMPO aus nem kleinen Steckernetzteil.....:o) Die Schieberei ließe sich auch als sample &= 0xffffe0; schreiben, bringt also nix. Die Filterung (z.B. 0.75*alter + 0.25*neuer) ist angenehmer als Mittelwertbildung, da dabei doch ggf. eine ziemliche Verzögerung dazu kommt. Thomas
Hi, da hängt ein AD7714 mit einem Drucksensor von Motorola dran. Ich ermittle damit den Druck und kann damit Höhenunterschiede von ca. 10cm erechnen.
>Die letzten 5 Bits schwanken, also möchte ich den Wert filtern.
...
Benötigst du für die 10cm Auflösung 24bit oder 18 bit?
Oliver
Schau mal, ob do da nicht auch etwas trixen kannst. Du erwartest doch bestimmt keine Spannungen im gesamten Bereich von 0 bis 5V, oder? Verschiebe bzw. dehne den Spannungsbereich den du benötigst mit einem OPAmp.
Wie genau ist den der Sensor ? KannstDu die Schwankungen alle anschauen? Wenn ja, ist da eine Systematik drin? Mitteln bringt-s nur dann, wenn die Störung auch symmetrisch ist, extremfall: Wert 0, dann kann der Wert (gemittelt) nicht >Null sein, da kleiner 0 der ADU nicht anzeigt, ,-) 24 bit ist schon ein gutes layout, wenn-s klappt, siehe Applikatiuonen der Hersteller Gruß, c.
>Die erste Lösung ist Mist, da du Genauigkeit verschenkst,
Eigentlich verschenkt er nur den seed für seinen Zufallsgenerator. Wenn
5 Bits wackeln, was sagen da wohl die unteren 4 noch aus?
Nimm 19 bit, setzt da noch einen mitlaufenden Mittelwert, angepasst an
die gewünschte Dynamik der Anwendung, drauf (anscheinend misst du ja
Höhe per Luftdruck - Boden-Luft-Abfangrakete oder Heißluftballon?).
Wenn es genauer werden soll, musst du den unteren Bits das wackeln
abgewöhnen. Am ADC liegt es ja wohl nicht, der hat schon ein SNR von
137dB. Der Rest der Schaltung auch?
Oliver
das gibt ein Variometer zum Gleitschirmfliegen, die Genauigkeit reicht mit 18 Bit aus.
Bei einem weissen Rauschen ist ein Mittelwertfilter ideal, falls kleine Spitzen auftreten, könntest Du die mit einem Media-Filter wegbringen. Eine Kombination von den beiden ist auch leicht möglich und braucht kaum Rechenzeit.
Hmm, da stopfen sich die Gleitschirmflieger und teilweise auch die Segelflieger mit Elektronik voll und vergessen das eigentliche Fliegen total. Was nützt ein super-genaues Vario überhaupt? Um effizient zu fliegen brauchst Du in erster Linie Erfahrung, Erfahrung und nochmals Erfahrung. Ob ein Bart nun mit 2,4 m/s oder 2,4543 m/s geht, ist pieps egal. Wichtig ist nur dass er geht und wie weit oben Du raus kommst und ob Du die richtigen Bärte erwischt, also nicht bei jedem Pups mit Kurbeln anzufangen. Klar, ein Endanflugrechner ist was nettes, ab auch der nützt herzlich wenig, wenn er Dir anzeigt, dass Du mit -200 Meter am Platz rauskommst weil Du vor lauter Display ablesen in ein ordentliches Saufen geraten bist. Thermikfliegen muss man im Arsch haben und kann man nicht durch Display anglotzen ersetzen. Keine Ahnung wie es bei den Gleitschirmflieger ist, aber im Segelflieger meldet der Arsch und die Feinmotorik den Bart weit früher als das teuerste E-Vario. Übung und Erfahrung kann man nicht durch Elektronik ersetzen. Es ist übrigens viel spannender und lehrreicher, eine ordentliche Streckenplanung am Boden von Hand zu machen und dann hinterher kontrollieren, wie gut Theorie und Praxis zusammengepasst hat.
Hallo Unbekannter, ich gebe Dir in allen Punkten Recht. Aber versuche mal ein Gerät zu verkaufen, das sich an Konkurenzprodukten messen muss und immer verliert. Auch schon Anfängerflieger die noch nie länger als 30 min. in der Luft waren, geschweigeden einen Streckenflug gemacht haben fragen mich nach MC Ready und Kartendarstellung, Waypoints......... Gruß Michael
@ Unbekannter
>Was nützt ein super-genaues Vario überhaupt? Um effizient zu fliegen
Wobei ich mal behaupte, dass ein Variometer nicht mal ansatzweise 18 Bit
AD-Wandler braucht. Schliesslich misst es nur den Differenzdruck über
kurze Zeitabschnitte. Mit dem richtigen Differenzdruckgeber + Analogteil
tuts ein popeliger 8 Bit AD-Wandler.
MfG
Falk
es ist ein MPX4115. Natürlich brauche ich nicht die Genauigkeit zur Anzeige des Steigens oder Sinkens. Wenn man aber nicht möchte dass das Vario am Startplatz ständig rumpiepst und im Flug einen sauberen Piepton erzeugen möchte braucht man schon etwas genauere Werte.
Was soll das rumgehacke auf den 24bit wandlern. Sie sind standard fuer 5$. Frueher waren die 7109 gut, heute hat man 24 bit. Wenn dann noch 18 rauskommen ist doch gut.
Ich bin davon ausgegangen, dass er eine hohe Bitzahl braucht - aber danach sieht es eher nicht aus => "abschneiden" der überflüssigen Bits Gruß c. median: naja, wenn man 1 1 1 und 3 3 3 hat, kommt nicht 2 raus. Aber wie gesagt, die Störungen sollten bekannt sein bzw. ein "Modell" dafür vorliegen. Median käme auch nicht in Frage, wenn der Senor nahe am Limit arbeitet. Das Ergebnis zum Mittelwert dürfte sogar schlechter sein bei entspr. Störungen (Rauschen), da ich bei den Werten 1 1 1 2 2 2 gemittelt 1,5 bekommen, ;-) Das ist vermutl. eh klar. speed, es ist eine einfaches sortieren + mittleren wert nehmen. Da kann ggf. der Mittelwert schneller sein !?
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.