Syntax
Hd = bessel (Order, Frequencies, Type, DFormat)

Beschreibung

Entwurf eines IIR-Bessel-Filters. Analoge Bessel-Filter haben eine konstante Gruppenlaufzeit im Durchlassbereich, was für eine Vielzahl von Messanwendungen sehr wünschenswert ist. Die in FilterScript implementierte Methode verwendet die Bilinear-Transformation, die die Standardcharakteristik des analogen Bessel-Filters modifiziert und folglich die konstante Gruppenlaufzeit im Durchlassbereich nicht beibehält. Sie können die Gruppenlaufzeit durch Verwendung eines Allpassfilters ausgleichen, entweder in FilterScript oder im Hauptwerkzeug mit dem Allpassfilter-Designer.

  • Nahezu konstante Gruppenlaufzeit im Durchlassbereich.
  • Langsamerer Roll-Off als bei anderen Prototypen

Bessel-Filter

Die Kaskadierung eines einzelnen Allpassfilters (entworfen mit dem Allpassfilter-Designer) mit dem Bessel-Filter linearisiert die Gruppenlaufzeit im Durchlassbereich – siehe unten.

Bessel 2 Filter

Hd = bessel (Order, Frequencies, Type, DFormat)

Order: kann bis zu 20 (professional) und bis zu 10 (educational) Auflage angegeben werden.

Frequencies: Tief- und Hochpass werden über eine Grenzfrequenz angegeben, während Bandpass- und Bandsperrfilter zwei Frequenzen benötigen (d. h. untere und obere Grenzfrequenz). Alle Frequenzen müssen in aufsteigender Reihenfolge und < Nyquist sein (siehe das Beispiel unten).

Type: Die Bessel-Methode ermöglicht den Entwurf von span style=”font-family: courier;”>lowpass, highpass, bandpass bzw. bandstopfiltern.

Hd: Die Bessel-Methode entwirft ein IIR-Bessel-Filter auf der Grundlage der eingegebenen Spezifikationen und legt die Übertragungsfunktion (d.h. Zähler, Nenner, Verstärkung) in einem digitalen Filterobjekt, Hd, ab. Das digitale Filterobjekt kann dann bei Bedarf mit anderen Methoden kombiniert werden. Für ein digitales Filterobjekt Hd werden durch den Aufruf von Hd, calling getnum(Hd), getden(Hd) bzw. getgain(Hd) die Zähler-, Nenner- bzw. Verstärkungskoeffizienten extrahiert – siehe unten.

DFormat: ermöglicht die Angabe des Anzeigeformats des resultierenden digitalen Filterobjekts.

symbolic Zeigt eine symbolische Darstellung des Filterobjekts an. Wenn die Ordnung > 10 ist, wird die symbolische Anzeigeoption überschrieben und auf numerisch gesetzt.
numeric Anzeige einer Matrixdarstellung des Filterobjekts
void Ein Filterobjekt erzeugen, aber keine Ausgabe anzeigen

Beispiel

[code lang=”java”]
ClearH1; // clear primary filter from cascade
ShowH2DM; // show DM on chart

Main()

F={75};
Order=5;
Hd=bessel(Order,F,"lowpass","symbolic");

F={50,100};
Hd=bessel(Order,F,"bandpass","symbolic");

Num = getnum(Hd); // define numerator coefficients
Den = getden(Hd); // define denominator coefficients
Gain = getgain(Hd); // define gain
[/code]

Siehe auch

bessel / butter / cheby1 / cheby2 / ellip / arbmagphase / cplxfreqshift / dcremover / notch / peaking

FIR-Filter (Finite Impulse Response) sind für eine Vielzahl von Sensor-Signalverarbeitungsanwendungen nützlich, einschließlich Audio- und biomedizinischer Signalverarbeitung. Obwohl es mehrere praktische FIR-Implementierungen gibt, bietet die Direct Form Transposed-Struktur die beste numerische Genauigkeit für die Fließkomma-Implementierung. Wenn jedoch eine Festkomma-Implementierung auf einem Mikrocontroller in Betracht gezogen wird, gilt die Direct-Form-Struktur aufgrund ihres großen Akkumulators, der alle Zwischenüberläufe aufnehmen kann, als beste Wahl.

Diese Application Note befasst sich speziell mit dem Entwurf und der Implementierung von FIR-Filtern auf einem Cortex-M-basierten Mikrocontroller mit dem ASN Filter Designer sowohl für Fließkomma- als auch für Festkomma-Anwendungen über das Arm CMSIS-DSP Software Framework. Es werden auch Details (einschließlich eines Arm-Referenz-Softwarepakets) zur Implementierung des FIR-Filters in Arm/Keils MDK-Industriestandard-Cortex-M-Mikrocontroller-Entwicklungskit gegeben.

Einführung

ASN Filter Designer bietet Ingenieuren eine leistungsstarke DSP-Experimentierplattform, die den Entwurf, die Erprobung und den Einsatz komplexer digitaler FIR-Filterdesigns für eine Vielzahl von Sensormessanwendungen ermöglicht. Die fortschrittliche Funktionalität des Tools umfasst einen grafikbasierten Echtzeit-Filterdesigner, mehrere Filterblöcke, verschiedene mathematische E/A-Blöcke, symbolische Live-Mathe-Skripte und Echtzeit-Signalanalyse (über einen integrierten Signalanalysator). Diese Vorteile in Verbindung mit der automatischen Dokumentation und Code-Generierung ermöglichen es den Ingenieuren, einen digitalen Filter innerhalb von Minuten statt Stunden zu entwerfen und zu validieren.

Das Arm CMSIS-DSP (Cortex Microcontroller Software Interface Standard) Software-Framework ist eine reichhaltige Sammlung von über sechzig DSP-Funktionen (einschließlich verschiedener mathematischer Funktionen wie Sinus und Kosinus, IIR/FIR-Filterfunktionen, komplexer mathematischer Funktionen und Datentypen), die von Arm entwickelt und für die Cortex-M-Prozessorkerne optimiert wurden.

CMSIS-konform

Das Framework macht ausgiebig Gebrauch von hoch optimierten SIMD-Befehlen (Single Instruction, Multiple Data), die mehrere identische Operationen in einem einzigen Befehlszyklus ausführen. Die SIMD-Befehle (sofern sie vom Kern unterstützt werden) in Verbindung mit anderen Optimierungen ermöglichen es Ingenieuren, schnell und einfach hoch optimierte Signalverarbeitungsanwendungen für Cortex-M-basierte Mikrocontroller zu erstellen.

Der ASN Filter Designer unterstützt das CMSIS-DSP Software-Framework vollständig, indem er über seine Code-Generierungs-Engine automatisch optimierten C-Code auf Basis der DSP-Funktionen des Frameworks erzeugt.

Entwurf von FIR-Filtern mit dem ASN Filter Designer

Der ASN Filter Designer bietet Ingenieuren eine einfach zu bedienende, intuitive grafische Entwicklungsplattform für den Entwurf digitaler FIR-Filter. Das Echtzeit-Entwurfsparadigma des Tools nutzt grafische Entwurfsmarkierungen, die es den Entwicklern ermöglichen, ihre Anforderungen an den Frequenzgang in Echtzeit zu zeichnen und zu ändern, während das Tool automatisch die genauen Spezifikationen für sie ausfüllt.

Betrachten Sie den Entwurf der folgenden technischen Spezifikation:

Fs:500Hz
Durchlassband-Frequenz: 0-25Hz
Typ:Lowpass
Methode:Parks-McClellan
Dämpfung des Sperrbereichs @ 125Hz: ≥ 80 dB
Durchlassband-Welligkeit:< 0.01dB
Ordnung:So klein wie möglich

Durch die grafische Eingabe der Spezifikationen in den ASN Filter Designer und die Feinabstimmung der Design-Marker-Positionen entwirft das Tool automatisch das Filter, wählt automatisch die erforderliche Filterordnung und produziert im Wesentlichen automatisch die exakte technische Spezifikation des Filters!

Der Frequenzgang eines Filters, das die Spezifikation erfüllt, ist unten dargestellt:

Tiefpassfilter

Dieser Tiefpassfilter bildet die Grundlage für die hier geführte Diskussion.

Parks-McClellan-Algorithmus

Der Parks-McClellan-Algorithmus ist ein iterativer Algorithmus zur Ermittlung des optimalen Tschebyscheff-FIR-Filters. Der Algorithmus verwendet eine indirekte Methode zur Ermittlung der optimalen Filterkoeffizienten, die im Vergleich zu anderen FIR-Entwurfsmethoden ein gewisses Maß an Flexibilität bietet, da jedes Band individuell angepasst werden kann, um den Anforderungen des Designers zu entsprechen.

Die primäre FIR-Filter-Designer-UI implementiert den Parks-McClellan-Algorithmus und ermöglicht den Entwurf der folgenden Filtertypen:

FiltertypenBeschreibung
TiefpassEntwirft einen Tiefpassfilter
HochpassEntwirft einen Hochpassfilter
BandpassEntwirft ein Bandpassfilter
BandsperreEntwirft ein Bandsperrfilter
MultibandEntwirft ein Multiband-Filter mit beliebigem Frequenzgang
Hilbert-TransformatorEntwirft ein Allpassfilter mit einer Phasenverschiebung von -90 Grad
DifferentiatorEntwirft einen Filter mit +20dB/Dekade Steigung und +90 Grad Phasenverschiebung
Doppelter DifferenziererEntwirft einen Filter mit einer Steigung von +40 dB/Dekade und einer Phasenverschiebung von +90 Grad
IntegratorEntwirft einen Filter mit einer Steigung von -20 dB/Dekade und einer Phasenverschiebung von -90 Grad
DoppelintegratorDesigns a filter with  -40dB/decade slope and a -90 degree phase shift.

