|
|
Monic transfer function -> ARMAX Model? Fkt aufstellen |
|
Breningar |

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.12.2016, 13:38
Titel: Monic transfer function -> ARMAX Model? Fkt aufstellen
|
 |
|
 |
|
Moin,
ich schon wieder Wieder ein Problem bei dem ich nicht ganz durchblicke.
Ich habe die Übertragungsfunktion , theta liefert mir [d1;d2;d3;d4], q ist der backward shift operator. Nach erneutem Quälen von Google bin ich mir recht sicher, dass es sich um eine polynomische monic transfer function handelt.
Möchte ich diese Funktion jetzt in Matlab aufstellen, muss ich das laut Recherche mittels ARMAX tun.
Jetzt habe ich der Dokumentation dazu folgendes entnommen: sys = armax(data,[na nb nc nk])
So hab ich mir also gedacht, dann nehme ich also nun sys = armax(1,[1 0 theta 0])
und bekomm ein Ergebnis von der Art
natürlich dann mit ,
sodass ich am Ende eben habe.
Ja wie ihr euch denken könnt, würde ich nicht schreiben, wenn das so klappen würde. Fehlermeldung:
Zitat: |
The function 'armax' is not supported for standalone code generation. See the documentation for coder.extrinsic to learn how you can use this function in simulation.
Function 'MATLAB Function' (#48.31.56), line 3, column 7:
"armax(1,[1 0 theta_u' 0])"
Launch diagnostic report. |
Jawohl, Sir, denke ich mir und schaue mir coder.extrinsic an. Naja was soll ich als Laie dazu sagen? ¯\_(ツ)_/¯
Ich bin nach der Seite nicht schlauer als vorher und weiß noch immer nicht, wie ich die Übertragungsfunktion mit dem shift operator eingeben kann, um damit eine Funktion zu erhalten, von der ich dann die Nullstellen suchen kann. Ich muss aber auch zugeben, dass ich mir nicht sicher bin, ob ich den mathematisch Hintergrund verstanden habe und nicht daher total in die falsche Richtung renne.
Das kann/sollte nicht so schwer sein, oder? Nur kenne ich den Befehl/Vorgang nicht und/oder weiß ihn nicht korrekt anzuwenden.
LG Bren und wieder mal vielen Dank für jedwede Hilfe.
Zuletzt bearbeitet von Breningar am 15.12.2016, 15:00, insgesamt einmal bearbeitet
|
|
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.12.2016, 14:57
Titel:
|
 |
Also ich habe ja nochmal ein wenig geforscht. Ich bin jetzt ziemlich sicher, dass ich eher in Richtung FIR Filter muss. Und nach dem Bild dort macht der shiftoperator ja auch nix weiter als eben nur den k-1, k-2, usw. als er nimmt eben die älteren Werte. Das war mir ja auch bewusst, nur wie ich das in eine Transferfunktion einbaue...
für
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.12.2016, 15:14
Titel:
|
 |
|
 |
|
oder ist mir das egal und ich nehme die 4 Werte d1 d2 d3 d4 und benutze den roots-Befehl und alles ist wunderbar?
Edit:
Ich bin jetzt soweit, dass ich Folgendes habe mit function handle erreicht habe:
Im Workspace habe ich dann auch D mit dem Wert @(q) 1+d1*q^-1+d2*q^-2+d3*q^-3+d4*q^-4 aber ob das schon sinnvoll ist, bezweifel ich. Jedenfalls kann ich weder fzero noch roots benutzen. Bei beidem kommen Fehler:
Zitat: |
Error using fzero (line 116)
FZERO requires at least two input arguments or a structure
with valid fields.
Error in roots (line 26)
if ~all(isfinite(c))
D = @ 1+d1*q^-1+d2*q^-2+d3*q^-3+d4*q^-4;
↑
Error: Unexpected MATLAB expression.
Undefined function 'isfinite' for input arguments of type
'function_handle'. |
So nächster Test: m-file mit folgendem Code:
Anschließend script mit folgendem:
Ergebnis:
Zitat: |
Not enough input arguments.
Error in Uebertragung (line 7)
D=1+d1*q^-1+d2*q^-2+d3*q^-3+d4*q^-4; |
Not enough input arguments? d1 bis d4 sind ja da, q logischerweise ja nicht?
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 10:56
Titel:
|
 |
|
 |
|
Ich habe jetzt etwas getan, dass ich zuvor vollkommen übersehen habe.
Ich habe aus dem Vektor den Vektor gemacht. Damit habe ich bei immer was je genau das ist, was ich möchte.
Mit ARMAX -> und und müsste ich ja theoretisch auf meine gewünschte Form von kommen.
Soweit so einfach, aber dann kommt wieder eine Fehlermeldung:
Zitat: |
The function 'armax' is not supported for standalone code generation. See the documentation for coder.extrinsic to learn how you can use this function in simulation.
Function 'MATLAB Function' (#525.58.76), line 4, column 7:
"armax(y,[1 4 0 0])"
Launch diagnostic report.
Component:MATLAB Function | Category:Codererror |
Den Fehler kenne ich ja schon, wie ich mit coder.extrinsic allerdings meine Funktion bauen soll/kann, verstehe ich auch trotz Hilfe noch nicht :/
Den nächsten Versuch habe ich mittels symbolic math toolbox und dem Befehl syms probiert:
Das Ergebis von D sieht auch schon ganz gut aus:
Zitat: |
D =
(4139455481704211/147573952589676412928 - 4571613197529301i/147573952589676412928)/q
+ (- 4429287763853055/73786976294838206464 - 3487266574520639i/147573952589676412928)/q^2
+ (- 1520834362902195/73786976294838206464 + 6620743037894597i/590295810358705651712)/q^3
+ (- 3225304858437251/18446744073709551616 - 5031815836333317i/9444732965739290427392)/q^4
+ 1 |
Etwas unübersichtlich, aber ausgerechnet stimmen die Werte wieder. So nur darauf roots oder fzero anzuwenden, will wieder nicht.
Nehme ich roots, kommt zwar keine Fehlermeldung, aber
Zitat: |
y =
Empty sym: 0-by-1 |
Nehme ich fzero (fzero(D,0) oder fzero(D,0.1) oder fzero(D,[-1 0])) kommt immer der Fehler
Zitat: |
Error using fzero (line 176)
If FUN is a MATLAB object, it must have an feval method. |
Ich verstehe nicht ganz den Zusammenhang zwischen meiner Geschichte und feval.
Oder ist es am Ende doch so einfach, dass mir q dort nur sagt, dass ich den vorherigen Wert jeweils nehmen soll? Also roots([1 d1(k-1) d2(k-2) d3(k-3) d4(k-4)]);
|
|
|
Breningar |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 40
|
 |
|
 |
Anmeldedatum: 04.11.16
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.12.2016, 14:20
Titel:
|
 |
ich würde das Ganze gerne nochmal ein bisschen pushen. Hat keiner irgendwie eine Vorstellung wie oder in welche Richtung ich denken muss? Irgendeinen Ideenanstoß?
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|