Gast
#4181409
Hallo,
ich möchte zu Lehrzwecken einen Bandpass-Filter 2. Ordnung
digitalisieren.
Zunächst habe ich aus der Schaltung das Strukturbild gezeichnet und
daraus die Übertragungsfunktion raus gelesen. Diese ging Konform mit der
Übertragungsfunktion in Wikipedia für den Bandpass. Hier habe ich
lediglich mit w^2 erweitert, damit ich nun meine
Beobachtbarkeitsnormalform aufstellen kann.
Kommen wir zu der DGL:
u := Eingang
v := Ausgang
x1' = -w^2 * x1
x2' = x1 - 2Dw * x2 + 2Dw*u
v = x2
Quellcode vom Euler (C - Arduino):
--------------------------------------
x_raw = analogRead(eingang);
u = (3.30*x_raw)/ 1023; //Umrechnung in Volt 10 Bit -> 3.3v = 1024
/* BEOBACHTBARKEITS NORMAL FORM UND EULER*/
x1_neu = x1_alt + dt * (-(w * w) * x2_alt);
x2_neu = x2_alt + dt * (x1_alt - 2 D w x2_alt k + 2 D w *
u);
y = x2_alt;
/* BEOBACHTBARKEITS NORMAL FORM UND EULER*/
x1_alt = x1_neu;
x2_alt = x2_neu;
Serial.println(y);
Diese habe ich nun mit dem Euler-Polygonzug programmiert (Arduino)
und fange nun ein Signal an einem der Analogpins ein.
Auch habe ich parallel in Matlab das System nachgebildet.
Jetzt ergibt sich folgendes Problem:
Beim EulerPolygon schwingt sich der Ausgang V auf.
Sowohl in Matlab als auch bei Arduino und geht die Amplitude -> oo
Erst bei Runge-Kutta passiert das nicht. Da wird dann tatsächlich
die Kreisfrequenz w rausgefiltert nach einem kurzen Einschwingvorgang.
Die Periode bleibt stabil für alle Zeiten.
1) Nun ist meine Frage: Warum ist das so?
Warum eignet sich Euler hier nicht?
2) Wie würde mein Beispiel in C mit Runge Kutta aussehen?
Ich weiß, dass Frage zwei eigentlich aus Eigenbemühungen zu beantworten
ist.
Allerdings würde mir die Lösung zu meinem Beispiel einiges an Zeit
ersparen was das Verständnis dessen angeht (Die Theorie dahinter kenne
ich bereits im Grundzug - Mir fehlt nur das konkrete Beispiel)