Diese zehn Filtertypen bieten Entwicklern eine große Flexibilität für eine Vielzahl von IoT-Anwendungen. Die Designanforderungen können einfach durch die Verwendung der Designmarker spezifiziert werden. In allen Fällen berechnet das Tool automatisch die erforderliche Filterreihenfolge, um die Spezifikation des Designers zu erfüllen.

Der Parks-McClellan-Algorithmus ist eine optimale Tschebyscheff-FIR-Entwurfsmethode. Allerdings konvergiert der Algorithmus bei einigen Spezifikationen möglicherweise nicht. In solchen Fällen hilft es im Allgemeinen, den Abstand zwischen den Entwurfsmarkierungsbändern zu vergrößern.

Andere FIR-Entwurfsmethoden

Designer, die mit anderen Arten von FIR-Entwurfsmethoden experimentieren möchten, können die symbolische Live-Mathe-Skriptsprache ASN FilterScript verwenden. Die Skriptsprache unterstützt über 65 wissenschaftliche Befehle und bietet Entwicklern eine vertraute und leistungsstarke Programmiersprache, die es ihnen gleichzeitig ermöglicht, komplexe symbolische mathematische Ausdrücke zu implementieren. Die folgenden Funktionen werden unterstützt:

Funktion Beschreibung
movaverMoving average FIR filter design: Entwurf eines FIR-Filters mit gleitendem Mittelwert
firwinFIR filter Window method: FIR-Filterentwurf auf der Grundlage der Fenstermethode
firarbEntwirft ein FIR-Filter auf Basis der Fenstermethode mit beliebigem Amplitudengang
firkaiserEntwurf eines FIR-Filters nach der Kaiser-Fenstermethode
firgaussEntwurf eines FIR Gaußschen Tiefpassfilters
savgolayEntwirft ein FIR Savitzky-Golay Tiefpass-Glättungsfilter

Weitere Details finden Sie im ASN FilterScript Reference Guide.

Alle Filter, die in ASN FilterScript entworfen werden, werden unter Verwendung von Arithmetik mit doppelter Genauigkeit in der H2-Filter-Sandbox entworfen. Ein H2-Filter muss für den Einsatz in einen H1-(Primär-)Filter umgewandelt werden.

Dies kann einfach über das Optionsmenü P-Z erreicht werden:

Re-Optimierung des Filterentwurfs

Die Re-Optimierungsmethode analysiert automatisch den H2-Filter und wandelt ihn in einen H1-Filter um.

Fließkomma-Implementierung

Bei der Implementierung eines Filters in Fließkomma (‘floating point’; d.h. unter Verwendung von Arithmetik mit doppelter oder einfacher Genauigkeit) gilt die Struktur Direct Form Transposed als die numerisch genaueste. Dies lässt sich leicht erkennen, wenn man die nachstehenden (für die Implementierung verwendeten) Differenzgleichungen analysiert, da die unerwünschten Auswirkungen der numerischen Übersättigung minimiert werden, da die Fließkommaaddition auf Zahlen ähnlicher Größenordnung durchgeführt wird.

\(\displaystyle \begin{eqnarray}y(n) & = &b_0x(n) &+& w_1(n-1) \\ w_1(n)&=&b_1x(n) &+& w_2(n-1) \\ w_2(n)&=&b_2x(n) &+& w_3(n-1) \\ \vdots\quad &=& \quad\vdots &+&\quad\vdots \\ w_q(n)&=&b_qx(n) \end{eqnarray}\)

Direkte Form der Transponierung (für Fließkomma-Implementierungen)
Direkte Formtransponierung (für Gleitkomma-Implementierungen)

\(\displaystyle \begin{eqnarray}y(n) & = &b_0x(n) &+& w_1(n-1) \\ w_1(n)&=&b_1x(n) &+& w_2(n-1) \\ w_2(n)&=&b_2x(n) &+& w_3(n-1) \\ \vdots\quad &=& \quad\vdots &+&\quad\vdots \\ w_q(n)&=&b_qx(n) \end{eqnarray}\)

Die Quantisierungs- und Filterstruktureinstellungen, die zur Implementierung der FIR verwendet werden, finden Sie auf der Registerkarte Q (wie unten dargestellt).

Obwohl die Direct Form Transposed-Struktur für die Fließkomma-Implementierung am effizientesten ist, unterstützt die Arm CMSIS-DSP-Bibliothek derzeit nicht die Direct Form Transposed-Struktur für FIR-Filter. Es wird nur die Direct Form Struktur unterstützt.

Wenn Sie die Arithmetic auf Single Precision und Structure auf Direct Form einstellen und auf die Schaltfläche Apply klicken, wird die hier betrachtete FIR für das CMSIS-DSP Software Framework konfiguriert.

Die optimierten Funktionen innerhalb des Arm CMSIS-DSP Frameworks unterstützen derzeit nur Single Precision Arithmetik.

Unterstützung für Double Precision und die Direct Form Transposed-Struktur wird in zukünftigen Versionen hinzugefügt werden.

Festkomma-Implementierung

Bei der Implementierung eines Filters mit Festkomma-Arithmetik wird die Direct-Form-Struktur aufgrund ihres großen Akkumulators, der alle Zwischenüberläufe aufnimmt, als die beste Wahl angesehen. Die Direct-Form-Struktur und die zugehörige Differenzengleichung sind im Folgenden dargestellt.

\(\displaystyle y(n) = b_0x(n) + b_1x(n-1) + b_2x(n-2) + …. +b_qx(n-q) \)

Struktur der direkten Form (für Festkomma-Implementierung), Direkte Form Festkomma
Direkte Formstruktur (für Festkomma-Implementierung)

Das CMSIS-DSP-Framework unterstützt nur die Quantisierung der Koeffizienten Q7, Q15 und Q31. Die Optionen können einfach über die Registerkarte Q für die Quantisierung angegeben werden, wie unten gezeigt:

ASN Filter Designer direktes Form

Die eingebauten Analysen des Tools (in der Textbox) sollen dem Designer helfen, die am besten geeigneten Quantisierungseinstellungen zu wählen.

Wie links zu sehen ist, hat das Tool eine RFWL (empfohlene Fraktionslänge) von 15 Bits (Q15) für die Koeffizienten empfohlen, was den Anforderungen entspricht.

Die Struktur Direkte Form wird der Struktur Direkte Form Transponiert vorgezogen, da ein einziger Akkumulator (40 Bit) verwendet werden kann. Der automatische Code-Generator des Tools nutzt die 64-Bit-Akkumulatoren-Funktionen von CMSIS-DSP, so dass der endgültige C-Code, der auf einem Cortex-M-Baustein eingesetzt wird, nicht überläuft.

Bereitstellung von Arm CMSIS-DSP-konformem Code

Die automatische Code-Generierungs-Engine des ASN Filter Designers erleichtert den Export eines entworfenen Filters auf Cortex-M Arm-basierte Prozessoren über das Arm CMSIS-DSP Software-Framework. Die integrierten Analyse- und Hilfefunktionen des Tools unterstützen den Designer bei der erfolgreichen Konfiguration des Designs für den Einsatz.

Wählen Sie das Arm CMSIS-DSP-Framework aus der Auswahlbox im Filterübersichtsfenster aus:

Arm-CMSIS-Implementierung

Der automatisch generierte C-Code auf Basis des Arm CMSIS-DSP-Frameworks für die direkte Implementierung auf einem Arm-basierten Cortex-M-Prozessor ist unten dargestellt:

C-Code Arm CMSIS DSP für die direkte Implementierung auf einem Arm-basierten Cortex-M-Prozessor

Dieser Code kann direkt in jedem Cortex-M-basierten Entwicklungsprojekt verwendet werden.

Arm Keil MDK (uVision)

Wie bereits erwähnt, kann der vom Arm CMSIS DSP Code-Generator erzeugte Code direkt in jedem Cortex-M-basierten Entwicklungsprojekt-Tooling verwendet werden, wie z.B. Arm Keils Industriestandard uVision MDK (Micro-Controller Development Kit).

Das folgende Arm-Softwarepaket ist auf Keils Website verfügbar, um diesen Code direkt mit Keil uVision MDK zu verwenden.

Arm Keil MDK Filter-Entwurf

 

 

Demo herunterladen

Lizenzierung

In diesem Artikel werden die Vor- und Nachteile des Tschebyscheff-Filters erörtert, einschließlich Codebeispielen in ASN Filterscript.

Dans le traitement des signaux ECG, l’élimination des interférences des lignes électriques 50/60Hz des formes d’onde ECG biomédicales délicates et riches en informations est une tâche difficile! Le défi est encore compliqué par l’ajustement des effets de l’EMG, tels que le mouvement d’un membre ou du torse du patient ou même la respiration. Une approche traditionnelle adoptée par beaucoup consiste à utiliser un filtre coupe-bande IIR de 2e ordre :

\(\displaystyle H(z)=\frac{1-2cosw_oz^{-1}+z^{-2}}{1-2rcosw_oz^{-1}+r^2z^{-2}}\)

où \(w_o=\frac{2\pi f_o}{fs}\) contrôle la fréquence centrale, \(f_o\) de l’encoche, et \(r=1-\frac{\pi BW}{fs}\) contrôle la bande passante (point -3dB) de l’encoche.

Quel est le défi?

Comme nous l’avons vu plus haut, \(H(z) \) est simple à mettre en œuvre, mais la difficulté consiste à trouver une valeur optimale de r, car une encoche nette souhaitable signifie que les pôles sont proches du cercle unitaire (voir à droite).

ECG biomédicaux rii; difficulté consiste à trouver une valeur optimale de r, car une encoche nette souhaitable signifie que les pôles sont proches du cercle unitaire

En présence d’interférences stationnaires, par exemple lorsque le patient est absolument immobile et que les effets de la respiration sur les données du capteur sont minimes, cela peut ne pas être un problème.

Cependant, si l’on considère les effets de l’EMG sur la forme d’onde capturée (une situation beaucoup plus réaliste), la rétroaction (pôles) du filtre IIR provoque un tintement sur la forme d’onde filtrée, comme illustré ci-dessous:

