Konfigurationsstrukturen
Allgemeine Beschreibung
Für jeden Funktionsbaustein FB_FTR_<type> existiert eine individuelle Konfigurationsstruktur ST_FTR_<type>. In der Konfigurationsstruktur werden alle Parameter definiert, die zur Berechnung der Übertragungsfunktion, der Ein- und Ausgangsgrößen (Größe und Form der Arrays) sowie der internen Zustände benötigt werden.
Gemeinsame Parameter
Alle Konfigurationsstrukturen ST_FTR_<type> enthalten folgende Parameter:
Parameter | Typ | Beschreibung |
---|---|---|
| UDINT | Anzahl der Oversamples > 0 |
| UDINT | Anzahl der Kanäle > 0 & < 101 |
| POINTER TO LREAL | Pointer auf Array mit Initialwerten (optional) |
| UDINT | Größe des Array mit Initialwerten in BYTE (optional) |
nOversamples und nChannles
Die Parameter nOversamples
und nChannels
beschreiben die Größe der Ein- und Ausgangsarrays, die beim Aufruf der Methode Call()
übergeben werden. Wenn z. B. mit 10 Oversamples und 3 Kanälen gearbeitet wird, erwartet die Methode Call()
ein Array mit 30 Elementen am Eingang und am Ausgang (siehe OverSampling und Kanäle).
Während der Parameter nChannels
die Anzahl der mit einem Aufruf zu verarbeitenden parallelen Signalkanäle beschreibt, beschreibt der Parameter nOversamples
die für jeden einzelnen Kanal auftretende Anzahl von Abtastwerten pro Aufruf der Methode Call()
.
Inital Values
Die optionalen Parameter pInitialValues
und nInitialValuesSize
werden verwendet, um den internen Zustand des Filters nach dessen Konfiguration zu definieren. Praktisch dienen die Parameter dazu, die Einschwingzeit des konfigurierten Filters durch das Einbringen von Vorwissen zu reduzieren. Dazu müssen die Vergangenheitswerte y[n-k] und x[n-k] mit k > 0 in der Differenzengleichung gezielt gesetzt werden.
Für die Funktionsbausteine FB_FTR_IIRCoeff, FB_FTR_MovAvg, FB_FTR_PT1, FB_FTR_PT2 und FB_FTR_PT3 gilt die folgende Struktur der Differenzengleichung:
Zur kompakteren Darstellung werden folgende Schreibweisen für die Vergangenheitswerte verwendet: xi,k und yi,k mit Kanal i und zeitlicher Verzögerung k > 0. Beispiel: Kanal i=2 und Verzögerung k=3 entspricht y2,3 = y2[n-3].
Verwendungsmöglichkeiten:
InitialValues = nullptr
Alle Vergangenheitswerte yi,k und xi,k mit k > 0 werden für alle Kanäle i auf Null gesetzt. Dies entspricht dem Verhalten, wenn die Einträge der Struktur nicht genutzt werden.InitialValues = P
Alle Vergangenheitswerte xi,k mit k > 0 werden für alle Kanäle i auf den Wert P gesetzt. Alle Vergangenheitswerte yi,k mit k > 0 werden für alle Kanäle i auf V*P gesetzt, wobei V der Gleichspannungsverstärkung (DC-Gain) des Filters entspricht.
Das Filter befindet sich entsprechend für alle Kanäle im eingeschwungenen Zustand bezüglich eines konstanten Eingangssignals x[n] = P.InitialValues = [x
1,1,x
1,2,…,x
1,M,y
1,1,y
1,2,…,y
1,N]
Alle Vergangenheitswerte xi,k mit k > 0 und yi,k mit k > 0 werden individuell, aber für alle Kanäle i gleich, gesetzt.InitialValues = [x
1,1,x
1,2,…,x
1,M,y
1,1,y
1,k,…,y
1,N ,
x
2,1,x
2,2,…,x
2,M,y
2,1,y
2,2,…,y
2,N ,
…….
x
I,1,x
I,2,…,x
I,M,y
I,1,y
I,2,…,y
I,N]
Alle Vergangenheitswerte xi,k und yi,k werden für jeden Kanal i=1..I individuell gesetzt.
Für die Funktionsbausteine FB_FTR_IIRSos und FB_FTR_IIRSpec wird intern die Übertragungsfunktion in second-order sections (SOS) berechnet:
Die kompakte Darstellung wird entsprechend um m erweitert, welche den Biquad angibt: x(m)i,k und y(m)i,k. Beispiel: Kanal i=2 und Verzögerung k=1 des vierten Biquad (m=4) entspricht
y(4)2,1 = y(4)2[n-1]. Jeder Biquad kann hier nur 2 Vergangenheitswerte nutzen, entsprechend ist k = 1,2.
Daher ist dort die Strukturierung für die Ein- und Ausgangswerte anders.
Verwendungsmöglichkeiten:
InitialValues = nullptr
Gleiches Verhalten wie oben beschreiben.InitialValues = P
Gleiches Verhalten wie oben beschreiben.InitialValues = [x
(1)1,1,x
(1)1,2,x
(2)1,1,x
(2)1,2,…,x
(M)1,1,x
(M)1,2,
y
(1)1,1,y
(1)1,2,y
(2)1,1,y
(2)1,2,…,y
(M)1,1,y
(M)1,2]
Alle Vergangenheitswerte x(m)i,k und y(m)i,k werden individuell, aber für alle Kanäle i gleich, gesetzt.InitialValues = [x
(1)1,1,x
(1)1,2,x
(2)1,1,x
(2)1,2,…,x
(M)1,1,x
(M)1,2,
y
(1)1,1,y
(1)1,2,y
(2)1,1,y
(2)1,2,…,y
(M)1,1,y
(M)1,2,
x
(1)2,1,x
(1)2,2,x
(2)2,1,x
(2)2,2,…,x
(M)2,1,x
(M)2,2,
y
(1)2,1,y
(1)2,2,y
(2)2,1,y
(2)2,2,…,y
(M)2,1,y
(M)2,2,
…….
x
(1)I,1,x
(1)I,2,x
(2)I,1,x
(2)I,2,…,x
(M)I,1,x
(M)I,2,
y
(1)I,1,y
(1)I,2,y
(2)I,1,y
(2)I,2,…,y
(M)I,1,y
(M)I,2]
Alle Vergangenheitswerte x(m)i,k und y(m)i,k werden für jeden Kanal i=1..I individuell gesetzt.
Der Funktionsbaustein FB_FTR_PTn wird ebenfalls als kaskadierter Filter beschrieben, jedoch als kaskadierter Filter erster Ordnung. Entsprechend gilt hier die Betrachtung wie für die SOS Bausteine, jedoch mit k = 1. Für einen PTn Filter mit n = M gilt dann:
InitialValues = nullptr
Gleiches Verhalten wie oben beschreiben.InitialValues = P
Gleiches Verhalten wie oben beschreiben.InitialValues = [x
(1)1,1,x
(2)1,1,…,x
(M)1,1,
y
(1)1,1,y
(2)1,1,…,y
(M)1,1]
Alle Vergangenheitswerte x(m)i,k und y(m)i,k werden individuell, aber für alle Kanäle i gleich, gesetzt.InitialValues = [x
(1)1,1,x
(2)1,1,…,x
(M)1,1,
y
(1)1,1,y
(2)1,1,…,y
(M)1,1,
x
(1)2,1,x
(2)2,1,…,x
(M)2,1,
y
(1)2,1,y
(2)2,1,…,y
(M)2,1,
…….
x
(1)I,1,x
(2)I,1,…,x
(M)I,1,
y
(1)I,1,y
(2)I,1,…,y
(M)I,1]
Alle Vergangenheitswerte x(m)i,k und y(m)i,k werden für jeden Kanal i=1..I individuell gesetzt.