Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Eingebettet

Digitale Filterung mit eingebetteten Mikrocontrollern verstehen

Lernen Sie die weit verbreiteten Methoden zum Filtern und Verarbeiten von Datenproben im Zeitbereich kennen, während Sie sich die Dual Biquad IIR-Engine des PowerQuad-Geräts genauer ansehen in der LPC55S69-MCU.

Beim Umgang mit Datenproben, die im Laufe der Zeit oder im Zeitbereich gesammelt wurden, besteht eine der grundlegendsten Operationen darin, die Daten zu „filtern“. Es ist wichtig zu verstehen, wie Daten digital gefiltert werden können, um die besten Ergebnisse zu erzielen und eine CPU für andere Aufgaben freizugeben, insbesondere wenn es um eingebettete Mikrocontroller geht.

In diesem Artikel erfahren Sie mehr über die weit verbreiteten Methoden zum Filtern und Verarbeiten von Datenproben im Zeitbereich. Sehen Sie sich auch die Dual Biquad IIR-Engine der PowerQuad-Einheit in der LPC55S69-MCU genauer an – ein vielseitiger DSP-Baustein, der in vielen Filteranwendungsfällen nützlich ist.

Gemeinsame Filter für kontinuierlich abgetastete Daten

Beim Abtasten von Daten im Zeitbereich werden Daten kontinuierlich mit einer bekannten, festen Rate gesammelt. Zeitbereichsfilter akzeptieren diese Daten als Eingabe und geben ein neues Signal aus, das in irgendeiner Weise modifiziert wurde. Der Ausgang eines Filters ist nur ein weiteres Zeitbereichssignal, das entweder weiterverarbeitet oder an einen Digital-Analog-Wandler (DAC) übertragen werden kann.

Normalerweise nähern wir uns Filtern im Hinblick darauf, wie sie auf Sinuswellen reagieren. Betrachten wir ein Eingangssignal als einfache Sinuswelle, kann der Filter sowohl die Amplitude des Eingangssignals als auch seine Phase anpassen. Beim Anlegen eines komplexen Signals an den Filter werden Amplitude und Phase der Sinuskomponenten des Signals angepasst. Das Verhalten des Filters über einen Frequenzbereich wird als Frequenzgang bezeichnet.

Eine Standardoperation im Zeitbereich wird von den sogenannten Finite-Impulse-Response-(FIR)-Filtern durchgeführt, die das neueste Daten-Sample mit den zuvor gesammelten Elementen mischen, um das nächste Ausgabe-Sample zu erhalten.

Abbildung 1. Sample-by-Sample-Filterverarbeitung unter Verwendung einer Historie der Eingabe.

Eine Möglichkeit, einen solchen Filter zu implementieren, besteht darin, vorherige Abtastwerte in einem Array zu speichern und sie mit einer einfachen Gleichung zu kombinieren:

x[n] // Die neueste Eingabe
x[n-1], x[n-2] // Die beiden vorherigen Eingabeproben
y[n] // Die nächste Ausgabe Beispiel

y[n] =b0 * x[n] + b1 * x[n-1] + b2 * x[n-2]

Dieses spezielle Pseudocode-Snippet kombiniert das neueste Beispiel mit den beiden vorherigen Datenbeispielen. Es multipliziert jedes Datensample mit einem separaten konstanten Koeffizienten, bevor die Ergebnisse summiert werden, um das nächste Ausgabesample zu erhalten. Zusammenfassend stellt dies eine einfache Multiplikations- und Akkumulationsoperation dar, bei der die konstanten Koeffizienten und die Länge der Historie den Frequenzgang des Filters steuern.

Durch Auswahl geeigneter Werte für die Koeffizienten ist es möglich, verschiedene Arten von Filtern zu konstruieren. Wenn der Filter hohe Frequenzen dämpft, wirkt er als Tiefpassfilter. Durch das Dämpfen niedriger Frequenzen wird der resultierende Filter als Hochpassfilter funktionieren. Es ist auch möglich, die beiden Ansätze zu kombinieren, was zu einem Bandpassfilter führt.

