Beschreibung Digitalfilter:
Die Eingabe des Filters sind Sensordaten und die Ausgabe wird an einen PID-Regler geliefert.
Abtastrate: 64 kHz
Geräuschspektrum: von DC bis 10 kHz
Filterziel: Nur DC-Komponenten erhalten und Rauschen so weit wie möglich reduzieren.
Charakteristik von DC: Es ändert sich sehr langsam, sagen wir bei 0,000001 Hz.
Mehr zum System
Der Systemeingang (Ref oder Referenz ist Null). Und tatsächlich ist es das Ziel des Controllers, die Ausgabe des Systems auf Null zu halten.
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
Der Regler ist ein einfacher PI-Regler. Es ist bestrebt, den Einfluss von Störungen zu kompensieren und gleichzeitig Geräusche zu beseitigen.
Die Geräusche stammen von Sensoren und der Filter zwischen Controller und Sensor ist das, wofür ich hier Hilfe suche.
Meine derzeitige Art des Filterdesigns:
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.
Die gemittelten Daten gehen dann weiter in einen Mittelungsdezimierer mit 20 Abgriffen. Die Ergebnisse liegen bei 10 Hz.
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 Mittelwertfilter
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?
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.
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.
user_1818839
richieqianle
Marko Buršič
richieqianle
Rohr
Marko Buršič
richieqianle
richieqianle
Marko Buršič
Marko Buršič
Rohr
Marko Buršič
Rohr
richieqianle
richieqianle