Wie kann ich meinen digitalen Filter verbessern, um DC aus Rauschen zu extrahieren?

Beschreibung Digitalfilter:

  1. Die Eingabe des Filters sind Sensordaten und die Ausgabe wird an einen PID-Regler geliefert.

  2. Abtastrate: 64 kHz

  3. Geräuschspektrum: von DC bis 10 kHz

  4. Filterziel: Nur DC-Komponenten erhalten und Rauschen so weit wie möglich reduzieren.

  5. Charakteristik von DC: Es ändert sich sehr langsam, sagen wir bei 0,000001 Hz.

Mehr zum System

  1. Der Systemeingang (Ref oder Referenz ist Null). Und tatsächlich ist es das Ziel des Controllers, die Ausgabe des Systems auf Null zu halten.

  2. Auch in diesem System gibt es Störungen und Geräusche. Die Störung hat ungefähr die Form einer Rampe, ist jedoch von Natur aus eher zufällige Ereignisse mit sehr niedriger Frequenz

  3. Der Regler ist ein einfacher PI-Regler. Es ist bestrebt, den Einfluss von Störungen zu kompensieren und gleichzeitig Geräusche zu beseitigen.

  4. Die Geräusche stammen von Sensoren und der Filter zwischen Controller und Sensor ist das, wofür ich hier Hilfe suche.

Geben Sie hier die Bildbeschreibung ein

Meine derzeitige Art des Filterdesigns:

  1. Die Daten werden zuerst in einen Dezimator zur Dezimierung gegeben. Der Dezimator ist ein 320-Tap-Durchschnittsfilter, der alle 320 Daten mittelt und ein gemitteltes Ergebnis exportiert. Die Ergebnisse liegen bei 200 Hz.

  2. Die gemittelten Daten gehen dann weiter in einen Mittelungsdezimierer mit 20 Abgriffen. Die Ergebnisse liegen bei 10 Hz.

  3. Schließlich werden die Daten bei 10 Hz in ein IIR oder wieder in einen gleitenden Mittelwertfilter eingespeist. Das Endergebnis soll im Bereich von 1 Hz bis 0,2 Hz liegen.

Meine Bedenken: Unzureichendes Design

Der durchschnittliche Dezimator ist möglicherweise nicht scharf genug, da es sich im Grunde um FIR mit denselben Koeffizienten von 1/320 handelt. Da die Filter nicht scharf genug sind, kann eine Dezimierung (Downsampling) hochfrequente Rauschabbildungen in die gefilterten Ergebnisse einführen.

Das folgende Diagramm ist die Antwort für 1/320 MittelwertfilterGeben Sie hier die Bildbeschreibung ein

Kann nicht schlecht sein

Da die mehreren Stufen der Dezimierung im Wesentlichen die Signale mitteln. Die Ergebnisse müssen DC-Komponenten sein, da DC so definiert ist.

Beratung erforderlich

Wie kann ich mein aktuelles Design verbessern?