ECG contaminé par des interférences 50Hz non stationnaires (filtrage FIR), traitement des signaux ECG, DSP ECG, mesure ECG

ECG contaminé par des interférences non stationnaires de 50 Hz provenant de lignes électriques (filtrage RII)

Comme nous l’avons vu ci-dessus, bien que la majorité des interférences 50Hz aient été éliminées, il y a toujours un anneau significatif autour des pics principaux (sortie filtrée montrée en rouge). Ce tintement est indésirable pour de nombreuses applications biomédicales, car les informations cardiaques vitales telles que le segment ST ne peuvent pas être clairement analysées.

La réponse en fréquence du filtre IIR utilisé pour filtrer les données ECG ci-dessus est présentée ci-dessous.

Réponse en fréquence du filtre coupe-bande RII, traitement du signal ECG, DSP ECG, mesure ECt

Réponse en fréquence du filtre coupe-bande RII

En analysant le graphique, on peut voir que le délai de groupe (ou délai moyen) du filtre est non linéaire mais presque nul dans les bandes passantes, ce qui signifie qu’il n’y a pas de distorsion. Le délai de groupe à 50Hz s’élève à 15 échantillons, ce qui est la source de la sonnerie – où plus les pôles sont proches du cercle unitaire, plus le délai de groupe est grand.

ASN FilterScript offre aux concepteurs la fonction notch(), qui est une implémentation directe de H(z), comme montré ci-dessous:

ClearH1;  // clear primary filter from cascade
ShowH2DM;   // show DM on chart

interface BW={0.1,10,.1,1};

Main()

F=50;
Hd=notch(F,BW,"symbolic");
Num = getnum(Hd); // define numerator coefficients
Den = getden(Hd); // define denominator coefficients
Gain = getgain(Hd); // define gain

Filtres RIF de Savitzky-Golay

Une solution au problème de l’anneau mentionné ci-dessus ainsi qu’une réduction du bruit peuvent être obtenues grâce à un filtre de lissage passe-bas Savitzky-Golay. Ces filtres sont des filtres RIF, et n’ont donc pas de coefficients de rétroaction et pas de sonnerie !

Les filtres de lissage (polynomiaux) de Savitzky-Golay ou les filtres de lissage des moindres carrés sont des généralisations du filtre moyen FIR qui peuvent mieux préserver le contenu haute fréquence du signal souhaité, au détriment de l’élimination d’autant de bruit qu’une moyenne RIF. La formulation particulière des filtres Savitzky-Golay préserve mieux les différents ordres de moment que d’autres méthodes de lissage, qui ont tendance à mieux préserver les largeurs et hauteurs de pic que Savitzky-Golay. À ce titre, les filtres de Savitzky-Golay conviennent parfaitement aux données biomédicales, telles que les ensembles de données ECG.

Élimination de la composante 50 Hz de la ligne électrique

En concevant un filtre Savitzky-Golay d’ordre 18 avec un ajustement polynomial d’ordre 4 (voir l’exemple de code ci-dessous), nous obtenons un filtre FIR avec une distribution nulle, comme indiqué sur la droite. Cependant, comme nous souhaitons éliminer complètement la composante 50Hz, l’éditeur P-Z de l’outil peut être utilisé pour déplacer une paire de zéros (indiquée en vert) à exactement 50Hz.

La réponse en fréquence résultante est présentée ci-dessous, où l’on peut voir qu’il y a une encoche à exactement 50Hz, et que le retard de groupe de 9 échantillons (présenté en violet) est constant sur toute la bande de fréquence.

Réponse en fréquence du filtre RIF Savitzky-Golay, traitement du signal ECG, DSP ECG, mesure ECG

Réponse en fréquence du filtre RIF Savitzky-Golay

En faisant passer l’ensemble de données ECG contaminées par notre filtre Savitzky-Golay modifié et en ajustant le retard de groupe, nous obtenons :

ECG contaminé par des interférences non stationnaires de 50 Hz (filtrage RIF), traitement du signal ECG, filtre numérique ECG, conception du filtre ECG.

ECG contaminé par des interférences non stationnaires de 50 Hz sur le réseau électrique (filtrage RIF).

Comme on peut le voir, il n’y a pas de signes d’interférence et les segments ST sont maintenant clairement visibles pour l’analyse. Remarquez également comment le filtre (en rouge) a réduit le bruit de mesure, soulignant l’aspect pratique des filtres Savitzky-Golay pour le traitement des signaux biomédicaux.

Un Savitzky-Golay peut être conçu et optimisé dans ASN FilterScript via la fonction savgolay(), comme suit:

ClearH1;  // clear primary filter from cascade

interface L = {2, 50,2,24};
interface P = {2, 10,1,4};

Main()

Hd=savgolay(L,P,"numeric");  // Design Savitzky-Golay lowpass
Num=getnum(Hd);
Den={1};
Gain=getgain(Hd);

Deployment

Ce filtre peut maintenant être déployé dans une variété de domaines via le générateur de code automatique de l’outil, permettant un déploiement rapide dans Matlab, Python et les dispositifs embarqués Arm Cortex-M.

Moderne eingebettete Prozessoren, Software-Frameworks und Design-Tools ermöglichen es Ingenieuren jetzt, im Rahmen der I4.0-Revolution fortschrittliche Messkonzepte in intelligenten Fabriken anzuwenden.

In den letzten Jahren hat die vorausschauende Wartung (Predictive Maintenance) von Maschinen große Beachtung gefunden, da Fabriken ihre Produktionseffizienz maximieren und gleichzeitig die unschätzbaren Fähigkeiten erfahrener Vorarbeiter und Produktionsmitarbeiter erhalten wollen.

Früher ging ein Vorarbeiter durch die Werkshalle und hörte auf die Geräusche, die eine Maschine machte, um eine Vorstellung von einem bevorstehenden Ausfall zu bekommen. Mit dem Aufkommen der I4.0-Technologie können nun Mikrofone, DSP-Algorithmen und ML eingesetzt werden, um den Geräuschen einer Maschine zuzuhören” und dann eine Klassifizierung und Vorhersage zu treffen.

Eine der größten Herausforderungen ist die Frage, wie man einen Computer dazu bringt, wie ein Mensch zu hören.

Die Physik des menschlichen Ohrs

Rechts ist eine Abbildung des menschlichen Ohrs zu sehen. Wie man sieht, besteht die grundlegende Aufgabe des Ohrs darin, Schall (Luftschwingungen) in elektrische Nervenimpulse umzuwandeln, die vom Gehirn interpretiert werden.

Eine Illustration des menschlichen Ohrs auf der rechten Seite. Wie man sieht, besteht die grundlegende Aufgabe des Ohrs darin, Schall (Luftschwingungen) in elektrische Nervenimpulse zu übersetzen, die vom Gehirn interpretiert werden.

Wie funktioniert das?

Das Ohr erreicht dies über drei Knochen (Stapes, Incus und Malleus), die als mechanische Verstärker für die am Trommelfell empfangenen Schwingungen fungieren. Diese verstärkten Töne werden dann über das ovale Fenster (nicht abgebildet) an die Cochlea weitergeleitet. Die Cochlea (lila dargestellt) ist mit einer Flüssigkeit gefüllt, die sich als Reaktion auf die Schwingungen des ovalen Fensters bewegt. Während sich die Flüssigkeit bewegt, werden Tausende von Nervenenden in Bewegung gesetzt. Diese Nervenenden wandeln die Schallschwingungen in elektrische Impulse um, die entlang der Hörnervenfasern zum Gehirn geleitet und dort ausgewertet werden.

Modellierung des wahrgenommenen Schalls

Aufgrund der Komplexität des strömungsmechanischen Aufbaus des menschlichen Gehörs sind tiefe und hohe Frequenzen normalerweise nicht wahrnehmbar. Forscher haben im Laufe der Jahre herausgefunden, dass der Mensch Geräusche im Bereich von 1-6 kHz am besten wahrnimmt, wobei dieser Bereich je nach dem Gesundheitszustand der Person variiert.

Diese Forschung führte zur Definition einer Reihe von Bewertungskurven: die sogenannten A-, B-, C- und D-Bewertungskurven, die den Frequenzgang eines Mikrofons ausgleichen. Diese Gewichtungskurven zielen darauf ab, die digitale und die physische Welt einander anzunähern, indem sie es einem computergestützten Mikrofonsystem ermöglichen, wie ein Mensch zu hören.

Die A-Bewertungskurve ist die am weitesten verbreitete Kurve, da sie gemäß IEC-61672 in allen Schallpegelmessern enthalten sein muss. Die B- und D-Kurven werden kaum verwendet, aber die C-Bewertung kann zur Prüfung der Auswirkungen von Lärm in Telekommunikationssystemen eingesetzt werden.

A-Bewertungskurve

Der Frequenzgang der A-Bewertungskurve ist oben abgebildet. Es ist zu erkennen, dass Geräusche, die in unser Ohr eindringen, unterhalb von 500 Hz unterdrückt werden und zwischen 0,5 und 6 kHz am stärksten wahrnehmbar sind. Beachten Sie, dass die Kurve oberhalb von 20kHz nicht spezifiziert ist, da dies den menschlichen Hörbereich überschreitet.

ASN FilterScript

Die symbolische mathematische Skriptsprache FilterScript von ASN bietet Entwicklern die Möglichkeit, eine analoge Filterübertragungsfunktion mit nur wenigen Zeilen Code in ihr digitales Äquivalent umzuwandeln.

Die analogen Übertragungsfunktionen der A- und C-Bewertungskurven sind unten angegeben:

\(H_A(s) \approx \displaystyle{7.39705×10^9 \cdot s^4 \over (s + 129.4)^2\quad(s + 676.7)\quad (s + 4636)\quad (s + 76655)^2}\)

\(H_C(s) \approx \displaystyle{5.91797×10^9 \cdot s^2\over(s + 129.4)^2\quad (s + 76655)^2}\)

