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.
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
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
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 !?