Warum verwendest du keinen IIR-Filter?
@BrianDrummond Für Dezimierungsstufen oder für die letzte Filterstufe? Für die Dezimierungsstufen spart eine FIR (in diesem Fall Mittelung) Rechenressourcen, da die Dezimierung nur das benötigte Ergebnis berechnet und sich nicht um die abgelegten kümmert. Ein IIR hängt jedoch von historischen Werten ab und muss alle Daten verarbeiten.
@richieqianle Ich denke, eine FIR mit 320 Taps ist etwas übertrieben. Vielleicht erhalten Sie eine bessere Reaktion und eine geringere Verzögerung, wenn Sie Filterkoeffizienten (anstelle des gleitenden Durchschnittsfilters 1/n_taps) und 32 Taps oder 64 verwenden.
@MarkoBuršič Glaubst du, dass das immer noch ein Problem ist, wenn wir nur über DC-Komponenten sprechen? Und Verzögerung wäre kein Problem, nur Rauschen ist es.
Nun, wenn Ihr Rauschen weiß ist, ist der optimale Filter der gleitende Durchschnitt, was bedeutet, dass Sie all diese extreme Komplexität verwerfen können, um eine sehr einfache Sache zu tun.
@richieqianle Ist dies eine Echtzeitanwendung oder nur die Berechnung aufgezeichneter Werte? Außerdem, welche Plattform verwenden Sie und die Genauigkeit von Gleitkommazahlen.
@MarkoBuršič ja, es ist in Echtzeit, aber mit niedriger Aktualisierungsrate: Sagen wir, 1 Hz ist gut genug. Es befindet sich auf einem Arm Cortex4 mit DSP und 32-Bit-Präzision.
@pipe Meinst du, mein aktuelles Design ist gut genug?
@pipe Aber was OP vorschlägt, ist ein gleitender Durchschnittsfilter, aber er ist nicht zufrieden mit der Dämpfung von ca. -40 dB, denke ich.
@richieqianle Ich habe in der Beschreibung gesagt, dass die Abtastfrequenz 64 kHz beträgt. Wie kommt das auf 1 Hz?
@MarkoBuršič Doh, ich war verwirrt von all den Wasserhähnen. So macht man normalerweise keinen gleitenden Durchschnitt. :)
@pipe Sie löschen die älteste Probe im Fifo, nehmen die neueste und multiplizieren mit 1/Nr_taps (in diesem Fall 1/320) und summieren dann alle Elemente im Fifo, dies ist ein gleitender Durchschnittsfilter, genau wie FIR wobei alle Tap-Koeffizienten gleich sind. Ich weiß nicht, wie Sie den Filter für den gleitenden Durchschnitt anders machen können (ein anderer ist: Anstatt den 1/320 mit dem neuen Element zu multiplizieren, tun Sie dies nicht und am Ende summieren Sie alle und multiplizieren 1/320 am Ende).
@MarkoBuršič Ein gleitender Durchschnitt kann viel schneller implementiert werden, wenn Sie erkennen, dass alles im Fifo immer denselben Wert ergibt, mit Ausnahme des neuesten und des ältesten. Jeder Durchlauf vereinfacht sich nun zu einer Addition (neu), einer Subtraktion (alt) und einer Division (oder Multiplikation mit 1/N). Auf diese Weise ist das einzige, was Sie aufhält, der verfügbare Speicher für das Fifo, nicht die Verarbeitungszeit.
@pipe Weil es nicht nur ein gleitender Durchschnitt ist, sondern auch eine Dezimierung. Von dort kommen die Hähne.
@MarkoBuršič 64-kHz-Signal ist Eingangssignal des Filters. Es wird nur ein 1-Hz-Ergebnis benötigt.

Antworten (2)

Ihr erstes Problem ist nicht ein unzureichendes Design, sondern eine unzureichende Spezifikation. Bitte beachten Sie, dass „so viel wie möglich“ keine Vorgabe ist!

Anstatt sich zu fragen, ob ein bestimmter Filter scharf genug ist und möglicherweise hochfrequentes Rauschen in die Ergebnisse einbringt, wäre es konstruktiver, anzugeben, wie viel Dämpfung bei welchen Frequenzen erforderlich ist, und dann einen Filter zu entwerfen, der diese Dämpfung liefert.

Einer der ersten Spezifikationspunkte ist die Ausgangsabtastrate. Die niedrigste Rate, die Sie erwähnen, ist 10 Hz, aber danach wird sie gefiltert. Ist das die Ausgaberate oder kommt sie herunter? Wenn Ihr DC bei 1 uHz variiert, könnten sogar 10 Hz als ziemlich überabgetastet angesehen werden!

Ich bin mir nicht sicher, wie Sie dazu gekommen sind, einen Filter der ersten Stufe mit 320 Abgriffen zu verwenden?

Wie auch immer, eine tiefe Dezimierung, wie Sie sie hier machen, umfasst normalerweise zwei Phasen.

Erste Stufe - Erzielen Sie eine große Reduzierung der Abtastrate auf ein paar Mal Ihre endgültige Rate, indem Sie einen groben Tiefpassfilter verwenden, um tiefe Ablehnungsnullen um Ihre endgültige Abtastrate herum zu haben, Nullen, die breit genug sind, um Ihre endgültige Bandbreite aufzunehmen. Dieser Filter wird häufig ausgeführt und muss daher kurz sein. Dies könnte ein CIC-Filter sein, obwohl dies eine sehr hohe Präzision erfordert, kann Bignums für eine große Ratenänderung erfordern. Eine dezimierende FIR niedriger Ordnung ist vielleicht eine bessere Wahl für eine Softwareimplementierung.