Diese analogen Übertragungsfunktionen können mit Hilfe der Funktion bilinear() in ihre digitalen Äquivalente umgewandelt werden. Es ist jedoch zu beachten, dass \(H_A(s) \) ein erhebliches Maß an algebraischer Manipulation erfordert, um die Koeffizienten des Nenners in Potenzen von \(s\) zu extrahieren.

Faltung

Ein einfacher Trick für die Multiplikation von Polynomen ist die lineare Faltung, die dieselbe algebraische Operation ist wie die Multiplikation von zwei Polynomen miteinander. Dies lässt sich leicht mit der Funktion conv() von Filterscript wie folgt durchführen:

y=conv(a,b);

Als einfaches Beispiel würde die Multiplikation von \((s^2+2s+10)\) mit \((s+5)\) durch die folgenden drei Zeilen FilterScript-Code definiert:

a={1,2,10};
b={1,5};
y=conv(a,b);

which yields, 1 7 20 50 or \((s^3+7s^2+20s+50)\)

Für die Laplace-Übertragungsfunktion der A-Bewertungskurve ist der vollständige FilterScript-Code unten angegeben:

ClearH1;  // clear primary filter from cascade

Main() // main loop

a={1, 129.4};
b={1, 676.7};
c={1, 4636};
d={1, 76655};

aa=conv(a,a); // polynomial multiplication
dd=conv(d,d);

aab=conv(aa,b);
aabc=conv(aab,c);

Na=conv(aabc,dd);
Nb = {0 ,0 , 1 ,0 ,0 , 0, 0}; // define numerator coefficients
G = 7.397e+09; // define gain

Ha = analogtf(Nb, Na, G, "symbolic");
Hd = bilinear(Ha,0, "symbolic");

Num = getnum(Hd);
Den = getden(Hd);
Gain = getgain(Hd)/computegain(Hd,1e3); // set gain to 0dB@1kHz



Frequenzgang des analogen gegenüber dem digitalen A-Bewertungsfilter für \(f_s=48kHz\). Wie zu sehen ist, stimmt der digitale äquivalente Amplitudengang bis \(6kHz\) sehr gut mit dem idealen analogen Amplitudengang überein.

Die ITU-R 486-4-Bewertungskurve

Eine weitere interessante Bewertungskurve ist die von der BBC entwickelte ITU-R 486-4-Bewertungskurve. Im Gegensatz zum A-Bewertungsfilter beschreibt die ITU-R 468-4-Kurve die subjektive Lautheit für breitbandige Reize. Der Hauptnachteil der A-Bewertungskurve besteht darin, dass sie die Lautheitsbeurteilung realer Reize insbesondere im Frequenzband von etwa 1-9 kHz unterschätzt.

Aufgrund der genauen Definition der 486-4-Bewertungskurve ist keine analoge Übertragungsfunktion verfügbar. Stattdessen liefert die Norm eine Tabelle mit Amplituden und Frequenzen – siehe hier. Diese Spezifikation kann direkt in die firarb() -Funktion von Filterscript eingegeben werden, um ein geeignetes FIR-Filter zu entwerfen, wie unten gezeigt:

ClearH1;  // clear primary filter from cascade
ShowH2DM;

interface L = {10,400,10,250}; // filter order

Main()

// ITU-R 468 Weighting
A={-29.9,-23.9,-19.8,-13.8,-7.8,-1.9,0,5.6,9,10.5,11.7,12.2,12,11.4,10.1,8.1,0,-5.3,-11.7,-22.2};
F={63,100,200,400,800,1e3,2e3,3.15e3,4e3,5e3,6.3e3,7.1e3,8e3,9e3,1e4,1.25e4,1.4e4,1.6e4,2e4};

A={-30,A};  //  specify arb response
F={0,F,fs/2};   //

Hd=firarb(L,A,F,"blackman","numeric");

Num=getnum(Hd);
Den={1};
Gain=getgain(Hd);


Frequenzgang eines ITU-R 468-4 FIR-Filters, der mit der firarb()-Funktion von Filterscript für \(f_s=48kHz\) entworfen wurde.

Wie Sie gesehen haben, bietet FilterScript dem Designer eine sehr leistungsfähige symbolische Skriptsprache für den Entwurf von Gewichtungskurvenfiltern. Die folgende Diskussion konzentriert sich nun auf die Implementierung des A-Bewertungsfilters auf einem Arm-basierten Prozessor über den automatischen Codegenerator des Tools. Die im Folgenden vorgestellten Konzepte und Schritte gelten gleichermaßen für FIR-Filter.

Automatische Codegenerierung für Arm-Prozessorkerne über CMSIS-DSP

Die automatische Codegenerierung des ASN Filter Designers erleichtert den Export eines entworfenen Filters auf Cortex-M Arm basierte Prozessoren über das CMSIS-DSP Software Framework. Die integrierten Analyse- und Hilfefunktionen des Tools unterstützen den Designer bei der erfolgreichen Konfiguration des Designs für den Einsatz.

Vor der Generierung des Codes muss der H2-Filter (d. h. der in FilterScript entworfene Filter) zunächst für den Einsatz in eine H1-Filterstruktur (Hauptfilter) umoptimiert (transformiert) werden. Das Options Menü befindet sich unter der Registerkarte P-Z in der Hauptbenutzeroberfläche.

Alle Entwürfe von Fließkomma-IIR-Filtern müssen auf Single-Precision-Arithmetik und entweder auf einer Direct Form I– oder Direct Form II Transposed -Filterstruktur basieren. Die Struktur Direct Form II Transposed wird für die Fließkomma-Implementierung empfohlen, da sie eine höhere numerische Genauigkeit aufweist.

Die Einstellungen für die Quantisierung und die Filterstruktur finden Sie auf der Registerkarte Q (wie links dargestellt). Wenn Sie die Arithmetic auf Single Precision und Structure auf Direct Form II Transposed einstellen und auf die Schaltfläche Apply klicken, wird die hier betrachtete IIR für das CMSIS-DSP Software Framework konfiguriert.

Wählen Sie das Arm CMSIS-DSP-Framework aus der Auswahlbox im Filterübersichtsfenster:

ARM Code selection

Der automatisch generierte C-Code auf Basis des CMSIS-DSP-Frameworks für die direkte Implementierung auf einem Arm-basierten Cortex-M-Prozessor ist unten dargestellt:

Der automatisch generierte C-Code auf Basis des CMSIS-DSP-Frameworks für die direkte Implementierung auf einem Arm-basierten Cortex-M-Prozessor ist dargestellt

Wie man sieht, generiert der automatische Code-Generator des ASN Filter Designers den gesamten Initialisierungscode, die Skalierung und die Datenstrukturen, die für die Implementierung des IIR-Filters mit A-Bewertung über die CMSIS-DSP-Bibliothek von Arm erforderlich sind.

ASN Filter Designer box
ASN Filter Designer Leistungsstarke DSP-Plattform

Syntax

Hd = ellip (Order, Frequencies, Rp, Rs, Type, DFormat)

Beschreibung

Klassischer IIR-elliptischer Filterentwurf.

  • Gleichwelligkeit sowohl im Durchlass- als auch im Sperrbereich.
  • Schnellster Roll-Off.
  • Filter mit der niedrigsten Ordnung von allen unterstützten Prototypen.

Cauer-Filter oder elliptische Filter

Hd = ellip (Order, Frequencies, Rp, Rs, Type, DFormat)

Order: kann bis zu 20 (Professional) und bis zu 10 (Educational) Edition angegeben werden. Wird die Order auf 0 gesetzt, wird der Algorithmus zur automatischen Bestimmung der Ordnung aktiviert.

Frequencies: Tiefpass- und Hochpassfilter haben ein Übergangsband und benötigen daher zwei Frequenzen (d.h. untere und obere Grenzfrequenz des Übergangsbandes). Für Bandpass- und Bandsperrfilter werden vier Frequenzen benötigt (d. h. zwei Übergangsbänder). Alle Frequenzen müssen in aufsteigender Reihenfolge und < Nyquist sein (siehe das nachstehende Beispiel).

Rp: Durchlassband-Welligkeit in dB.

Rs: Sperrbanddämpfung in dB.

Type: Die elliptische Methode ermöglicht den Entwurf von lowpass, highpass, bandpass bzw. bandstopfiltern.

Hd: Die elliptische Methode entwirft ein elliptisches IIR-Filter auf der Grundlage der eingegebenen Spezifikationen und legt die Übertragungsfunktion (d. h. Zähler, Nenner, Verstärkung) in ein digitales Filterobjekt, Hd, ab. Das digitale Filterobjekt kann dann mit anderen Methoden kombiniert werden, falls dies erforderlich ist. Für ein digitales Filterobjekt Hd werden durch den Aufruf von getnum(Hd), getden(Hd) und getgain(Hd) die Zähler-, Nenner- bzw. Verstärkungskoeffizienten extrahiert – siehe unten.

DFormat: ermöglicht die Angabe des Anzeigeformats des resultierenden digitalen Filterobjekts.

symbolic Zeigt eine symbolische Darstellung des Filterobjekts an. Wenn die Ordnung > 10 ist, wird die symbolische Anzeigeoption überschrieben und auf numerisch gesetzt.
numeric Zeigt eine Matrixdarstellung des Filterobjekts an.
void Erzeugt ein Filterobjekt, zeigt aber keine Ausgabe an.

Beispiel
[code lang=”java”]
ClearH1; // clear primary filter from cascade
ShowH2DM; // show DM on chart&amp;lt;/code&amp;gt;

Main()

Rp=1;
Rs=80;
F={50,120};
Hd=ellip(0,F,Rp,Rs,"lowpass","symbolic");

F={50,80,100,120};
Hd=ellip(0,F,Rp,Rs,"bandpass","symbolic");

Num = getnum(Hd); // define numerator coefficients
Den = getden(Hd); // define denominator coefficients
Gain = getgain(Hd); // define gain
[/code]

Siehe auch