FIR-Filter sind konzeptionell einfach, können jedoch einige vorherige Datenabtastwerte erfordern, um eine präzise Kontrolle über ihren Frequenzgang zu erreichen. Obwohl dieser Filter leicht zu verstehen und zu implementieren ist, kann seine Ausführung auf einer herkömmlichen CPU umständlich sein, insbesondere bei einer mäßig großen Historie. Dies liegt daran, dass jedes Sample viele Multiplikations- und Addieroperationen erfordert, um die Ausgabe zu bestimmen.

Ein Verfahren zum Reduzieren der erforderlichen Historie besteht darin, die zuvor bestimmten Filterausgaben zu verwenden, wenn die nächste Ausgabeabtastung berechnet wird. Dies ist die Wurzel einer anderen Klasse digitaler Filter namens Infinite Impulse Response Filter (IIR):

// Dieses Beispiel verwendet die zuvor festgelegten Namenskonventionen
y[n] =b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y [n-1] + a1 * y[n-2]

Das obige Beispiel ist ein Sonderfall des IIR-Filters, der als Biquad-Filter bekannt ist – ein gemeinsamer Baustein, der kaskadiert werden kann, um größere Filter zu konstruieren. Dieser Ansatz erfordert im Vergleich zu einem FIR-Filter weniger Koeffizienten, um den gewünschten Frequenzgang zu erreichen. Bei diesem Ansatz sind besondere Kompromisse zu berücksichtigen. Die Verwendung von Feedback kann dazu führen, dass Filter oszillieren, wenn die Koeffizienten nicht richtig ausgewählt werden.

Außerdem gibt es viele Tools, die die Koeffizienten für alle gängigen Anwendungsfälle automatisch generieren können. Es ist üblich, „Kochbücher“ zu finden, um die Filterkoeffizienten zu berechnen.

Abbildung 2. Eines der vielen Tools, die automatisch Koeffizienten generieren.

Verwenden der PowerQuad IIR Biquad-Engines

Die PowerQuad-Einheit LPC55S69 enthält dedizierte Hardware zur Berechnung von IIR-Biquad-Filtern. Wenn Sie das PowerQuad zum Filtern der gesammelten Datenproben verwenden, bleibt die CPU für andere Aufgaben frei.

Wie oben besprochen, sind die Filteralgorithmen nicht kompliziert zu implementieren, aber sie können viel CPU-Zeit verbrauchen. Die PowerQuad-Einheit der MCU LPC55S69 enthält dedizierte Hardware, die für viele Filterungen und komplexe mathematische Operationen optimiert ist. Es ist über den AHB-Bus und die Arm® Cortex®-M33-Coprozessor-Schnittstelle verbunden.

Die Standard-Entwicklungsumgebung für den LPC55S69 ist die kostenlose eclipse-basierte IDE MCUXpresso. Das LPC55S69 SDK enthält viele nützliche Beispiele, von denen einige PowerQuad-Beispielanwendungen sind.

Abbildung 3. Auswahl des PowerQuad-Digitalfilterbeispiels.

Das Beispielprojekt „powerquad_filter“ enthält einige Beispiele für verschiedene Filterkonfigurationen. Die Datei „powerquad_filter.c“ hat mehrere Funktionen, die grundlegende Filtereinstellungen demonstrieren.

Zuvor wurde in dem Artikel ein Filter beschrieben, der „Direct Form I“ verwendet, was die einfachste Implementierung ist. Das PowerQuad ordnet jedoch den Fluss der Multiplikations- und Addieroperationen neu an, ohne das Ergebnis zu ändern, was zu „Direct Form II“ führt, bei der die Historie sowohl der Eingaben als auch der Ausgaben nicht gespeichert werden muss. Stattdessen wird eine Zwischenhistorie v[n] gespeichert, die auch als Filterzustand bezeichnet wird.