Zweite Stufe – Entwerfen Sie einen Endfilter, der das Rauschen eliminiert, das durch den groben Filter der ersten Stufe gealiased wurde, und die Rate auf die endgültig gewünschte Rate senkt. Dieser Filter wird selten ausgeführt und kann daher sehr lange dauern.

Wenn die Ausgaberate Ihre erforderliche Bandbreite um einen großen Faktor überabtastet, können Sie es sich leisten, mit Ihrem Filterdesign sehr ineffizient zu sein. In diesen Fällen sieht es wie der von Ihnen beschriebene Fall aus, ein iterierter IIR-Filter erster Ordnung ist eine vernünftige Wahl.

Das Schöne an einem IIR-Filter erster Ordnung ist, dass die effektive Länge angepasst wird, indem lediglich der Wert von k in der Wiederholungsbeziehung eingestellt wird. Sie können es entweder iterieren, um die Steilheit leicht zu verbessern, oder einfach stark überabtasten, damit das schlechte Stoppband Ihre Ergebnisse nicht beeinflusst. Es gibt das sehr reale Problem, dass ein kleines k und/oder ein großes Dezimierungsverhältnis zu Problemen mit der numerischen Genauigkeit führen kann, wenn Sie nicht aufpassen.

Dies ist möglicherweise nicht der am einfachsten zu gestaltende Filter für ein Forum. Ich helfe Ihnen gerne dabei, Ihre Spezifikation zu konkretisieren und sie offline zu entwerfen, nur für die Lols.