bessel / butter / cheby1 / cheby2 / ellip / arbmagphase / cplxfreqshift / dcremover / notch / peaking

Qu’est-ce qu’un filtre de Tchebychev? Cet article traite des avantages et des inconvénients du filtre de Tchebychev, avec des exemples de code en ASN Filterscript.

Les filtres de Tchebychev de type II ont des bandes passantes plates (sans ondulation), ce qui en fait un bon choix pour les applications de mesure en courant continu et à basse fréquence, comme les capteurs à pont (par exemple les capteurs de charge). Toutefois, cette propriété souhaitable se fait au détriment de bandes de transition plus larges, ce qui se traduit par une faible transition bande passante-bande d’arrêt (roll-off lent). Le type I de Tchebychev a un roll-off plus rapide mais présente une ondulation de bande passante et des caractéristiques de phase de bande passante très non linéaires.

Type I de Tchebychev

Les filtres de Tchebychev de type I sont équiréparables dans la bande passante et monotones dans la bande d’arrêt. En tant que tels, les filtres de type I s’annulent plus rapidement que les filtres de Tchebychev de type II et de Butterworth, mais au prix d’une plus grande ondulation de la bande passante.

Filtre de Tchebychev de type I ; filtre de Tchebychev de type 1

Caractéristiques du filtre

  • Ondulation de la bande passante
  • Bande d’arrêt maximalement plate
  • Décroissance plus rapide que Butterworth et Tchebychev type II
  • Bon compromis entre Elliptique et Butterworth

Type II de Tchebychev

Les filtres de type II de Tchebychev sont monotones dans la bande passante et équirépartissables dans la bande d’arrêt, ce qui en fait un bon choix pour les applications de capteurs à pont. Bien que les filtres conçus à l’aide de la méthode de type II soient plus lents à s’annuler que ceux conçus à l’aide de la méthode de Tchebychev de type I, l’annulation est plus rapide que celle des filtres conçus à l’aide de la méthode de Butterworth.

Type II de Tchebychev 5ème ordre

Caractéristiques du filtre

  • Bande passante maximalement plate
  • Décroissance plus rapide que Butterworth
  • Retombée plus lente que le type I de Tchebychev
  • Bon choix pour les applications de mesure du courant continu

Pour en savoir plus sur les autres filtres IIR, voir Conception de filtres IIR : un guide pratique

Syntaxe des filtres de Tchebychev

Voici un exemple en ASN Filterscript

Syntaxe Tchebychev I

Syntaxe
Hd = cheby1 (Order, Frequencies, Rp, Rs, Type, DFormat)

Description

Conception classique d’un filtre IIR Tchebychev de type I

  • Bande d’arrêt maximalement plate/li>
  • Réduction plus rapide (transition bande passante-bande d’arrêt) que Butterworth.

Tchebychev I, syntaxe Cheby

Hd = cheby1 (Order, Frequencies, Rp, Rs, Type, DFormat)

Order: peut être spécifié jusqu’à 20 (professionnel) et jusqu’à 10 (éducatif) édition. En mettant l’Order à 0, on active l’algorithme de détermination automatique de l’ordre.

Frequencies: les filtres passe-bas et passe-haut ont une bande de transition et, en tant que tels, nécessitent deux fréquences (c’est-à-dire les fréquences de coupure inférieure et supérieure de la bande de transition). Pour les filtres passe-bande et coupe-bande, quatre fréquences sont nécessaires (c’est-à-dire deux bandes de transition). Toutes les fréquences doivent être dans l’ordre croissant et &lt Nyquist (voir l’exemple ci-dessous).

Rp: Ondulation de la bande passante en dB. Il s’agit d’un terme quelque peu inapproprié, car le filtre de Butterworth a une bande passante maximalement plate. Une bonne valeur par défaut est 0.001dB, mais l’augmentation de cette valeur affectera la position de la fréquence de coupure inférieure du filtre.

Rs: Atténuation de la bande d’arrêt en dB. C’est un peu un terme inapproprié, car le filtre Butterworth a une bande d’arrêt maximalement plate, ce qui signifie que l’atténuation de la bande d’arrêt (en supposant que l’ordre correct du filtre est spécifié) sera ≥ la spécification de la bande d’arrêt.

Type: La méthode Butterworth facilite la conception de filtres passe-bas (lowpass), passe-haut (highpass), passe-bande (bandpass) et coupe-bande (bandstop) respectivement.

Hd: la méthode Butterworth conçoit un filtre Butterworth IIR sur la base des spécifications entrées et place la fonction de transfert (c’est-à-dire le numérateur, le dénominateur, le gain) dans un objet filtre numérique, Hd. L’objet filtre numérique peut ensuite être combiné avec d’autres méthodes si nécessaire. Pour un objet filtre numérique, Hd, l’appel à getnum(Hd), getden(Hd) et getgain(Hd) permettra d’extraire respectivement les coefficients du numérateur, du dénominateur et du gain – voir ci-dessous.

DFormat: permet de spécifier le format d’affichage de l’objet filtre numérique résultant.

symbolic permet d’afficher une représentation symbolique de l’objet filtre. Si l’ordre > 10, l’option d’affichage symbolique sera remplacée par l’option numérique.
numeric Afficher une représentation matricielle de l’objet filtre
void Créer un objet filtre, mais ne pas afficher la sortie

Exemple
[code lang=”java”]
ClearH1; // clear primary filter from cascade
ShowH2DesignMarkers; // show DM on chart&lt;/code&gt;

Main()

Rp=1.4;
Rs=80;
F={50,120};
Hd=cheby1(0,F,Rp,Rs,&quot;lowpass&quot;,&quot;symbolic&quot;);

F={50,80,100,120};
Hd=cheby1(0,F,Rp,Rs,&quot;bandpass&quot;,&quot;symbolic&quot;);

Num = getnum(Hd); // define numerator coefficients
Den = getden(Hd); // define denominator coefficients
Gain = getgain(Hd); // define gain
[/code]

Syntaxe Tchebychev II

Syntaxe
Hd = cheby2 (Order, Frequencies, Rp, Rs, Type, DFormat)

Description

Conception classique d’un filtre IIR Tchebychev de type II

  • Bande passante maximalement plate
  • Réduction plus lente (transition entre bande passante et bande d’arrêt) que le filtre de Tchebychev de type I.

Tchebychev II, syntaxe Cheby II

Hd = cheby2 (Order, Frequencies, Rp, Rs, Type, DFormat)

Order: peut être spécifié jusqu’à 20 (professionnel) et jusqu’à 10 (éducatif) édition. En mettant l’ordre à 0, on active l’algorithme de détermination automatique de l’ordre.

Frequencies: les filtres passe-bas et passe-haut ont une bande de transition et, à ce titre, nécessitent deux fréquences (c’est-à-dire les fréquences de coupure inférieure et supérieure de la bande de transition). Pour les filtres passe-bande et coupe-bande, quatre fréquences sont requises (c’est-à-dire deux bandes de transition). Toutes les fréquences doivent être dans l’ordre croissant et &lt Nyquist (voir l’exemple ci-dessous).

Rp: Ondulation de la bande passante en dB. Il s’agit d’un terme quelque peu inapproprié, car le filtre de type II de Tchebychev a une bande passante maximalement plate. Une bonne valeur par défaut est 0.001dB, mais l’augmentation de cette valeur affectera la position de la fréquence de coupure inférieure du filtre.

Rs: Atténuation de la bande d’arrêt en dB.

Type: La méthode Tchebychev de type II facilite la conception des filtres passe-bas (lowpass), passe-haut (highpass), passe-bande (bandpass) et coupe-bande (bandstop) respectivement.

Hd: la méthode cheby2 conçoit un filtre IIR Tchebychev de type II sur la base des spécifications saisies et place la fonction de transfert (c’est-à-dire numérateur, dénominateur, gain) dans un objet filtre numérique, Hd. L’objet filtre numérique peut ensuite être combiné avec d’autres méthodes si nécessaire. Pour un objet filtre numérique, Hd, l’appel à Hd, calling getnum(Hd), getden(Hd) et getgain(Hd) permettra d’extraire respectivement les coefficients du numérateur, du dénominateur et du gain – voir ci-dessous.

DFormat: permet de spécifier le format d’affichage de l’objet filtre numérique résultant.

symbolic Permet d’afficher une représentation symbolique de l’objet filtre. Si l’ordre > 10, l’option d’affichage symbolique sera remplacée par l’option numérique/td>
numeric Afficher une représentation matricielle de l’objet filtre
void Crée un objet filtre, mais n’affiche pas la sortie

Exemples
[code lang=”java”]
ClearH1; // clear primary filter from cascade
ShowH2DesignMarkers; // show DM on chart

Main()

Rp=1;
Rs=80;
F={50,120};
Hd=cheby2(0,F,Rp,Rs,&quot;lowpass&quot;,&quot;symbolic&quot;);

F={50,80,100,120};
Hd=cheby2(0,F,Rp,Rs,&quot;bandpass&quot;,&quot;symbolic&quot;);

Num = getnum(Hd); // define numerator coefficients
Den = getden(Hd); // define denominator coefficients
Gain = getgain(Hd); // define gain
[/code]

Bien que la conception de filtres RIF à phase linéaire soit une tâche facile, ce n’est certainement pas le cas pour les filtres RII qui ont généralement une réponse en phase hautement non linéaire, en particulier autour des fréquences de coupure du filtre. Cet article traite des caractéristiques nécessaires pour qu’un filtre numérique ait une phase linéaire, et de la façon dont la phase de la bande passante d’un filtre RII peut être modifiée afin d’obtenir une phase linéaire en utilisant des filtres d’égalisation passe-tout.

Pourquoi avons-nous besoin de filtres à phase linéaire ?

