Forum: Digitale Signalverarbeitung / DSP / Machine Learning Grenzfrequenz digitaler Tiefpass


von anfänger (Gast)


Lesenswert?

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

von N. Müller (Gast)


Lesenswert?

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

von Stawito (Gast)


Lesenswert?

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.

von anfänger (Gast)


Lesenswert?

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.

von anfänger (Gast)


Lesenswert?

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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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.

von anfänger (Gast)


Lesenswert?

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.

von Uwe (Gast)


Lesenswert?


von anfänger (Gast)


Lesenswert?


von Klaus der 3. (Gast)


Lesenswert?

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.

von Detlef _. (detlef_a)


Lesenswert?

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

von anfänger (Gast)


Lesenswert?

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

von Klaus der 3. (Gast)


Angehängte Dateien:

Lesenswert?

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

von anfänger (Gast)


Lesenswert?

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.

von Klaus der 3. (Gast)


Lesenswert?

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

von Klaus der 3. (Gast)


Lesenswert?

...hatte den Backslash vergessen:

von Arne W. (ronnyroster)


Lesenswert?

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

von Klaus der 3. (Gast)


Lesenswert?

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

von CPU-Neuling (Gast)


Lesenswert?

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.

von anfänger (Gast)


Lesenswert?

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.

von Helmut S. (helmuts)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von anfaenger (Gast)


Lesenswert?

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?

von Helmut S. (helmuts)


Lesenswert?

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.

von Alex (Gast)


Lesenswert?

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?

von anfänger (Gast)


Lesenswert?

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?

von Michael (Gast)


Lesenswert?

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.

von N. Müller (Gast)


Lesenswert?

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

von uwe (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.