Vielen Dank für deine Antwort Neil, ich lerne jetzt schon CIC. 1. Für die Spezifikation: Das Rauschen Vpp unseres aktuellen Designs (wie oben beschrieben) ist 2,5-mal höher als das unserer Mitbewerber. Ich bin mir nicht sicher, ob ich jetzt eine Spezifikation habe, da das Ziel ist, je kleiner desto besser. Aber ich werde versuchen, einen zu finden. Danke Neil.
2. Die Ausgaberate fällt nach 10Hz wieder ab. Die endgültige Ausgangsfrequenz reicht von 0,2 Hz bis 1 Hz. Der Ausgang des Filters geht tatsächlich in einen Controller. 3. Über 320taps der ersten Stufe: Bitte überprüfen Sie den Teil des Beitrags, der möglicherweise nicht schlecht ist. Ich dachte, DC zu bekommen, Mittelung ist der beste Weg. Daher habe ich alle 320 Daten gemittelt, um ein Ergebnis zu erhalten. 320 wird nur verwendet, weil es einfacher mit dem MCU-Timer übereinstimmt.
4. Könnten Sie das kommentieren: Um DC zu erhalten, reicht die Mittelwertbildung aus? Wenn dies der Fall ist, brauchen wir dann noch ein CIC? Und wenn unsere Plattform eine schnelle 32-Bit-MCU mit DSP ist, ist es dann sinnvoll, CIC darauf laufen zu lassen? 5. Ich weiß Ihre freundliche Hilfe beim Entwerfen des Filters und Festlegen der Spezifikationen sehr zu schätzen. Lass uns das tun!
Ich bin etwas besorgt über die Wegwerfzeile in einem Kommentar, dass die Ausgabe in einen Controller geht. Ich weiß nicht, was ein Controller ist. Führt es zurück, um zu kontrollieren, was Sie messen? Wenn dies der Fall ist, müssen Sie das betreffende System auf die gesamte Schleife erweitern und feststellen, wo das Rauschen 2,5-mal schlimmer ist als gewünscht. Der Grund? Ein Regelkreis ist selbst ein Tiefpassfilter. Möglicherweise müssen Sie die Loop-Dynamik ändern, wenn das Rauschen vom Effektor kommt, oder es ist möglicherweise überhaupt nicht möglich, wenn das Rauschen im Sensor liegt.
Oh Neil, ich liebe deine Fragen, die wirklich gut sind und mich sehr daran erinnern, was ich lernen sollte. 1. Ich denke, dass Rauschen jetzt das Hauptanliegen ist: kann von durch Filter hinzugefügtem Rauschen oder fehlender Stoppbanddämpfung herrühren. 2. Alle 64.000 Samples für 1 Sekunde zusammenzufügen ist nicht genug, da ich es gerade so mache. Es hat große Geräusche. 3. Ich verwende Matlab und kann Spektren zeichnen. 4. Ich werde etwas über die Controller-Bandbreite erfahren. Mir fehlt die Theorie dazu, jetzt stimme ich nur PID-Koeffizienten ab.
5. Ja, es ist ein in PID eingebauter Rückkopplungsregler. Ich denke, die Geräusche kommen vom Sensor, und deshalb versuche ich, einen schärferen Filter zu bauen, und suche Rat zum Filterdesign.
Guter Hinweis! Was soll für das Spektrum der geregelten Sache bereitgestellt werden, Ausgang des Filters (gefilterte Messungen) im Regelkreis oder der Ausgang des Reglers?
Du hast Recht Nils. Danke für den Hinweis. Ich habe mehr Details über das System hinzugefügt und werde die Spektren später aktualisieren. Soll ich für das Closed-Loop-Spektrum den Ausgang des Controllers oder die gefilterten Messungen bereitstellen?
Ich nehme an, Sie werden dafür bezahlt, die Produktion von 'Anlage' auf Null zu bringen? Sie können "Störungen" innerhalb der Bandbreite der Schleife reduzieren, sie werden außerhalb dieser Bandbreite auf "Anlage" gelangen. 'Rauschen' innerhalb der Bandbreite der nicht reduzierbaren Schleife, aber Sie haben möglicherweise nicht die beste Schleifenbandbreite. Die „Filter“-Latenz begrenzt Ihre Schleifenbandbreite aus Stabilitätsgründen. Es ist oft besser, „Filter“ wegzulassen und „Rauschen“ zu reduzieren, indem Sie die Schleifenbandbreite reduzieren. Das Spektrum von „Störungen“ und „Rauschen“ kann Ihre Spezifikation unerreichbar machen? Spektrum für jeden Pfeil in Ihrem Diagramm anzeigen. Beschriften Sie die Pfeile S0, S1 usw. zur Identifizierung.
Was also planen? Spektren von - Open-Loop-Sensorausgang für einen sauberen Nulleingang (ist das "Rauschen"?), "Störung", Open-Loop-Verstärkung des Loops vorzugsweise ohne den Dezimierungsfilter, wenn Sie dies tun können (dies ermöglicht die Filterreaktion des Closed-Loop-Filters des zu bestimmende Regelschleife), "Anlagen"-Ausgabe mit geschlossener Schleife, die zeigt, bei welchen Frequenzen es Ihre Erwartungen nicht erfüllt, und alles andere, was Sie für relevant halten.
Du bist still geworden! Liegt das daran, dass Sie die Plots vorbereiten oder von der Anstrengung eingeschüchtert sind, die erforderlich ist, um es richtig zu machen? Der Punkt ist, dass Sie, da sich Ihr Dezimatorfilter innerhalb der Regelschleife befindet, nicht gleichzeitig eine große Schleifenbandbreite zum Steuern von „Störungen“ und einen schmalen Filter zum Unterdrücken von „Rauschen“ haben können, da dieser schmale Filter eine kleine Schleifenbandbreite erfordert Stabilität zu erhalten.
Danke für deine Erinnerung Neil. Ich bereite die Daten tatsächlich vor und modifiziere das System für den Datenexport. Ich verstehe den Kompromiss und tatsächlich ist die Störung sehr langsam, bei einem Pegel von 1 mHz bis 1 uHz. Das war meine Bachelorarbeit und jetzt versuche ich, sie zu verbessern, um zu sehen, ob es eine Chance gibt, die Bedürfnisse unserer potenziellen Kunden zu befriedigen.

Sie haben Ihren DC als bei 0,000001 Hz variierend definiert. Ist Ihnen bewusst, dass dies 1000000 oder 1,9 Jahre sind? Wenn das wirklich Ihre Absicht ist, müssen Sie bei einer Abtastrate von 64000 Hz durchschnittlich 64.000.000.000 Abtastungen durchführen, um Ihre 1 DC-Messung zu erhalten! Ich kann mir vorstellen, dass Sie nicht wirklich eine so niedrige DC-Rate meinen, aber unter der Annahme, dass etwas im niedrigen Hz-Bereich liegt, schlage ich stattdessen vor, dass Sie dies durch analoge Filterung tun und Ihre Abtastrate viel niedriger einstellen. Lassen Sie die analoge Kondensatorfilterung die Belastung übernehmen und führen Sie Ihr digitales Sampling viel langsamer durch, um eine Verschwendung digitaler Logik zu vermeiden.