Les filtres numériques à phase linéaire ont l’avantage de retarder toutes les composantes de fréquence de la même quantité, c’est-à-dire qu’ils préservent les relations de phase du signal d’entrée. Cette préservation de la phase signifie que le signal filtré conserve la forme du signal d’entrée original. Cette caractéristique est essentielle pour les applications audio, car la forme du signal est primordiale pour maintenir une haute fidélité dans le son filtré. L’analyse biomédicale des formes d’onde ECG est un autre domaine d’application qui requiert cette caractéristique, car tout artefact introduit par le filtre peut être interprété à tort comme une anomalie cardiaque.

Le graphique suivant montre les performances de filtrage d’un filtre passe-bas RII de type I de Chebyshev sur des données ECG – la forme d’onde d’entrée (représentée en bleu) est décalée de 10 échantillons (\(\small \Delta=10\)) pour compenser approximativement le retard de groupe du filtre. Remarquez que le signal filtré (représenté en rouge) a atténué, élargi et ajouté des oscillations autour du pic ECG, ce qui n’est pas souhaitable.

Figure 1 : Résultat du filtrage passe-bas RII avec distorsion de phase

Pour qu’un filtre numérique ait une phase linéaire, sa réponse impulsionnelle doit présenter une symétrie conjuguée-paire ou conjuguée-impaire autour de son point central. Ceci est facilement visible pour un filtre RIF,

\(\displaystyle H(z)=\sum\limits_{k=0}^{L-1} b_k z^{-k}\tag{1} \)

Avec la contrainte suivante sur ses coefficients ,

\(\displaystyle b_k=\pm\, b^{\ast}_{L-1-k}\tag{2} \)

ce qui conduit à ,

\(\displaystyle z^{L-1}H(z) = \pm\, H^\ast (1/z^\ast)\tag{3} \)

En analysant l’équation 3, nous voyons que les racines (zéros) de \(\small H(z)\) doivent aussi être les zéros de \(\small H^\ast (1/z^\ast)\). Cela signifie que les racines de H(z) doivent apparaître par paires réciproques conjuguées, c’est-à-dire que si \(\small z_k\) est un zéro de \(\small H(z)\), alors \(\small H^\ast (1/z^\ast)\) doit aussi être un zéro.

Pourquoi les filtres RII n’ont pas une phase linéaire

Un filtre numérique est dit stable à Entrée Bornée, Sortie Bornée, ou stable EBSB (stable BIBO), si chaque entrée bornée donne lieu à une sortie bornée. Tous les filtres RII ont soit des pôles, soit à la fois des pôles et des zéros, et doivent être stables EBSB, c’est-à-dire que

\(\displaystyle \sum_{k=0}^{\infty}\left|h(k)\right|<\infty \tag{4}\)

Où, \(\small h(k)\) est la réponse impulsionnelle du filtre. En analysant l’équation 4, il devrait être clair que le critère de stabilité EBSB ne sera satisfait que si les pôles du système se trouvent à l’intérieur du cercle unitaire, puisque la ROC (région de convergence) du système doit inclure le cercle unitaire. Par conséquent, il suffit de dire qu’un signal d’entrée borné produira toujours un signal de sortie borné si tous les pôles se trouvent à l’intérieur du cercle unitaire.

Les zéros, par contre, ne sont pas contraints par cette exigence et, par conséquent, peuvent se trouver n’importe où sur le plan z, puisqu’ils n’affectent pas directement la stabilité du système. Par conséquent, une analyse de la stabilité du système peut être entreprise en calculant d’abord les racines de la fonction de transfert (c’est-à-dire les racines des polynômes du numérateur et du dénominateur), puis en traçant les pôles et les zéros correspondants sur le plan z.

En appliquant la logique développée aux pôles d’un filtre RII, nous arrivons maintenant à une conclusion très importante sur la raison pour laquelle les filtres RII ne peuvent pas avoir une phase linéaire.

Un filtre stable EBSB doit avoir ses pôles à l’intérieur du cercle unitaire. Pour obtenir une phase linéaire, un filtre RII devrait avoir des pôles réciproques conjugués à l’extérieur du cercle unitaire, ce qui le rendrait instable EBSB.

Sur la base de cette affirmation, il semblerait qu’il ne soit pas possible de concevoir un RII pour avoir une phase linéaire. Cependant, comme nous le verrons plus loin, des filtres d’égalisation de phase peuvent être utilisés pour linéariser la réponse en phase de la bande passante.

Linéarisation de phase avec des filtres passe-tout

Les filtres passe-tout (equalisers) de linéarisation de phase (égaliseurs) sont une méthode bien établie pour modifier la réponse en phase d’un filtre sans affecter sa réponse en amplitude. Un filtre passe-tout du second ordre (Biquad) est défini comme suit :

\( A(z)=\Large\frac{r^2-2rcos \left( \frac{2\pi f_c}{fs}\right) z^{-1}+z^{-2}}{1-2rcos \left( \frac{2\pi f_c}{fs}\right)z^{-1}+r^2 z^{-2}}\tag{5} \)

Où \(\small f_c\) est la fréquence centrale, \(\small r\) est le rayon des pôles et \(\small f_s\) est la fréquence d’échantillonnage. Remarquez comment les coefficients du numérateur et du dénominateur sont disposés comme une paire d’images miroir l’une de l’autre. La propriété d’image miroir est ce qui donne au filtre passe-tout sa propriété souhaitable, à savoir permettre au concepteur de modifier la réponse en phase tout en gardant la réponse en magnitude constante ou plate sur l’ensemble du spectre de fréquences.

En cascadant une cascade d’égalisation APF (filtre passe-tout) (composée de plusieurs APF) avec un filtre RII, l’idée de base est que nous n’avons besoin de linéariser la réponse en phase que dans la région de la bande passante. Les autres régions, telles que la bande de transition et la bande d’arrêt, peuvent être ignorées, car toute non-linéarité dans ces régions est de peu d’intérêt pour le résultat global du filtrage.

Le défi

La cascade d’APF semble être un compromis idéal pour ce défi, mais en réalité, il faut beaucoup de temps et un réglage très précis des positions des APF pour obtenir un résultat acceptable. Chaque APF a deux variables : \(\small f_c\) et \(\small r\) qui doivent être optimisées, ce qui complique la solution. Celle-ci est encore compliquée par le fait que plus on ajoute d’étages d’APF à la cascade, plus le délai de groupe (latence) du filtre global devient élevé. Ce dernier point peut devenir problématique pour les systèmes de contrôle en boucle fermée en temps réel qui dépendent de la propriété de faible latence d’un RII.

Néanmoins, malgré ces difficultés, l’égaliseur APF est un bon compromis pour linéariser les caractéristiques de phase de la bande passante d’un RII.

L’égaliseur APF

ASN Filter Designer fournit aux concepteurs une interface graphique d’égaliseur tout-phase très simple à utiliser pour linéariser la phase de bande passante des filtres RII. Comme on peut le voir ci-dessous, l’interface est très intuitive, et permet aux concepteurs de placer rapidement et d’affiner les positions des filtres APF avec la souris. L’outil calcule automatiquement \(\small f_c\) et \(\small r\), en fonction de la position du marqueur.

Égaliseur APF ASN Filter Designer

Un clic droit sur le diagramme de réponse en fréquence ou sur un marqueur de conception passe-tout existant affiche un menu d’options, comme illustré à gauche.

Vous pouvez ajouter jusqu’à 10 biquads (version professionnelle uniquement).

Un RII avec une phase de bande passante linéaire

En concevant un égaliseur composé de trois paires d’APF, et en le cascadant avec le filtre de Chebyshev de la figure 1, nous obtenons une forme d’onde de filtre dont le pic est beaucoup plus net, avec moins d’atténuation et d’oscillation que le RII original – voir ci-dessous. Toutefois, cette amélioration se fait au prix de trois filtres Biquad supplémentaires (la cascade APF) et d’un retard de groupe accru, qui passe à 24 échantillons contre 10 à l’origine.

Résultat du filtrage passe-bas RII avec trois filtres d'égalisation de phase APF (distorsion de phase minimale)
Résultat du filtrage passe-bas RII avec trois filtres d’égalisation de phase APF
(distorsion de phase minimale)

La réponse en fréquence du filtre RII original et du filtre RII égalisé est illustrée ci-dessous, où le retard de groupe (en violet) est le retard moyen du filtre et constitue un moyen plus simple d’évaluer la linéarité.

RII sans égalisation en cascade
RII sans égalisation en cascade

RII avec égalisation en cascade
RII avec égalisation en cascade

Remarquez que le temps de propagation de groupe de la bande passante RII égalisée (illustré à droite) est presque plat, ce qui confirme que la phase est effectivement linéaire.

Génération automatique de code vers les cœurs de processeurs Arm via CMSIS-DSP

Le moteur de génération automatique de code de l’ASN Filter Designer facilite l’exportation d’un filtre conçu vers des processeurs basés sur Cortex-M Arm via le cadre logiciel CMSIS-DSP. Les fonctions d’analyse et d’aide intégrées de l’outil aident le concepteur à configurer avec succès la conception pour le déploiement.

Avant de générer le code, les filtres RII et d’égalisation (c’est-à-dire les filtres H1 et Heq) doivent d’abord être réoptimisés (fusionnés) en une structure de filtre H1 (filtre principal) pour le déploiement. Le menu d’options se trouve sous l’onglet P-Z dans l’interface utilisateur principale.

Toutes les conceptions de filtres RII en virgule flottante doivent être basées sur l’arithmétique en simple précision et sur une structure de filtre de Direct Form I ou Direct Form II Transposed, car celle-ci est prise en charge par un multiplicateur matériel dans les cœurs M4F, M7F, M33F et M55F. Bien que vous puissiez choisir la double précision, la prise en charge matérielle n’est disponible que dans certains dispositifs Hélium M7F et M55F. La structure Direct Form II Transposed est préconisée pour l’implémentation en virgule flottante en raison de sa plus grande précision numérique.

Les paramètres de quantification et de structure de filtre se trouvent sous l’onglet Q (comme illustré à gauche). En réglant l’Arithmetic sur Single Precision et la Structure sur strong>Direct Form II Transposed et en cliquant sur le bouton Apply, on configure le RII considéré ici pour le cadre logiciel CMSIS-DSP.

