2016-03-23 22 views
1

Ich habe versucht, mit dem Befehl ss2tf zu konvertieren, aber das sintax dieses Befehls zeigt, wo die Anzahl der Eingänge des Systems eingeben, aber nicht die Anzahl der Ausgänge. Trotzdem habe ich versucht, meine Matrixübertragungsfunktion mitWie konvertiert man ein 4-Input- und 4-Output-System vom Zustandsraum in eine Transferfunktionsmatrix?

[num,den]=ss2tf(Ac,Bc,Cc,Dc,4) zu erhalten, wobei '4' die Anzahl der Eingänge ist.

Als Ergebnis der Vektor "num" hat 4x9 Dimension und mein Vektor "der" 1x9 Dimension hat, so habe ich einen Fehler mit

F=tf(num,den)

weil "die" sollte 4x9 Dimension aswell haben .

Gibt es also eine andere Möglichkeit, Übertragungsfunktion vom Zustandsraum zu erhalten (mit der Möglichkeit, die Anzahl der Eingänge und Ausgänge zu enthalten)?

obs: die Abmessungen von Ac, Bc, Cc und Dc sind jeweils 8x8; 8x4, 4x8 und 4x4.

edit: herausgefunden, wie es zu lösen ist. Es gibt eine Antwort unten.

Antwort

0

Ich denke, Sie haben die Syntax der Funktion missverstanden. Hier ist, was die documentation sagt:

[b,a] = ss2tf(A,B,C,D) converts a state-space representation of a system into an equivalent transfer function. ss2tf returns the Laplace-transform transfer function for continuous-time systems and the Z-transform transfer function for discrete-time systems. [b,a] = ss2tf(A,B,C,D,ni) returns the transfer function that results when the n ith input of a system with multiple inputs is excited by a unit impulse.

Sie müssen also nicht die Anzahl der Ein-/Ausgänge spezifizieren, werden sie von den jeweiligen Größen des Zustandsraum Matrizen impliziert. Verwenden Sie die erste Syntax und Sie sollten in Ordnung sein.

+0

tatsächlich, kann ich nicht die erste Syntax in diesem Fall verwendet werden, da es zu dem Fehler führt: ‚‘ Fehler mit ss2tf (Zeile 26) IU mit ** mehr als ein Eingang ** für Systeme angegeben werden muss. Fehler in Bode (Zeile 5) [num, den] = ss2tf (Ac, Bc, Cc, Dc); '' – gustavoreche

+0

OK, also dann müssen Sie Ihre Eingaben mit einer 'for' Schleife durchlaufen und eine machen Eingabe zu einem Zeitpunkt mit der zweiten Syntax. Sie werden dann mit "n" Übertragungsfunktionen enden, wobei "n" die Anzahl der Eingänge ist. – am304

1

Wenn das System p Eingänge und Ausgänge q hat, dann ist die Übertragungsfunktion Matrix G(s) hat p Linien und q Spalten. Jedes Element pq von G(s) ist eine SISO-Übertragungsfunktion in Bezug auf entry p und Ausgabe q.

Lassen Sie n die Systemreihenfolge sein. Wenn Sie also [b,a] = ss2tf(A,B,C,D,1) eingeben, erhalten Sie b mit der Dimension qx(n+1) und a mit der Dimension 1x(n+1). Um das Element 1x1 von G(s) zu erhalten, müssen Sie die SISO-Übertragungsfunktion aus der ersten Zeile von b und dem Vektor a beziehen. Analog müssen Sie für das Element 1x2 die Übertragungsfunktion aus der zweiten Zeile von b und dem Vektor a erhalten. Nachdem Sie die Übertragungsfunktionen unter Verwendung aller Zeilen von b erhalten haben, erhalten Sie die erste Zeile G(s).

Für die anderen Zeilen müssen Sie [b,a] = ss2tf(A,B,C,D,2) eingeben (und alle SISO-Übertragungsfunktionen erneut erhalten), dann tun Sie [b,a] = ss2tf(A,B,C,D,3) und so weiter.

Verwendung Matrix Verkettung Schließlich die kompakte Form G(s) zu erhalten, wie:

G_s=[g11 g12 g13 ... g1q;g21 g22 ..g2q; ....;gp1 gp2 .. gpq]

3

Hier ist, wie ich es tun sollte. Der Code ist selbsterklärend.

clear all; 
close all; 
clc; 

% Generate random state-space system 
sys = rss(2,2,2); 

%% Generate transfer function matrix with Matlab tf 
% For each output 
for i = 1:size(sys,1) 

    % For each input 
    for j = 1:size(sys,2) 

     % Get SISO transfer function 
     [num,den] = ss2tf(sys(i,j).A,sys(i,j).B,sys(i,j).C,sys(i,j).D); 

     % Compute tf 
     Gtf(i,j) = tf(num,den); 
    end 
end 

%% Generate transfer function matrix symbolic 
% Laplace variable 
s = sym('s'); 

% For each output 
for i = 1:size(sys,1) 

    % For each input 
    for j = 1:size(sys,2) 

     % Get SISO transfer function 
     [num,den] = ss2tf(sys(i,j).A,sys(i,j).B,sys(i,j).C,sys(i,j).D); 

     % Compute tf 
     Gsym(i,j) = poly2sym(num,s); 
    end 
end 

% Den is the same for all elements 
Gsym = Gsym/poly2sym(den,s); 

% Numeric vectors is transformed to symbolic vector, to make everything 
% readable change the variable precision arithmetic to 4 digits for output 
pretty(vpa(Gsym,4)) 

-Edit- Ich muss sagen, dass ich eigentlich ein bisschen überrascht, dass Matlab diese Funktionalität nicht in der Funktion ss2tf eingebaut hat selbst.

0

Sie müssen tf2ss oder ss2tf nicht verwenden. Sie können einfach

G_s = tf(G); 

direkt von einer Systemdarstellung in die andere konvertieren.