Eine Handvoll Register auf dem AHB-Bus werden zum Speichern des Zustands und der Koeffizienten verwendet, um das PowerQuad für IIR-Filteroperationen einzurichten. In den SDK-Beispielen wird der Status des Filters in der Funktion PQ_BiquadRestoreInternalState initialisiert.

Sobald dies abgeschlossen ist, ist der Filter bereit, Datenproben zu verarbeiten. Dies geschieht in der Funktion PQ_VectorBiquadDf2F32 in fsl_powerquad_filter.c:

Abbildung 4. Implementierung des vektorisierten IIR-Filters

Diese Funktion wurde entwickelt, um Blöcke von Eingangs-Samples in Vielfachen von acht zu verarbeiten. Mit Hilfe des MCR-Befehls können Daten von einem Register des Hauptprozessors des LPC55S69 an einen angeschlossenen Co-Prozessor, in diesem Fall das PowerQuad, übertragen werden.

Das PowerQuad übernimmt dann die Filterarbeit – eine viel effizientere Art, viele Multiplikations- und Addieroperationen durchzuführen, als dies bei einem der Cortex-M33-Kerne des LPC55S69 möglich wäre. Sobald das PowerQuad fertig ist, kann auf das Ergebnis mit dem MCR-Befehl zugegriffen werden, der Daten von einem Coprozessor zurück in ein internes CPU-Register verschiebt.

Die Dual-Biquad-IIR-Engine für die digitale Filterung

Die MCU LPC55S69 wird mit einer PowerQuad-Einheit (die zwei separate Biquad-Engines enthält) geliefert, die das Filtern und komplexe mathematische Operationen beschleunigen kann. AHB-Busregister werden verwendet, um PowerQuad IIR-Funktionen zu konfigurieren, und die Daten werden zwischen den PowerQuad- und Cortex-M33-Kernen über die Coprozessor-Schnittstelle ausgetauscht.

Das LPC55S69 SDK in MCUXpresso ist ein guter Ausgangspunkt. Der Code ist jedoch nicht optimiert, da er leicht verständlich sein soll. Beachten Sie, dass PowerQuad zwar das Filtern von Anwendungen erheblich beschleunigen kann, die CPU jedoch weiterhin Daten vom und zum PowerQuad-Coprozessor übertragen muss.

NXP verfügt über ein hilfreiches IIR-Biquad-Filter-Design- und Visualisierungstool, das Sie bei der Konfiguration der Software unterstützt. Die Community-Seite von NXP bietet auch einen detaillierten Einblick in die PowerQuad-Einheit der LPC55S69-MCU und ihre Fähigkeiten.

Branchenartikel sind eine Inhaltsform, die es Branchenpartnern ermöglicht, nützliche Nachrichten, Nachrichten und Technologien mit All About Circuits-Lesern auf eine Weise zu teilen, für die redaktionelle Inhalte nicht gut geeignet sind. Alle Branchenartikel unterliegen strengen redaktionellen Richtlinien, um den Lesern nützliche Neuigkeiten, technisches Know-how oder Geschichten zu bieten. Die in den Branchenartikeln geäußerten Standpunkte und Meinungen sind die des Partners und nicht unbedingt die von All About Circuits oder seinen Autoren.


Eingebettet

  1. Digitale Logik mit Feedback
  2. Warum digital?
  3. Ein Überblick über die IC-Technologie für Mikrocontroller und eingebettete Systeme
  4. Was mache ich mit den Daten?!
  5. Beschleunigung der digitalen Transformation mit IoT-Daten dank Cisco und IBM
  6. Wartung in der digitalen Welt
  7. Digitale Fertigungsteams mit Wissen stärken
  8. Industrielle Software lässt sich in die IT integrieren
  9. GE Digital:Operational Insights with Data &Analytics
  10. Vorantreiben der digitalen Fabrik mit Echtzeit-MES-Daten