Sélectionnez le cadre Arm CMSIS-DSP dans la boîte de sélection de la fenêtre de résumé du filtre:

ASN Filter Designer Sélectionnez le cadre Arm CMSIS-DSP dans la boîte de sélection de la fenêtre de résumé du filtre

Le code C généré automatiquement basé sur le cadre CMSIS-DSP pour une implémentation directe sur un processeur Cortex-M basé sur Arm est montré ci-dessous :

Le code C généré automatiquement basé sur le cadre CMSIS-DSP pour une implémentation directe sur un processeur Cortex-M basé sur Arm

Le générateur de code automatique de l’ASN Filter Designer génère tout le code d’initialisation, la mise à l’échelle et les structures de données nécessaires pour implémenter le filtre RII linéarisé via la bibliothèque CMSIS-DSP d’Arm.

Assistant de déploiement Arm

Les utilisateurs de la licence professionnelle peuvent accélérer le déploiement en utilisant l’assistant de déploiement Arm. L’IA intégrée déterminera automatiquement les meilleurs paramètres pour votre conception en fonction des paramètres de quantification choisis.

L’IA intégrée analyse automatiquement votre cascade de filtres complète et convertit tous les filtres H2 ou Heq en H1 pour la mise en œuvre.

Qu’avons-nous appris ?

Les racines d’un filtre numérique à phase linéaire doivent se trouver dans des paires réciproques conjuguées. Bien que cela ne pose aucun problème pour un filtre RIF, cela devient infaisable pour un filtre RII, car les pôles devraient se trouver à la fois à l’intérieur et à l’extérieur du cercle unitaire, ce qui rendrait le filtre instable EBSB.

La réponse en phase de la bande passante d’un filtre RII peut être linéarisée en utilisant une cascade d’égalisation APF. Le Filter Designer d’ASN fournit aux concepteurs tout ce dont ils ont besoin via une interface graphique d’égaliseur de phase passe-tout très simple à utiliser, afin de concevoir une cascade APF appropriée en utilisant simplement la souris !

Le filtre RII linéarisé peut être exporté via le générateur de code automatique utilisant les fonctions optimisées de la bibliothèque CMSIS-DSP d’Arm pour être déployé sur n’importe quel microcontrôleur Cortex-M.

 

 

Télécharger la démo

Informations sur les licences

Amélioration des conceptions existantes basées sur des filtres analogiques

Les filtres analogiques existent depuis les débuts de l’électronique, depuis les simples réseaux inductance-condensateur jusqu’aux filtres actifs plus avancés avec des amplificateurs opérationnels. En tant que tel, il existe une riche collection de conceptions de filtres une large gamme d’applications de mesure de capteurs. Cependant, avec les exigences de performance des applications modernes de mesure de capteurs IoT (Internet des objets) et la baisse des coûts des produits, les filtres numériques intégrés dans le code d’application du microcontrôleur deviennent la norme, (strong>mais comment obtenir le meilleur des deux mondes??

Plutôt que de réinventer la roue, les concepteurs de produits peuvent prendre une fonction de transfert de filtre analogique existante, la transformer en numérique (via une transformation) et l’implémenter en tant que filtre numérique dans un microcontrôleur ou un DSP (processeur de signal numérique). Bien que les transformations analogiques-numériques existent depuis des décennies, la disponibilité d’outils de conception de DSP permettant d’ajuster le “filtre numérique transformé” a été quelque peu limitée, ce qui a entravé le processus de conception et de validation.

Un filtre passe-bas analogique de 2e ordre est illustré ci-dessous. Dans sa forme la plus simple, seuls 5 composants sont nécessaires pour construire le filtre, ce qui semble facile. N’est-ce pas?Un filtre passe-bas analogique de 2e ordre est illustré ci-dessous. Dans sa forme la plus simple, seuls 5 composants sont nécessaires pour construire le filtre, ce qui semble facile. N'est-ce pas?

Les avantages

L’avantage le plus évident est que les filtres analogiques ont une excellente résolution, car il n’y a pas de “nombre de bits” à prendre en compte. Les filtres analogiques ont de bonnes propriétés CEM (compatibilité électromagnétique) car aucun bruit d’horloge n’est généré. Il n’y a pas d’effets de repliement, ce qui est certainement vrai pour les amplificateurs opérationnels plus simples, qui n’ont pas de circuit fantaisiste de hachage ou d’auto-calibrage intégré, et les conceptions analogiques peuvent être bon marché, ce qui est idéal pour les applications sensibles au coût.

C’est très bien, mais quelle est la mauvaise nouvelle ?

Les filtres analogiques présentent plusieurs inconvénients importants qui affectent leurs performances, tels que le vieillissement des composants, la dérive en température et la tolérance des composants. De plus, de bonnes performances exigent de bonnes compétences en matière de conception analogique et une bonne disposition des circuits imprimés, ce qui est difficile à trouver sur le marché actuel des compétences.

Ces inconvénients rendent les filtres numériques beaucoup plus attrayants pour les applications modernes, qui exigent une grande répétabilité des caractéristiques. Prenons un exemple : disons que vous souhaitez fabriquer 1000 modules de mesure après avoir optimisé la conception de votre filtre. Avec une solution numérique, vous pouvez être sûr que les performances de votre filtre seront identiques dans tous les modules. Ce n’est certainement pas le cas avec l’analogique, car la tolérance des composants, leur vieillissement et la dérive de la température font que le filtre de chaque module aura ses propres caractéristiques. De plus, la réponse en fréquence d’un filtre analogique reste fixe, c’est-à-dire qu’un filtre de Butterworth sera toujours un filtre de Butterworth – toute modification de la réponse en fréquence nécessiterait de changer physiquement les composants sur le circuit imprimé – ce qui n’est pas idéal !

Les filtres numériques sont adaptatifs et flexibles, nous pouvons concevoir et mettre en œuvre un filtre avec la réponse en fréquence que nous voulons, le déployer et mettre à jour les coefficients du filtre sans rien changer sur le PCB ! Il est également facile de concevoir des filtres numériques avec une phase linéaire et à des fréquences d’échantillonnage très basses – deux choses qui sont délicates avec l’analogique.

Transformations de Laplace en transformées discrètes/numériques

Les trois méthodes présentées ici consistent essentiellement à transformer une fonction de transfert de Laplace (analogique), \(H(s)\), en une fonction de transfert discrète, \(H(z)\), de sorte qu’un filtre analogique éprouvé et déjà utilisé dans une conception puisse être mis en œuvre sur un microcontrôleur ou un DSP.

Une sélection de quelques transformées de Laplace en z utiles est donnée dans le tableau ci-dessous :

\(
\begin{array}{ccc}\hline
H(s) &\longleftrightarrow & H(z) \\ \hline
1 &\longleftrightarrow & 1 \\
\frac{\displaystyle1}{\displaystyle s}
&\longleftrightarrow& \frac{\displaystyle 1}{\displaystyle 1-z^{\scriptstyle -1}}\\
\frac{\displaystyle 1}{\displaystyle s^{\scriptstyle 2}} &\longleftrightarrow& \frac{\displaystyle
Tz^{\scriptstyle-1}}{\displaystyle (1-z^{\scriptstyle -1})^2}\\
\frac{\displaystyle 1}{\displaystyle s+a}
&\longleftrightarrow&
\frac{\displaystyle 1}{\displaystyle 1-e^{-aT}z^{-1}}\\
\frac{\displaystyle 1}{\displaystyle (s+a)^2}
&\longleftrightarrow& \frac{\displaystyle z^{-1}(1-e^{-aT})}{\displaystyle a(1-z^{-1})(1-e^{-aT}z^{-1})}\\\hline
\end{array}
\)
Un tableau des transformées de Laplace et de z utiles

La transformée en z bilinéaire (BZT)

La transformée bilinéaire en z (BZT) convertit simplement une fonction de transfert analogique, \(H(s)\), en une fonction de transfert discrète, \(s\), en remplaçant tous les termes s par les suivants :

\(\displaystyle
s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}} \label{bzt}\)

Où, \(T\) est la période d’échantillonnage du système discret. Cependant, en substituant \(s=j\Omega\) et \(z=e^{jwT}\) dans l’équation BZT et en simplifiant, on remarque qu’il existe en réalité une relation non linéaire entre les fréquences analogiques, \(\Omega\) et discrètes, \(w\). Cette relation est montrée ci-dessous, et est due à la non-linéarité de la fonction arctangente.

\(\displaystyle
\omega=2\tan^{-1}\left(\frac{\Omega T}{2}\right)
\label{bzt_warp_def1}
\)

En analysant l’équation, on constate que les fréquences analogiques équidistantes dans la plage \(-\infty<\Omega<\infty\) sont compressées de manière non linéaire dans la plage de fréquences \(-\pi<w<\pi\) dans le domaine discret. Cette relation est appelée déformation des fréquences, et peut être compensée par une déformation préalable des fréquences analogiques par:

\(\displaystyle
\Omega_c=\frac{2}{T}\tan\left(\frac{\Omega_d T}{2}\right)
\label{bzt_warp_def2}
\)

où, \(\displaystyle\Omega_c\) est la fréquence analogique compensée ou pré-gauchie, et \(\displaystyle\Omega_d\) est la fréquence analogique souhaitée.

La commande \(\texttt{bilinear}\) de ASN FilterScript peut être utilisée pour convertir une fonction de transfert de Laplace en son équivalent discret en utilisant la transformée BZT. Un exemple est donné ci-dessous. La commande ASN FilterScript bilinéaire peut être utilisée pour convertir une fonction de transfert Laplace en son équivalent discret en utilisant la transformée BZT. Un exemple est donné ci-dessous.

La transformation invariante en fonction des impulsions

