Ich sample eine Gleichspannung. Da das Ergebnis durch den Fehler des ADC
Wandlers stark rauscht (Random noise) wollte ich einen digitalen
Tiefpass (IIR 1. Ordnung) anwenden.
Leider habe ich nun keinen Ansatz in welchem Bereich ich die
Grenzfrequenz legen sollte. Ich habe 10 Hz angesetzt es funktoniert
soweit auch, ich muss aber begründen warum und scheitere an dieser
Stelle.
Es muss ja ein Zusammenhang bestehen zwischen Gewichtung der einzelnen
Messwerte im IIR Filter und der Grenzfrequenz, leider ist mir das nicht
ganz klar.
Vlt, kann mir ja jmd hier weiterhelfen
anfänger schrieb:> Da das Ergebnis durch den Fehler des ADC Wandlers stark rauscht
Was verstehst Du unter "stark rauscht" ?
Von was für Bereichen reden wir denn (bezogen auf die Referenzspannung)
?
anfänger schrieb:> Leider habe ich nun keinen Ansatz in welchem Bereich ich die Grenzfrequenz >legen sollte.
Naja...das ist ja eigentlich Deine eigene Definitionssache.
Hast Du einen Anti-Aliasing-Filter am ADC?
Wenn ja, wie sieht der aus.
Wenn nein, dann würde ich da schon mal als erstes ansetzen.
Wieso willst Du einen IIR-Filter programmieren, wenn es ein einfaches RC
bzw. LC-Filter tut?
Wenn Du sowieso nur eine Gleichspannung messen willst!?
Bzw. wie schnell könnte sich denn diese Gleichspannung denn verändern?
Daran könntest Du dann eine Grenzfrequenz festlegen.
Ansonsten könntest Du ja auch mal eine FFT Deiner Messwerte machen und
Dir das ganze mal im Spektrum anschauen.
Grüße
Das ist ja die Formel eines IIR 1. Ordnung:
Filter += (ADC Wert-Filter) / K;
K * Abtastzeit = Zeitkonstate des Filters 1. Ordnung.
Über die Zeitkonstante kommt man über 2PI dann auf die Grenzfrequenz.
Ja es gibt einen Anti Aliasing Filter.
Das von mir erwähnte Rauschen ergibt sich durch den Fehler des ADC
(breitbandiges Random Noise)
um das wegzubekommen brauche ich einen digitalen Filter.
Stawito schrieb:> Das ist ja die Formel eines IIR 1. Ordnung:>> Filter += (ADC Wert-Filter) / K;>> K * Abtastzeit = Zeitkonstate des Filters 1. Ordnung.>> Über die Zeitkonstante kommt man über 2PI dann auf die Grenzfrequenz.
Das ist mir auch klar. ich weis allerdings nicht mit welcher Frequenz
ich ansetzen soll
anfänger schrieb:> Das ist mir auch klar. ich weis allerdings nicht mit welcher Frequenz> ich ansetzen soll
So niedrig wie möglich, abhängig davon wie schnell dein Messwert auf
Änderungen reagieren muss.
Andreas Schwarz schrieb:> So niedrig wie möglich, abhängig davon wie schnell dein Messwert auf> Änderungen reagieren muss.
Mei Messwert kommt alle 20 ms und nach 5,6 Messwerten sollte sich dann
der richtige Wert schon Einstellen. Sitz auf dem Schlauch. Meinste ich
sollte die Grenzfrequenz dann zu 1/20ms wählen?
Hab grad keinen mathematischen Ansatz und kanns mir nicht vorstellen.
anfänger schrieb:> danke für nichts
Wenn man selbst nicht motiviert ist auf gestellte Fragen zu antworten,
kann man auch nicht erwarten dass hier in der Gegend rumgeraten wird.
Normalerweise wird die Kristallkugel an dieser Stelle erwähnt:
N. Müller schrieb:> Was verstehst Du unter "stark rauscht" ?
--> Keine Antwort
N. Müller schrieb:> Von was für Bereichen reden wir denn (bezogen auf die Referenzspannung)?
--> Keine Antwort
N. Müller schrieb:> Wenn ja, wie sieht der aus.
--> Keine Antwort
N. Müller schrieb:> Bzw. wie schnell könnte sich denn diese Gleichspannung denn verändern?
--> Keine Antwort
Andreas Schwarz schrieb:> abhängig davon wie schnell dein Messwert auf Änderungen reagieren muss.
--> Keine Antwort
Für mich stellt sich dann auch noch die Frage was für ein ADC mit was
für einer Referenzspannung verwendet wird, damit der so "stark rauscht"?
Grüße
P.S: Die definition von "stark rauschen" wurde auch noch nicht geklärt.
Die Formel
Filter += (ADC Wert-Filter) / K;
läßt sich so schreiben:
Filter = (1-1/K)*Filter + (1/K)*ADC Wert;
Das ist ein IIR Filter erster Ordnung mit der Zeitkonstanten (1-1/K).
Der TO sagt
'nach 5,6 Messwerten sollte sich dann der richtige Wert schon
Einstellen'
Ich nehme an mit 'richtige Wert schon einstellen' meint er, dass der
Wert bis auf 63% (1-1/e) am stionären Endwert ist. Das soll nach 5
Abtastungen geschehen.
Die Impulsantwort des Filters lautet (1-1/K)^n, also
1/e=(1-1/K)^5 -> K=5.516
so geht das.
math rulez!
Cheers
Detlef
Jetzt nochmal ausführlicher:
Ich verwende einen 10 Bit ADC zur Gleichspannungsmessung. Der ADC ist
Teil der Peripherie eines Mikrocontrollers und nutzt eine interne
erzeugte Referenzspannung von 2.5 Volt.
Abgetastet wird alle 20 ms.
Der ADC hat einen Fehler laut Hersteller von 5 LSB und das merke ich
auch beim Abtasten wenn ich Beispielsweise eine Spannung von 1.25 Volt
messe müsste sich logischerweise ein Ergebnis von 512 einstellen.
Das wirklich Ergebnis schwankt aber um den wahren Wert.
Beispielsweise: 510, 514, 515, 511 etc.
Diese Abweicheung vom wahren Wert ist das von mir erwähnte "Rauschen".
Um das Ergebnis zu "glätten" nutze ich einen IIR Filter.
Der funktioniert auch so weit, nur leider habe ich keinen mathematischen
Ansatz sondern bin per Trial an Error Verfahren vorgegangen und hier ist
mein Problem! :-D
anfänger schrieb:> Abgetastet wird alle 20 ms.
Wenn der Aliasing-Filter richtig ausgelegt ist, dann ergibt sich ja
bereits hier eine maximale Frequenz von 1/(2*20ms)= 25Hz die erfasst
werden kann.
(Shannon/Nyquist --> fmax=fs/2 ).
Wenn man nun noch die Wandlungszeit des ADCs wüsste, dann könnte man
auch noch über die Form des Spektrums eine genauere Aussage treffen.
Wird wahrscheinlich keinen Einfluss haben, da die Wandlungszeit
wahrscheinlich sehr viel kürzer ist als die Abtastrate, aber trotzdem:
Durch das Abstasten ergeben sich im Zeitbereich Impulse(Abtastung) im
Abstand von 20 ms.
Das heißt, Dein Spektrum wird mit einem sin(x)/x - Linienspektrum
(Linienabstand 25Hz) gewichtet. Die erste Nullstelle ist gegeben durch
1/Wandlungszeit (siehe Bild). Das heißt, dass die Werte bei steigender
Frequenz eine geringere Gewichtung haben und alleine schon dadurch eine
Filterung stattfindet.
Man könnte jetzt noch Aussagen über das SNR treffen, aber das bringt
einen ja auch nicht weiter, oder?
Ansonsten würde ich mal eine sehr lange Messung machen, mir die Werte
abspeichern und dann mal schauen ob man irgendwelche nutzbaren
statistischen Eigenschaften wie AKF und LDS bekommt. Dann siehste ja was
für Frequenzen stören.
Anschließend könnte man evtl. noch in Richtung Wiener-Filter gehen.
Grüße
Danke das is shconmal sehr hilfreich
Klaus der 3. schrieb:> Wenn der Aliasing-Filter richtig ausgelegt ist, dann ergibt sich ja> bereits hier eine maximale Frequenz von 1/(2*20ms)= 25Hz die erfasst> werden kann.> (Shannon/Nyquist --> fmax=fs/2 ).
Das Abtasttheorem ist für mich nicht relevant, da ich das
Ursprungssignal nicht widerherstellen will, sondern die gefilterten
Werte direkt ausgeben will.
anfänger schrieb:> Das Abtasttheorem ist für mich nicht relevant, da ich das> Ursprungssignal nicht widerherstellen will, sondern die gefilterten> Werte direkt ausgeben will.
Wahrscheinlich eher weil Deine Gleichspannung nur sehr langsam
veränderlich ist und Du deshalb deutlich überabtastest! Anonsten wird ja
durch das Abtasttheorem auch erreicht, dass nichts unter den Teppich
fällt (alle Frequenzen detektiert werden können).
Angenommen Du hättest einen Sinus auf Deiner Gleichspannung (also Sinus
mit Gleichspannungsoffset) und Du würdest durch die zu niedrig gewählte
Abtastrate immer genau im Scheitelwert des Sinuses abtasten, dann
würdest Du ja meinen dass Deine Gleichspannung um die Amplitude des
Sinuses zu groß ist!
Dann bringt Dir auch Deine nachträgliche Filterung nichts mehr, weil Du
bereits im Eingang des Filters eine saubere aber falsche Gleichspannung
gemessen hast!
Abtastung ist irreservibel!
Du verlierst durch Abtastung Informationen!
Und das sind im schlimmsten Fall gerade die Infos wo Du brauchst.
Also ist es auch bei Dir nicht egal.
Ein Moving Average Filter ist vom Aufwand/Nutzen auch nicht schlecht.
Die Rauschleistung sy am Ausgang ist dabei
wobei N natürlich die Filterordnung des MAF ist.
Man könnte auch mehrere MAF kaskadieren, dann würde N sogar quadratisch,
kubisch....eingehen.
Grüße
Hallo,
So wie ich den Threadstarter verstanden habe geht es hier nicht um eine
Messung hoher Frequenzen sondern einer einfachen Gleichspannung.
Weiterhin geht der Threadstarter davon aus, dass der Fehler von dem ADC
herrührt. Wenn es einfach um eine Stabilisierung des Ausgabewertes, oder
eine Erhöhung der Auflösung geht, dann sollte eine einfache
Mittelwertbildung über eine Anzahl von Werten zum gewünschten Ergebnis
führen (Vorraussetztung: lediglich Anzeige und keine Regelung der
Messgröße).
Wie oben schon beschrieben, sorgen hohe Frequenzanteile überhalb der
Abtastfrequenz für sogennantes Aliasing, welches als niederfrequentes
"Rauschen" in Erscheinung treten kann. Es wurde weiterhin schon
beschrieben, dass dem Aliasing nicht mit einem digitalen Filter begegnet
werden kann.
Grüße
Arne Westphal schrieb:> Wie oben schon beschrieben, sorgen hohe Frequenzanteile überhalb der> Abtastfrequenz für sogennantes Aliasing, welches als niederfrequentes> "Rauschen" in Erscheinung treten kann. Es wurde weiterhin schon> beschrieben, dass dem Aliasing nicht mit einem digitalen Filter begegnet> werden kann.
Ja, das sollte nur als Richtigstellung gedacht sein, dass auch für den
TO das Abtasttheorem gilt.
Allerdings könnte es auch genauso sein dass das Rauschen, Messfehler
sind.
Woher weis der TO dass es definitiv vom ADC selbst kommt?
Eine Analyse der Messwerte wurde ja noch nicht durchgeführt.
Zumindest wurde es hier noch nicht erwähnt.
Es könnte genauso eine schlechte Referenzspannung oder irgendwelche
Einstrahlungen z.B. das 50Hz Brummen sein.
Oben wurde ja schon erwähnt dass die max. zu messende Frequenz 25Hz
sind.
Dass heißt selbst bei 50Hz würde bereits Aliasing stattfinden!
Wenn es in höheren Frequenzbereichen einen 25Hz breiten Störer gibt,
kann der wenn es ungünstig fällt genau in Dein Basisband fallen und Du
interpretierst es als "breitbandigen Störer". Und 25 Hz Bandbreite ist
nun mal nicht viel.
Theoretisch könnte man doch auch mal viel schneller abtasten
(Grenzfrequenz des Aliasfilters) und das über einen gewissen Zeitraum.
Dann könnte man Vernünftig eingrenzen.
Grüße
Wenn er nur eine Gleichspannung messen will, dann ist der Wert konstant
und der Filter kann eine extrem niedrige Grenzfrequenz haben.
-Unendlich lange addieren und jeweils durch die Zahl der Werte teilen.
CPU-Neuling schrieb:> Wenn er nur eine Gleichspannung messen will, dann ist der Wert konstant> und der Filter kann eine extrem niedrige Grenzfrequenz haben.>> -Unendlich lange addieren und jeweils durch die Zahl der Werte teilen.
Das ist richtig, man muss einen Kompromiss finden zwischen
Reaktionsgeschwinnigkeit es Filters un Selektivität.
Zum Moving Average:
Joa sowas in er Richtung hatte ich auch schon drin. Allering will ich
nicht so viele Werte zwischenspeichern deshalb die Idee mit dem IIR
Tiefpass.
Hab jetzt mal nen Tiefpass vorgeschaltet. Ändert aber nix an meinem
Rauschen des Messwertes. Denke wirklich dasses am AC liegt und ich
digital filtern muss.
anfänger schrieb:> ...> Zum Moving Average:> Joa sowas in er Richtung hatte ich auch schon drin. Allering will ich> nicht so viele Werte zwischenspeichern deshalb die Idee mit dem IIR> Tiefpass.> > Mei Messwert kommt alle 20 ms und nach 5,6 Messwerten sollte sich dann> > der richtige Wert schon Einstellen.
6 Meswwerte speichern ist zuviel?
Der Vorteil von "Moving Average" ist, dass ein Filter mit N-Abtastwerten
nach N-Takten auf 100% eingeschwungen ist.
Bei deinem IIR Filter musst du 7*Anstiegszeit warten bis du auf 99,9%
bist. Ist also extrem langsam.
Helmut S. schrieb:> Bei deinem IIR Filter musst du 7*Anstiegszeit warten bis du auf 99,9%> bist. Ist also extrem langsam.
Das kann man so pauschal nicht sagen, wenn es darum geht, das Rauschen
zu unterdrücken. Es kommt auch noch auf das Verhältnis der
Rauschamplitude bezogen auf die Auflösung an.
Man kann natürlich Oversampling und Filterung nutzen, um das Rauschen
für eine Erhöhung der Auflösung zu nutzen, aber das ist ja nicht das
Thema.
Helmut S. schrieb:> Bei deinem IIR Filter musst du 7*Anstiegszeit warten bis du auf 99,9%> bist. Ist also extrem langsam.
Das haengt doch von der wahl der koeffizienten ab oder?
Das schon, aber dann probier mit dem IIR-Filter nach 6 Werten auf auf
99,9% zu kommen. Da ist dann fast keine Filterwirkung mehr da.
OK, das war jetzt für einen Sprung von 0 auf 100% Spannung. Bei
kleineren Schwankungen macht das bezogen auf den Gesamtwert weniger aus,
aber auch da dürfte noch eine größere Einschwingzeit notwendig sein.
2 Fragen:
1. Woher kommt sie und ist Deine Referenzspannung sauber?
2. Verwirfst Du die 1. Messung nach Aktivierung des ADC's?
Eine Anmerkung:
Wie Andr. Schw. andeutete kommt es doch darauf an, wie schnell sich der
Wert Deiner Gleichspannung aendern kann. Das musst Du wissen. Und dann
mittelst Du halt ueber eine Anzahl von Werten, die (zusammen mit dem
Wissen, wie oft Du sampelst) eine Zeit ergeben, die unter der
Änderungszeit liegen muss?
Alex schrieb:> 2 Fragen:> 1. Woher kommt sie und ist Deine Referenzspannung sauber?> 2. Verwirfst Du die 1. Messung nach Aktivierung des ADC's?>> Eine Anmerkung:> Wie Andr. Schw. andeutete kommt es doch darauf an, wie schnell sich der> Wert Deiner Gleichspannung aendern kann. Das musst Du wissen. Und dann> mittelst Du halt ueber eine Anzahl von Werten, die (zusammen mit dem> Wissen, wie oft Du sampelst) eine Zeit ergeben, die unter der> Änderungszeit liegen muss?
Wie ist denn der Zusammenhang zwischen Änderungsgeschwindigkeit eines
Signals und der von mir angesetzten Grenzfrequenz?
Wie gesagt kann sich der Wert alle 20 ms ändern un zwar durchaus um 100
Prozent (Also beispielsweise von 0 auf 1023 als ADC Wert oder
umgekehrt).
Wie kann ich denn daraus auf die Grenzfrequenz schliessen?
anfänger schrieb:> Wie gesagt kann sich der Wert alle 20 ms ändern un zwar durchaus um 100> Prozent
Bei so heftigen Änderungen solltest du vielleicht deinen
Filteralgorithmus ein bisschen intelligenter gestalten und nicht nur als
TP.
Anhand einer Einzelmessung kannst du sicher erkennen, ob so ein grober
Sprung vorliegt. Was hindert dich also daran, in solch einem Fall dein
IIR-Filter mit dem neuen Wert zu initialisieren, so dass es nicht auf
den ganzen 100% Sprung einschwingen muß, sondern sich nur um das
Rauschen kümmert.
anfänger schrieb:> Wie gesagt kann sich der Wert alle 20 ms ändern un zwar durchaus um 100> Prozent (Also beispielsweise von 0 auf 1023 als ADC Wert oder> umgekehrt.
Das erwähnst Du hier zum ersten mal, hättest Du oben mal die Fragen zu
der maximalen änderung der “Gleichspannung “angegeben, dann hätte man
sich einiges hier sparen können!
In meinen Augen ist das dann keine Gleichspannung mehr, sondern eine
Wechselspannung mit Gleichspannungsoffset.
Hab jetzt aber keinen Bock mehr auf raten...deshalb viel Glück noch...
schon mal dran gedacht deine Analoge Spannungsversorgung zu verbessern
bzw. Analog GND von Digital GND zu trennen, VCC Analog besser zu filtern
mit RLC, Referenz besser puffern, Eingangssignal besser Puffern und
filtern ?
Nicht vergessen Vergleichsmessungen vorher und nachher durchzuführen !
Oder ist dir das Alles zu anstrengend ? Wenn die Hardware OK ist kann
man die Software schreiben.