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