La deuxième transformation est appelée transformation invariante aux impulsions (IIT), car les pôles de la fonction de transfert de Laplace sont convertis en leurs équivalents discrets, de sorte que la réponse impulsionnelle discrète, \(h(n)\), est identique à une représentation régulièrement échantillonnée de la réponse impulsionnelle analogique (c’est-à-dire \(h(n)=h(nT)\), où \(T\) est le taux d’échantillonnage et \(t=nT\)). L’IIT est une technique de transformation beaucoup plus fastidieuse que la BZT, car la fonction de transfert de Laplace doit d’abord être développée à l’aide de fractions partielles avant d’appliquer la transformation.

La technique de transformation est définie ci-dessous:

\(\displaystyle
\frac{K}{s+a} \quad\longrightarrow\quad
\frac{K}{1-e^{-aT}z^{-1}} \label{iit_def}
\)

Cette méthode souffre de plusieurs contraintes, puisqu’elle ne permet pas la transformation des zéros ou des termes constants individuels (une fois développés), et doit avoir un taux d’échantillonnage élevé afin de surmonter les effets de l’aliasing spectral. En effet, les effets de repliement gênent considérablement cette méthode, de sorte qu’elle ne devrait être utilisée que lorsque l’exigence est de faire correspondre la réponse impulsionnelle de la fonction de transfert analogique, puisque le modèle discret résultant peut avoir un spectre d’amplitude et de phase (réponse en fréquence) différent de celui du système analogique original. Par conséquent, la méthode d’invariant d’impulsion ne convient pas à la modélisation des filtres passe-haut, et est donc limitée à la modélisation des filtres de type passe-bas ou passe-bande.

En raison des limitations susmentionnées de la méthode IIT, elle n’est actuellement pas supportée dans ASN Filterscript.

La transformation Matched-z

Une autre technique de modélisation analogique à discrète est la transformation matched-z. Comme son nom l’indique, cette transformation convertit les pôles et les zéros de la fonction de transfert analogique directement en pôles et zéros dans le plan z. La transformation est décrite ci-dessous, où \(T\) est la fréquence d’échantillonnage.

\(\displaystyle
\frac{\prod\limits_{k=1}^q(s+b_k)}{\prod\limits_{k=1}^p(s+a_k)}
\quad\longrightarrow\quad
\frac{\prod\limits_{k=1}^q(1-e^{-b_kT}z^{-1})}{\prod\limits_{k=1}^p(1-e^{-a_kT}z^{-1})}
\label{matchedz_def}
\)

En analysant l’équation de transformation, on constate que les pôles transformés du plan z seront identiques aux pôles obtenus avec la méthode de l’invariant d’impulsion. Cependant, notez que les positions des zéros seront différentes, puisque la méthode de l’invariant d’impulsion ne peut pas les transformer.
La commande ASN Filterscript \(\texttt{mztrans}\) est disponible pour cette méthode.

Un exemple détaillé

Afin de démontrer la facilité de transformer les filtres analogiques en leurs équivalents discrets/numériques à l’aide des transformées analogiques/discrètes, un exemple de modélisation avec la BZT va maintenant suivre pour un filtre analogique passe-bas du 2ème ordre.

Un filtre analogique passe-bas d’ordre 2 généralisé est donné par:

\(\displaystyle
H(s)=\frac{w_c^2}{s^2+2\zeta w_c s + w_c^2}
\)

Où \(w_c=2\pi f_c\) est la fréquence de coupure et \(\zeta\) définit l’amortissement du filtre, où un \(\zeta=1/\sqrt{2}\) est dit être amorti de façon critique ou égal à -3dB à \(w_c\). De nombreux ingénieurs analogiques choisissent de spécifier un facteur de qualité, \(Q =  \displaystyle\frac{1}{2\zeta}\) ou un facteur de crête pour leurs conceptions. En substituant \(Q\) dans \(H(s)\), nous obtenons :

\(\displaystyle
H(s)=\frac{w_c^2}{s^2+ \displaystyle{\frac{w_c}{Q}s} + w_c^2}
\)

En analysant \(H(s)\), on remarque que \(Q=1/\sqrt{2} = 0.707\) donne également une réponse amortie de façon critique. Différentes valeurs de \(Q\) sont illustrées ci-dessous, et comme on le voit lorsque \(Q>1/\sqrt{2}\) un pic se produit.

Spectre d’amplitude du prototype du filtre passe-bas du 2ème ordre pour différentes valeurs de Q:
remarquez que lorsque \(Q>1/\sqrt{2}\) un pic se produit.

Avant d’appliquer la BZT dans ASN FilterScript, la fonction de transfert analogique doit être spécifiée dans un objet filtre analogique. Le code suivant configure un objet filtre analogique pour le prototype passe-bas d’ordre 2 considéré ici :

Main()

wc=2*pi*fc;
Nb={0,0,wc^2};
Na={1,wc/Q,wc^2};

Ha=analogtf(Nb,Na,1,"symbolic"); // make analog filter object

Le mot clé \(\texttt{symbolic}\) génère une représentation symbolique de la fonction de transfert dans la fenêtre de commande. Pour un taux d’échantillonnage de \(f_s=500Hz\) et \(f_c=30Hz\) et \(Q=0.707\), on obtient :

Commande analogique ASN FilterScript

Application de la BZT via la commande \(\texttt{bilinear}\) sans préwarping,

 Hd=bilinear(Ha,0,"symbolic"); 

La réponse en fréquence complète du filtre numérique transformé est présentée ci-dessous, où l’on peut voir qu’à \(30Hz\), l’amplitude est de \(-3dB\) et la phase de \( -90^{\circ}\), ce qui est conforme aux attentes. Remarquez également comment l’atténuation de la magnitude du filtre est affectée par la double paire de zéros à Nyquist (voir le graphique du plan z ci-dessous), ce qui entraîne des différences avec son cousin analogique. Graphique pôle-zéro LPF du 2ème ordre

LPF de 2ème ordre

Les positions des pôles et des zéros peuvent être modifiées dans ASN Filterscript ou via l’éditeur interactif du plan z des pôles et des zéros de ASN Filter Designer en utilisant simplement la souris!

Implémentation

Le code complet pour transformer un prototype de filtre passe-bas analogique généralisé du 2ème ordre en son équivalent numérique en utilisant le BZT via ASN FilterScript est donné ci-dessous :


ClearH1;  // clear primary filter from cascade
interface Q = {0.1,10,0.02,0.707};
interface fc = {10,200,10,40};

Main()

wc=2*pi*fc;
Nb={0,0,wc^2};
Na={1,wc/Q,wc^2};

Ha=analogtf(Nb,Na,1,"symbolic"); // make analog filter object
Hd=bilinear(Ha,0,"symbolic"); // transform Ha via BZT into digital object, Hd

Num=getnum(Hd);
Den=getden(Hd);
Gain=getgain(Hd);

Download demo now

Licencing information

Der Filter des gleitenden Durchschnitts (auch gleitender Mittelwert) ist vielleicht einer der am häufigsten verwendeten FIR-Filter aufgrund seiner konzeptionellen Einfachheit und leichten Implementierung. Wie im Diagramm unten zu sehen, ist zu beachten, dass der Filter keine Multiplikationen benötigt. Nur Additionen und eine Verzögerungsleitung. Das macht ihn sehr geeignet für viele extrem stromsparende eingebettete Geräte mit einfachen Rechenfähigkeiten.

fir direct form

Trotz seiner Einfachheit ist das Filter des gleitenden Durchschnitts optimal geeignet, um Rauschen zu reduzieren und gleichzeitig eine scharfe Sprungantwort beizubehalten, was es zu einem vielseitigen Baustein für intelligente Sensorsignalverarbeitungsanwendungen macht.

Ein Filter mit gleitendem Durchschnitt der Länge \(L\) für ein Eingangssignal \(x(n)\) kann wie folgt definiert werden:

\(y(n)=\large{\frac{1}{L}}\normalsize{\sum\limits_{k=0}^{L-1}x(n-k)}\) for \(\normalsize{n=0,1,2,3….}\)

Dabei besagt eine einfache Faustregel, dass der Betrag der Rauschunterdrückung gleich der Quadratwurzel aus der Anzahl der Punkte im Mittelwert ist. Zum Beispiel führt ein Filter des gleitenden Durchschnitts der Länge 9 zu einer Rauschunterdrückung um den Faktor 3.

Filter des gleitenden Durchschnitts (auch gleitender Mittelwert) Frequenzgang eines Filters des gleitenden Durchschnitts-Filters der Länge 9. Beachten Sie die schlechte Dämpfung des Sperrbereichs bei etwa -20 dB.

Vorteile

  • Das am häufigsten verwendete digitale Tiefpassfilter
  • Optimal für die Reduzierung von Rauschen unter Erhaltung einer scharfen Sprungantwort
  • Gute Glättung (Zeitbereich)
  • Einwertige Filterkoeffizienten, keine MAC-Operationen (Multiplizieren und Akkumulieren) erforderlich.
  • Konzeptionell einfach zu implementieren

Nachteile

  • Unflexibler Frequenzgang: das Verschieben eines konjugierten Nullpunktpaares führt zu nicht-einheitlichen Koeffizienten
  • Schlechtes Tiefpassfilter (Frequenzbereich): langsamer Roll-Off und schlechte Dämpfungseigenschaften im Sperrbereich

Implementierung

Der Filter des gleitenden Durchschnitts kann in span style=”color: #0000ff;”>ASN FilterScript wie folgt implementiert werden:

ClearH1;  // clear primary filter from cascade
Main();
Hd=movaver(8,"symbolic");  // design an 8th order MA
Num = getnum(Hd);   // define numerator coefficients
Den = {1};          // define denominator coefficients
Gain = getgain(Hd); // define gain

Eine rechnerisch effizientere Implementierung des Filters des gleitenden Durchschnitts wird hier diskutiert.

Weitere Information

  • Understanding Digital Signal Processing, Chapter 5, R. G. Lyons
  • The Scientist and Engineer’s Guide to Digital Signal Processing, Chapter 15, Steven W. Smith

Demo jetzt herunterladen

Lizenzierung