Least Square Fit - Übertragungsfunktion

Ich habe hier diese kontinuierliche Übertragungsfunktion:

Y ( S ) U ( S ) = S + 3 S 3 + 12 S 2 + 39 S + 28

Übergeben Sie dieses tf wie folgt an eine diskrete Domain:

T = 0.01;
sys_discrete = c2d(sys, T);

Ich schaff das:

Y ( z ) U ( z ) = 4.853.10 5 z 2 + 1.57.10 11 z 4.57.10 5 z 3 2.883 z 2 + 2.77 z 0,8869

In Anbetracht dessen:

Y ( z ) U ( z ) = A 0 z 2 + A 1 z + A 2 B 0 z 3 + B 1 z 2 + B 2 z + B 3

und bei der inversen Z-Transformation habe ich Folgendes erhalten:

j ( k ) = A 0 B 3 u ( k 2 ) + A 1 B 3 u ( k 1 ) + A 2 B 3 u ( k ) B 0 B 3 j ( k 3 ) B 1 B 3 j ( k 2 ) B 2 B 3 j ( k 1 ) j ( k ) = [ u ( k 2 ) u ( k 1 ) u ( k ) j ( k 3 ) j ( k 2 ) j ( k 1 ) ] . [ A 0 / B 3 A 1 / B 3 A 2 / B 3 B 0 / B 3 B 1 / B 3 B 2 / B 3 ]

Umbenennung dieser Typen:

[ A 0 / B 3 A 1 / B 3 A 2 / B 3 B 0 / B 3 B 1 / B 3 B 2 / B 3 ] = [ C 1 C 2 C 3 C 4 C 5 C 6 ]

Wenn ich also diesen C-Vektor finde, gehe ich auf diese Weise zurück (nur zurück ersetzen):

Y ( z ) U ( z ) = C 1 z 2 + C 2 z + C 3 C 4 z 3 C 5 z 2 C 6 z + 1

Ich versuche also, C zu finden:

Y = A . C A T . Y = A T . A . C ( A T . A ) 1 . ( A T . Y ) = ( A T . A ) 1 . ( A T . A ) . C ( A T . A ) 1 . ( A T . Y ) = ICH . C ( A T . A ) 1 . ( A T . Y ) = C

So mache ich das bei MATLAB:

t = 0:T:10; %time vector
u = wgn(length(t), 1, 1); %input vector
[y, t] = lsim(sys, u, t); %output vector applied to sys

%[u(k-2) u(k-1) u(k) y(k-3) y(k-2) y(k-1)]
A = [u(2:end-2) u(3:end-1) u(4:end) y(1:end-3) y(2:end-2) y(3:end-1)]; %doing the right shifts here, no problem about losing data...
Y = y(4:end);
C=(A'*A)\(A'*Y); %finding C
c1 = C(1); c2 = C(2); c3 = C(3);
c4 = C(4); c5 = C(5); c6 = C(6);
sys_ls = tf([c1 c2 c3], [-c4 -c5 -c6 1], T);

Wenn ich step(sys, sys_ls), bekomme ich das:

Geben Sie hier die Bildbeschreibung ein

Ich hatte gehofft, etwas sehr, sehr Ähnliches zu finden ... Was fehlt mir, um dieses System richtig anzupassen?

"a1Za2" oder "a1Z + a2"? Erkenne nur mögliche Fehler.
Plus! Bearbeiten ... Aber unten ist richtig. Danke schön!
Die inverse z-Transformation ist nicht korrekt. Und wo sind die kleinsten Quadrate? Welche Dimensionen hat Matrix A?
"Die inverse z-Transformation ist nicht korrekt" , nun, ich weiß nicht, was ich dann vermisse. "Und wo sind die kleinsten Quadrate?" Es ist eine Art kleinstes Quadrat. Der Name ist Two Stages Least Square, glaube ich. "Welche Dimensionen hat Matrix A?" , die Größe von A ist nx6. Im Codebeispiel ist n = 998. Entschuldigung für die späte Antwort.
Sie haben Recht. Die inverse Z-Transformation war falsch. Es sollte eher k + n als k - n sein . Bitte als Antwort angeben!
Eine Matrix muss quadratisch sein, um invertiert zu werden.
Ich habe C=inverse(transpose(A)*A) * (transpose(A)*Y) verwendet. Hat funktioniert. Nur die inverse z-Transformation war falsch. Sie können es als Antwort angeben, damit ich es akzeptieren kann! :)
An der Frage sind zu viele Dinge falsch, um sie zu beantworten. Du musst es neu schreiben.
Abgesehen davon, was der Schlüssel zur Beantwortung der Frage ist (inverse Z-Transformation), ist nur dies falsch: C = inverse (A) * Y. Ich kann es korrigieren.
Sie mischen den diskreten Zeitbereich und den z-Bereich. Vielleicht wäre es sinnvoller, wenn Sie die vollständige Frage anstelle Ihrer Interpretation angeben würden.
Wo würde ich die Domänen mischen? Welcher Teil ist nicht klar? Wann gehe ich von Z auf diskret oder von diskret auf z?

Antworten (1)

Da @Chu die Frage nicht beantworten wollte, wie es in den Fragekommentaren zu sehen ist, fühlte ich mich frei, diese zu beantworten, um sie zu beenden.


Das Problem mit der Anpassung ist, dass die inverse Z-Transformation falsch war. Das ist die richtige Transformation:

j ( k ) = A 0 B 3 u ( k + 2 ) + A 1 B 3 u ( k + 1 ) + A 2 B 3 u ( k ) B 0 B 3 j ( k + 3 ) B 1 B 3 j ( k + 2 ) B 2 B 3 j ( k + 1 )

Ergebnis:

Geben Sie hier die Bildbeschreibung ein