Základní pravidla MATLABu Formát čísel:
Matlab má několik možných formátů zobrazování čísel. Pro všechny formáty napíšeme HELP FORMAT. Zde jsou nejpoužívanější: FORMAT základní nastavení, stejné jako short FORMAT SHORT číslo s pěti místy za desetinnou čárkou FORMAT LONG číslo s patnácti místy za desetinnou čárkou FORMAT SHORT E číslo s pohyblivou des. čárkou a exponentem, 5 míst za des. čárkou FORMAT LONG E číslo s pohyblivou des. čárkou a exponentem, 15 místy za des. čárkou
Pro případ, že se nám příkaz, který chceme zadat, nevejde na řádek, můžeme ho zapsat na dva řádky, přičemž za část příkazu na prvním řádku napíšeme tři tečky, stiskneme ENTER a na další řádek dopíšeme zbytek příkazu. Př: x = [1 5 6 7 1 3 … 5 1 6] Dvojtečka: Vytvoření dlouhých polí lze usnadnit použitím dvojtečky ":". Standardní přírůstek je 1. Pokud chceme jiný přírůstek napíšeme X = 0.1: 0.15: 1.5, což znamená od 0.1 do 1.5 s přírůstkem 0.15 Př.1: Chceme vytvořit posloupnost čísel, která bude vypadat stejně jako na obrázku, a to ve vzdálenosti 1. X (1:1:5) = 0; X (6:1:15) = 1; X (16:1:25) = 2; Z = (0.1:0.1:2); pro klesání si vytvoříme rostoucí posloupnost čísel X (26:1:45) = (2 – Z); posloupnost odečteme od maxima. STEM (X) Pro vykreslení posloupnosti X použijeme příkaz STEM Výsledek:
Středník: Středník ";" použitý za příkazem způsobí, že se potlačí výpis hodnot. Čárka: Na jeden řádek můžeme umístit více příkazů. Musí být však odděleny čárkou, popřípadě středníkem. Středník nám potlačí výpis, zatímco čárka ne.
1
Proměnné a matice: Každá proměnná v Matlabu je brána jako matice, přestože má rozměr 1x1. Dimenzování ani deklarování typu se u Matlabu nepoužívá, protože sám Matlab si toto dělá automaticky. Index v Matlabu u matic začíná vždy od jedničky a ne od nuly! Jednotlivé prvky se zapisují řádkovým a sloupcovým indexem. Např. A(1,2) je prvek na prvním řádku a ve druhém sloupci. Dvojtečka je také používána pro označení celého rozsahu hodnot. Proto když napíšeme A(2,:) Matlab nám vypíše celý druhý řádek. Komplexní čísla: Proměnné v Matlabu nemusí být pouze reálné, ale mohou být také komplexní. Pro imaginární část se používají symboly i a j. Zadávají se pak ve formátu např.: c = 2 + 6i. Vypsání jednotlivých částí takovéhoto čísla se provádí: C_re = real(c), C_im = imag(c) Pro absolutní hodnotu a úhel použijeme příkazy: C_abs = abs(c), C_uhel_rad = angle(c) Pozn.: Úhel je udáván v radiánech. Převod na stupně umožní výpočet C_uhel_deg = C_uhel_rad*180/pi. Zaokrouhlování čísel: Příkaz ROUND (X) zaokrouhlí X směrem k nejbližšímu celému číslu (klasické zaokrouhlování). Příkaz FIX (X) odřízne desetinnou část. Příkaz FLOOR (X) „zaokrouhlí“ X směrem k nižšímu celému číslu Příkaz CEIL (X) „zaokrouhlí“ X směrem k vyššímu celému číslu Zjištění Minima a Maxima sloupce: Příkazy MIN (X), MAX(X) vrací hodnotu minima resp. maxima z každého sloupce matice X
Otevřít Matlab Základní příkazy MATLABu close name close all
- uzavře námi požadovanou aktivní „figuru“ - graf - uzavře všechna okna kromě „MATLAB Editor/Dubugger“
dir
- vypíše obsah aktuálního adresáře – obdobně jako DOS
path
- vypíše všechny přístupné adresáře
what
- vypíše jednotlivé soubory Matlabu podle typu (resp. přípony) z aktuálního adresáře M-files in the current directory D:\Projekt MAT-files in the current directory D:\Projekt MDL-files in the current directory D:\Projekt
type
- vypíše obsah souboru s příponou M, bez otevření MATLAB Editor /Debugger
who whos
- vypíše nám na obrazovky veškeré proměnné, které jsou momentálně zadány do Matlabu - stejný výpis jako who, jen s tím rozdílem, že nám Matlab vypíše nejen názvy proměnných, ale také jejich velikost (Size), počet bytů alokovaných pro dané pole dané proměnné (Bytes) a jejich typ (Class) - otevře Workspace Browser, který nám podává stejné informace jako whos. Rozdíl je v tom, že nám umožňuje jednotlivé proměnné pohodlně vymazávat, nebo si tyto proměnné otevřít v MATLAB Editor/Debuggeru, který nám zobrazí jejich hodnoty a kde můžeme tyto hodnoty velmi jednoduše přepisovat a měnit samotnou velikost proměnné (prodloužit, zkrátit, přidat sloupce,…). Pokud v Workspace Browseru dvakrát klikneme pomalu na nějakou proměnnou, můžeme změnit také její název.
workspace
2
edit - tento příkaz nám otevře MATLAB Editor /Debugger edit name - nám otevře MATLAB Editor /Debugger se zadaným souborem Pokud chceme smazat nějakou proměnou nebo pokud chceme smazat všechny proměnné, použijeme příkaz CLEAR clear name - kde name představuje název proměnné clear all - smaže všechny proměnné clc
- vymaže obrazovku v Matlabu (Clear Command Window)
clf
- pokud máme otevřený nějaký graf a chceme ho vymazat, použijeme příkazu clf (Clear current figure window) vymaže aktuální „figuru“
echo on/off
Pokud nechceme vypisovat při spouštění M-souboru, co nám který řádek provádí, napíšeme na konec středník. Pokud později chceme vypisovat veškeré řádky včetně jejich příkazů, použijeme příkaz echo on. Tento příkaz nám začne vypisovat nejen řádky se středníkem na konci, ale také informační řádky (před ty se na začátek řádku dává znak %). Pro vypnutí tohoto zobrazování máme funkci echo off.
size
- tento příkaz nám slouží ke zjištění velikosti, kde první číslo z výsledku znamená počet řádků a druhé číslo počet sloupců.
length
- příkaz LENGTH nám vrací délku proměnné a to délku která je „větší“, což znamená, že pokud máme matici M x N, kde M > N, tak nám vrací hodnotu M. Jinak se dá říci, že příkaz LENGTH nám vrací „větší“ hodnotu z příkazu SIZE.
input
- při programování v M-souborech se používá INPUT pro načtení proměnné z klávesnice. - použití: A = input (‘zde napis hodnotu promenne A: ’)
disp
- při programování v M-souborech se tento příkaz používá, pokud chceme vypsat nějakou hlášku uživateli na obrazovku. - použití: disp(‘Toto je text, ktery vam chci sdelit.’)
pause (n)
- příkaz pro pozdržení dalších výpočtů, kde n představuje čas v sekundách, na který se výpočet zastaví. Pokud napíšeme PAUSE – bez udání času, Matlab bude čekat na stisk libovolné klávesy.
Otevřít Matlab Zadání aktuálních cest Pro práci se soubory je nutno se naučit používat nastavování cest. K tomu nám slouží buďto zadání cesty stejně jako v DOSu (příkaz CD), nebo můžeme použít v menu Matlabu „File“ - „Set Path…“, kde se můžeme podívat jak na aktuální adresář, tak na všechny adresáře, do kterých máme přímý přístup. Do tohoto seznamu si můžeme přidat také svoje cesty (ikona Add to path). Current Directory nám ukazuje aktuální adresář, jenž můžeme změnit pomocí ikony Browse… Pro vypsání aktuální cesty přímo z Matlabu použijeme funkci PWD.
Otevřít Matlab Uložení souboru Pro uložení souboru nám slouží funkce save ve tvarech: 1) save 2) save filename 3
3) save filename variables 4) save filename options 5) save filename variables options 1) Při použití tohoto výrazu nám Matlab uloží veškeré proměnné, které jsme použili od chvíle, kdy jsme naposled použili příkaz CLEAR ALL do souboru „matlab.mat“ v aktuálním adresáři. 2) dtto bod 1) jen s tím rozdílem, že proměnné uloží do námi zvoleného souboru v aktuálním adresáři. 3) Uloží do námi zvoleného souboru v aktuálním adresáři zvolené proměnné (ty musí být ovšem definovány) 4) dtto bod 2) pouze můžeme zvolit, v jakém tvaru se bude soubor ukládat 5) dtto bod 3) pouze můžeme zvolit, v jakém tvaru se bude soubor ukládat v bodě 1) až 3) se bude soubor ukládat ve tvaru –mat options:
Př2:
-ascii -ascii –double -ascii –tabs -ascii -double –tabs -V4 -append
uloží v 8-číselném ASCII formátu uloží v 16-číselném ASCII formátu uloží v 8-číselném ASCII formátu, tabelátorem oddělené uloží v 16-číselném ASCII formátu, tabelátorem oddělené uloží ve formátu Matlabu verze 4.0 uloží na konec souboru (pouze pro soubory typu –mat)
c = [0 0 0 0 1 5 6 7 4 1 6 5 4 6 9 7 1 3 2 5 4 6 8 4 4 6 5 6 7 5 6 9 1 3 5]; d = [0; 0; 0; 0; 1; 5; 6; 7; 4; 1; 6; 5; 4; 6; 9; 7; 1; 3; 2; 5; 4; 6; 8; 4; 4; 6; 5; 6; 7; 5; 6; 9; 1; 3; 5]; e = [0 0; 0 0; 1 5; 6 7; 4 1; 6 4; 6 9; 5 7; 1 3; 2 5; 4 6]; save promenne.mat c d save promenne.mat e –append
nebo save promenne.txt c d e –ascii –tabs
… pozor - takto uložený soubor nepůjde již v Matlabu otevřít!!!
save promenne.txt c d e –ascii –tabs –double
… pozor - takto uložený soubor nepůjde již v Matlabu otevřít!!!
nebo
Otevřít Matlab Otevření souboru Pro otevření souboru nám slouží funkce load ve tvarech: 1) load 2) load filename 3) load ('filename') 4) load filename -ascii 5) load filename –mat 1) Při použití tohoto výrazu Matlab otevře soubor „matlab.mat“ v aktuálním adresáři, pokud existuje. 2) Matlab nám otevře zadaný soubor za předpokladu, že byl vytvořen a uložen z Matlabu, s příponou *.mat 3) Řeší nám tentýž problém, pouze se zde dá zadat kompletní cesta k souboru, opět se musí jednat o soubor vytvořený v Matlabu, s příponou *.mat 4) Otevře soubor typu ascii. Pokud již máme zadán soubor pouze s vytvořenými čísly, musíme tento soubor otevřít ve tvaru ascii. To znamená, že tento soubor nebude vytvářen v Matlabu. Název proměnné, do které se nám soubor otevře, je shodný s názvem souboru. 5) Otevře soubor typu .mat, což označuje soubory vytvořené a uložené v Matlabu. Př3: nebo
load promene –mat load (’d:\Work\Matlab\promene.mat’)
Otevřít Matlab 4
Operace s maticemi Některé důležité matice v MATLABu: Z = zeros (5,3) je matice 5x3, kde všechny prvky jsou rovny nule O = ones (3,3) je matice 3x3, kde všechny prvky jsou rovny jedné E = eye (3) je jednotková matice 3x3. Operace s maticemi jsou v Matlabu dobře propracovány, ale při jejich používání může vzniknout řada chyb, a proto je třeba při jejich používání dávat velký pozor! Pro lepší pochopení si vysvětlíme jejich použití na dvou maticích A a B. A = [1 2; 5 6] B = [3 4; 2 1] Transpozice matice: Pro transpozici se používá znak apostrofu ('). Pozn.: U matic s komplexními čísly použití symbolu ' vytvoří matici transponovanou s prvky komplexně sdruženými. Př.: C = [2+i -1+5i; 6 4+3i] D = C’ povšimněte si znamének u imaginární části Pokud bychom chtěli provést pouze transpozici bez sdružení, musíme použít symbol .' (tečka apostrof) Sčítání a odčítání: Tyto operace jsou vykonávány běžným způsobem, tzn. prvek po prvku. Př: A + B Pokud chceme ke každému prvku matice přičíst (resp. odečíst) stejné číslo, můžeme tuto operaci zapsat takto: A+6 Podmínkou sčítání a odčítání matic je, že matice musí mít stejný rozměr, jinak Matlab hlásí chybu! Násobení: operace A .* B (tečka hvězdička) představuje násobení příslušných prvků matic. Matice a, b musí mít stejný rozměr, nebo jedna z nich musí být skalár. Skutečný maticový součin se zapíše jako A * B, musí ovšem platit, že počet sloupců matice A musí souhlasit s počtem řádků matice B. Dělení: Dělení jednotlivých prvků matic se označuje A ./ B (tečka lomítko) Operace A / B není již tak úplně zřejmá na pochopení. Navíc existuje tzv. levé dělení ( \ ) a pravé dělení ( /). Levé dělení A \ B. Jestliže A je čtvercová matice, je A \ B ve výsledku totéž jako inv(A) * B. Pravé dělení A / B = B * inv(A) Exponenciální operace: Opět existuje prvková ( .^ ) a maticová ( ^ ). Dále máme možnost použít funkce SQRT a EXP, které pracují běžným způsobem s prvky matic.
Otevřít Matlab Simulink Dále bych rád na tomot místě zmínil několik poznámek o převodu mezi simulinkem a wokspacem. Pokud máme v MATLABu zadaný nějakou proměnou, můžeme ji využít také v Simulinku a to tak, že do potřebného bloku místo konkrétních čísel zapíšeme název proměnné. Pro obrácený postup nám slouží blok „To Workspace“. Do tohoto bloku můžeme zavést jakoukoliv výstupní veličinu. Ale pozor je potřeba v tomto bloku nastavit v jakém formátu se bude proměnná (Variable name) ukládat (Save format), je potřeba tuto položku nastavit jako „Matrix“ . 5
Zadávání pomocí Obrazového přenosu Definice:
kde:
Jako Laplaceův obraz výstupní veličiny ku Laplaceově obrazu vstupní veličiny při nulových počátečních podmínkách zleva. bm .s m + ... + b1 .s + b0 B(s) = F ( s) = A( s ) s r . a n .s n + ... + a1 .s + a 0 r je řád astatismu n + r je řád soustavy
(
)
V Matlabu se pro vypsání Obrazového přenosu používá funkce TF (transfer function). Zadává se pomocí čitatele B(s) a jmenovatele A(s). Musí se zadat zvlášť čitatel do určité proměnné, například do B, a to ve tvaru B = b , bn−1 ,...., b1 , b0 a zvlášť jmenovatel do jiné proměnné, např. A, a to ve tvaru A = [a m , a m −1 ,...., a1 , a0 ] Zadání se provádí: SYS = TF (Bs, As)
[
Př4:
]
Bs = [1, 2]; As = [1, 2, 1]; SYS = TF (Bs, As)
Výsledek:
Transfer function:
s+2 s^2 + 2s + 1
Otevřít Matlab Pozn:
V Matlabu se zpravidla používá místo Bs - NUM a místo As - DEN. SYS je námi zvolená proměnná, v Matlabu se využívá SYS jako zkratka SYSTEM. Proto se s ní v různých obměnách setkáme v celém Matlabu a i v souvislosti s jeho funkcemi. Při zápisu je možno používat jak malá tak velká písmena, ale pokud již použijeme pro nějakou proměnnou malé či velké písmo, musíme ho dále využívat tak, jak jsme již začali.
Převod Obrazového přenosu na Póly, Nuly a Časovou konstantu Definice:
Polynom ve jmenovateli obrazového přenosu se nazývá charakteristický polynom a jeho kořeny se nazývají póly - P systému. Kořeny v čitateli se nazývají jako nuly - N dynamického systému. Časová konstanta - K je podíl vyjádřených hodnot bm, an F ( s) =
B( s ) bm .(s − s1b )( . s − s2b ).....(s − smb ) = r ; A( s ) s .an (s − s1 )( . s − s2 )......(s − sn )
K=
bm an
V Matlabu se k vypsání pólů (P), nul (N) a časové konstanty (K) se používá funkce TF2ZP - převod "transfer function to zero-pole". Zadání se provádí: [N, P, K] = TF2ZP(Bs, As) Pokud chceme vypsat pouze nuly, póly nebo zesílení, použijeme funkce: POLE, ZERO, DCGAIN Zadání se provádí: P = POLE (SYS) N = ZERO (SYS) K = DCGAIN (SYS) Př5:
Bs = [1, 2]; As = [1, 2, 1]; [N, P, K] = TF2ZP(Bs, As)
Výsledek:
N = -2 5
P = -1 -1 K = 1
Otevřít Matlab Pozn:
V Matlabu se zpravidla používá místo proměnné N proměnná Z (Zero)
Převod Obrazového přenosu na Stavový popis Stavový popis je definován ve tvaru: • dx = Ax + Bu x= dt y = Cx + Du Pro tuto operaci se v Matlabu používá funkce TF2SS "transfer function to state-space". Zadání se provádí: [A,B,C,D] = TF2SS (B,A) Př6:
Bs = [1, 2]; As= [1, 2, 1]; [A,B,C,D] = TF2SS (Bs, As)
nebo: [A,B,C,D] = TF2SS ([1, 2], [1, 2, 1]) Výsledek:
A = -2 1
-1 0
B = 1 0 C = 1
2
D = 0
Otevřít Matlab Obrazový přenos – identifikace dat b .s m + ... + b1 .s + b0 B(s) = r m n A( s ) s . a n .s + ... + a1 .s + a0 Pokud máme již zadán obrazový přenos nebo převedeme jiný způsob na obrazový přenos a potřebujeme zjistit, jaké jsou v Obrazovém přenosu zadané hodnoty, můžeme použít funkci TFDATA. Zadání se provádí: [Bs, As] = TFDATA (sys, ‘v’) nebo [Bs, As] = TFDATA (sys) Pokud vynecháme ‘v’, Matlab nám vypíše pouze velikost matice. F ( s) =
Př7:
(
)
SYS = TF([1 2],[1 2 1]) [Bs, As] = TFDATA (SYS, ’v’) [Bs, As] = TFDATA (SYS)
Výsledek:
Transfer function: s+2 s^2 + 2s + 1 6
Bs = 0
1
2
As = 1 2 1 Bs = [1x3 double] As = [1x3 double]
=> matice o jednom řádku a třech sloupcích
Otevřít Matlab Pozn.:
Pokud vynecháme ‘v’, Matlab nám vypíše pouze velikost matice. Můžeme též vypisovat pouze polynom Bs nebo As, potom zadáme pouze to, co chceme zobrazit.
Zadávání pomocí Pólů, Nul a Časové konstanty Definice:
Polynom ve jmenovateli obrazového přenosu se nazývá charakteristický polynom a jeho kořeny se nazývají póly - P systému. Kořeny v čitateli se nazývají jako nuly - N dynamického systému. Časová konstanta - K je podíl vyjádřených hodnot bm, an F ( s) =
B( s ) bm .(s − s1b )( . s − s2b ).....(s − smb ) = r ; A( s ) s .an (s − s1 )( . s − s2 )......(s − sn )
K=
bm an
Zadání se provádí: SYS = ZPK (N, P, K) Př8:
N = [-2]; P = [-1; -1]; K = [1]; SYS = ZPK (N, P, K)
Výsledek:
Zero/pole/gain:
(s + 2) (s + 1)^ 2
Otevřít Matlab Pozn:
V Matlabu se zpravidla používá místo proměnné N proměnná Z (Zero)
Převod Nul, Pólů a Časové konstanty na Stavový popis Stavový popis je definován ve tvaru: • dx = Ax + Bu x= dt y = Cx + Du Pro tuto operaci se v Matlabu používá funkce ZP2SS „Zero-pole to state-space“. Zadání se provádí: [A,B,C,D] = ZP2SS (N, P, K) Př9:
N = [-2]; P = [-1; -1]; K = [1]; [A,B,C,D] = ZP2SS (N, P, K)
nebo: [A,B,C,D] = ZP2SS ([-2], [-1; -1],[1]) 7
Otevřít Matlab Pozn:
V Matlabu se zpravidla používá místo proměnné N proměnná Z (Zero)
Převod Nul, Pólů a Časové kosntanty na Obrazový přenos Obrazový přenos se definuje jako Laplaceův obraz výstupní veličiny ku Laplaceově obrazu vstupní veličiny při nulových počátečních podmínkách zleva. b .s m + ... + b1 .s + b0 B(s) = r m n F ( s) = A( s ) s . a n .s + ... + a1 .s + a0 kde: r je řád astatismu n + r je řád soustavy
(
)
Pro tuto operaci se v Matlabu používá funkce ZP2TF „Zero-pole to transfer function“. Zadání se provádí: [NUM, DEN] = ZP2TF (N, P, K) Př10: N = [-2]; P = [-1; -1]; K = [1]; [NUM, DEN] = ZP2TF (N, P, K) nebo: [NUM, DEN] = ZP2TF ([-2], [-1; -1],[1])
Otevřít Matlab Pozn:
V Matlabu se zpravidla používá místo proměnné N proměnná Z (Zero)
Zadávání pomocí Stavového popisu Stavový popis je definován ve tvaru: • dx = Ax + Bu x= dt y = Cx + Du Zadání se provádí: SYS = SS (A, B, C, D) Př11: A= [-2, –1; 1, 0]; B = [1; 0]; C = [1, 2]; D = [0]; SYS = SS (A, B, C, D) Výsledek:
a = x1 x2
x1 -2 1
x1 x2
u1 1 0
x2 -1 0
b =
8
c = y1
x1 1
y1
u1 0
x2 2
d =
Continuous-time system.
Otevřít Matlab Převod Stavového popisu na Nuly, Póly a Časovou konstantu Definice:
Polynom ve jmenovateli obrazového přenosu se nazývá charakteristický polynom a jeho kořeny se nazývají póly - P systému. Kořeny v čitateli se nazývají jako nuly - N dynamického systému. Časová konstanta - K je podíl vyjádřených hodnot bm, an F ( s) =
B( s ) bm .(s − s1b )( . s − s2b ).....(s − smb ) = r ; A( s ) s .an (s − s1 )( . s − s2 )......(s − sn )
K=
bm an
Pro tuto operaci se v Matlabu používá funkce SS2ZP „State-space to Zero-pole“. Zadání se provádí: [N, P, K] = SS2ZP (A, B, C, D) Př12: A= [-2, –1; 1, 0]; B = [1; 0]; C = [1, 2]; D = [0]; [N, P, K] = SS2ZP (A, B, C, D)
Otevřít Matlab Převod Stavového popisu na Obrazový přenos Obrazový přenos se definuje jako Laplaceův obraz výstupní veličiny ku Laplaceově obrazu vstupní veličiny při nulových počátečních podmínkách zleva. b .s m + ... + b1 .s + b0 B(s) = r m n F ( s) = A( s ) s . a n .s + ... + a1 .s + a0 kde: r je řád astatismu n + r je řád soustavy
(
)
Pro tuto operaci se v Matlabu používá funkce SS2TF „Zero-pole to transfer function“. Zadání se provádí: [NUM, DEN] = SS2TF (A, B, C, D) Př13: A= [-2, –1; 1, 0]; B = [1; 0]; C = [1, 2]; D = [0]; [NUM, DEN] = SS2TF (A, B, C, D) nebo: [NUM, DEN] = SS2TF ([-2, -1; 1, 0], [1; 0],[1, 2],[0])
Otevřít Matlab 9
Nastavení parametrů Obrazového přenosu, Stavového popisu a nul, pólů a konstanty zesílení Matlab nám umožňuje též měnit nejen nastavení základních parametrů, ale také mnoho dalších (např. vstupní zpoždění, výstupní zpoždění, název vstupní proměnné, název výstupní proměnné, … atd.). K těmto hodnotám nám umožní nejjednodušší přístup funkce GET a SET, kde pomocí funkce GET zjišťujeme již zadané informace. A pomocí funkce SET tyto hodnoty měníme. V těchto funkcích je mnoho informací, ale my můžeme využít pouze ty, které chceme. Zadání se provádí:
get (TF) get (SS) get (ZPK)
Výsledek:
num: den: Variable: Ts: InputDelay: OutputDelay: ioDelayMatrix: InputName: OutputName: InputGroup: OutputGroup: Notes: UserData:
{} {} 's' 0 [0x1 [0x1 [] {0x1 {0x1 {0x2 {0x2 {} []
double] double] cell} cell} cell} cell}
Polynom As Polynom Bs Proměnná (s, p, z, z^-1, q) Vzorkovací čas Vstupní zpoždění Výstupní zpoždění Vstupní/Výstupní matice zpoždění Jméno vstupní veličiny Jméno výstupní veličiny Vstupní skupina Výstupní skupina Popis, poznámky Uživatelská data, která mohou být libovolná
a: [] b: [] c: [] d: [] e: [] StateName: {0x1 cell} Ts: 0 InputDelay: [0x1 double] OutputDelay: [0x1 double] ioDelayMatrix: [] InputName: {0x1 cell} OutputName: {0x1 cell} InputGroup: {0x2 cell} OutputGroup: {0x2 cell} Notes: {} UserData: []
Matice A Matice B Matice C Matice D Matice E Jméno Stavového popisu Vzorkovací čas Vstupní zpoždění Výstupní zpoždění Vstupní/Výstupní matice zpoždění Jméno vstupní veličiny Jméno výstupní veličiny Vstupní skupina Výstupní skupina Popis, poznámky Uživatelská data, která mohou být libovolná
z: p: k: Variable: Ts: InputDelay: OutputDelay: ioDelayMatrix: InputName: OutputName: InputGroup: OutputGroup: Notes: UserData:
Hodnoty nul Hodnoty pólů Hodnota konstanty zesílení Proměnná (s, p, z, z^-1, q) Vzorkovací čas Vstupní zpoždění Výstupní zpoždění Vstupní/Výstupní matice zpoždění Jméno vstupní veličiny Jméno výstupní veličiny Vstupní skupina Výstupní skupina Popis, poznámky Uživatelská data, která mohou být libovolná
{} {} [] 's' 0 [0x1 [0x1 [] {0x1 {0x1 {0x2 {0x2 {} []
double] double] cell} cell} cell} cell}
Pro změnu některé z uvedených položek se použije funkce SET. Musíme si však nejprve zavést SYS1, SYS2, SYS3, postupně Obrazový přenos, Stavový popis, Nuly, póly a konstantu zesílení. 10
Zadání se provádí: set (SYS1, ‘Properties’, Value) set (SYS2, ‘Properties’, Value) set (SYS3, ‘Properties’, Value)
Kde Properties je hodnota, kterou chceme měnit
Př14: Bs = [1, 2]; As = [1, 2, 1]; SYS1 = TF (Bs, As) set (SYS1, ‘Variable’, ‘p’); SYS1 A= [-2, –1; 1, 0]; B = [1; 0]; C = [1, 2]; D = [0]; SYS2 = SS (A, B, C, D); set (SYS2, ‘InputDelay’, 1.5) set (SYS2, ‘OutputDelay’, 2) SYS2 N = [-2]; P = [-1; -1]; K = [1]; SYS3 = ZPK (N, P, K) set (SYS3, ‘InputName’, ‘u(t)’) set (SYS3, ‘OutputName’, ‘y(t)’) SYS3 Výsledek:
Transfer function:
s+2 s^2 + 2s + 1 Transfer function:
p+2 p^2 + 2 p + 1
a = x1 x2
x1 -2 1
x1 x2
u1 1 0
y1
x1 1
y1
u1 0
x2 -1 0
b =
c = x2 2
d =
Input delays (listed by channel): 1.5 Output delays (listed by channel): 2 Continuous-time model. Zero/pole/gain:
(s + 2) (s + 1)^ 2
11
Zero/pole/gain from input "u(t)" to output "y(t)":
(s + 2) (s + 1)^ 2
Otevřít Matlab Pozn.:
Zde je ukázáno jen velice malé množství možností nastavení. U všech tří přenosů se dají měnit veškeré položky výše uvedené. Pomocí funkce SET se dají nastavit i konkrétní hodnoty přenosu.
Dopravní zpoždění Pokud máme zavedený určitý přenos a v něm zadáno vstupní dopravní zpoždění nebo výstupní dopravní zpoždění či oboje a potřebujeme zjistit celkové dopravní zpoždění, použijeme příkaz TOTALDELAY. K nastavení zpoždění je nejlepší použít funkci SET (popsanou dříve). Zadání se provádí: TOTALDELAY (SYS) Př15: Bs = [1, 2]; As = [1, 2, 1]; SYS = TF (Bs, As); set (SYS, ‘InputDelay’, 1.5) set (SYS, ‘OutputDelay’, 2) SYS TOTALDELAY (SYS) Výsledek:
Transfer function:
exp(− 3.5 * s )*
s+2 s^2 + 2s + 1
ans = 3.5000
Otevřít Matlab Generování spojitého systému Pro generování spojitého systému nám jako základ slouží rovnice: 1 1 h( s ) = 2 kde ω n = … přirozená úhlová frekvence (wn) 2 Tn s + 2ζω n s + ω n
ζ … poměrné tlumení 0,1 (z) Pro získání obrazového přenosu nebo stavového popisu z konstant ζ a ω n nám slouží funkce ORD2 Zadání se provádí: [Bs, As] = ORD2(wn,z) [A,B,C,D] = ORD2(wn,z) Př16: [Bs, As] = ORD2 (0.4, 2.4) [A,B,C,D] = ORD2 (0.4, 2.4) Výsledek:
Z toho vyplývá ω n = 2,4 rad / sec; ζ = 0,4
Bs = 1 As = 1.0000
1.9200
0.1600 12
A = 0 -0.1600
1.0000 -1.9200
B = 0 1 C = 1
0
D = 0
Otevřít Matlab Rozklad na parciální zlomky Rozklad polynomu na parciální zlomky se provádí pomocí limitních vztahů. A je definován takto: b .s m + ... + b1 .s + b0 B(s) F ( s) = = r m n A( s ) s . a n .s + ... + a1 .s + a0 r r r B(s ) F ( s) = = 1 + 2 + ... + n + k ( s ) A( s ) s − p1 s − p 2 s − pn Pro tuto operaci se v Matlabu používá funkce RESIDUE. Musíme však znát některé podmínky rozkladu na parciální zlomky, a to ty, že pokud máme n-násobné kořeny, tak se v rozkladu zobrazí nejen samotný kořen, ale též kořen na druhou až na n-násobnost kořene. Zadání se provádí: [R, P, K] = RESIDUE (Bs, As)
(
)
Př17: Bs = [1, 2]; As= [1, 2, 1]; [R, P, K] = RESIDUE (Bs, As) Výsledek:
R = 1 1 P = -1 -1 K = []
Z čehož vyplývá, že K = 0. Pro tento příklad (jehož polynom je vícenásobný) je výsledek ve tvaru: B(s ) 1 1 F ( s) = = + +0 A( s ) s + 1 (s + 1)2
Otevřít Matlab Pozn.:
Při rozkladu se musí dát na výše uvedené skutečnosti bedlivý pozor, protože v případě opominutí již výsledek neodpovídá zadanému polynomu.
Výpočet kořenů polynomu Jestliže máme přechodovou funkci a vyjádříme z ní charakteristickou rovnici, můžeme pomocí funkce ROOTS zjistit její kořeny. b .s m + ... + b1 .s + b0 B(s) F ( s) = = r m n A( s ) s . a n .s + ... + a1 .s + a0
(
(
Ch.r. s r . a n .s n + ... + a1 .s + a 0
)
)
13
Zadání se provádí: K = ROOTS (As) Př18: As = [1, 2, 1]; K = ROOTS (As) Výsledek:
K = -1 -1
Z čehož vyplývá, že kořeny jsou s1 = −1; s 2 = −1 . ⇒ (s + 1)(s + 1)
Otevřít Matlab Vypsání pólů a nul v komplexní rovině Vypsání pólů a nul se dá také vyjádřit v komplexní rovině, tzn na Imaginární a Reálné ose. Pro tuto operaci existuje v Matlabu funkce PZMAP (PoleZeroMap). K jejímu vyjádření použijeme již dříve získanou proměnnou SYS. Zadání se provádí: PZMAP = (SYS) Př19: Bs = [1, 2]; As = [1, 2, 1]; SYS = TF (Bs, As); PZMAP(SYS) Výsledek:
Otevřít Matlab Pozn.:
Nuly se zobrazí jako kolečka a póly jako křížky. 14
Vypsání frekvenční charakteristiky v komplexní rovině Definice:
Frekvenční charakteristiku dostaneme, jestliže dosadíme v přenosové funkci F ( s ) = F (iω ) . Y (iω ) F (iω ) = = F ( s ) s −iω U (iω )
F (iω ) = Re{F (iω )}+ i Im{F (iω )}
Matlab neumí převést Obrazový přenos teoreticky, pouze nám ho umožňuje zobrazit graficky pomocí funkce NYQUIST. Zadání se provádí: NYQUIST (SYS) Př20: Bs = [1, 2]; As= [1, 2, 1]; SYS = TF (Bs, As); NYQUIST (SYS) Výsledek:
Otevřít Matlab Pozn:
Matlab vykreslí směr frekvenční charakteristiky.
Logaritmicko amplitudová a fázová charakteristika F (iω ) = F ( s ) s =( iω ) = F (iω ) . exp iϕ (ω ) F (iω ) dB = 20. log F (iω ) 15
K této operaci nám v Matlabu slouží funkce BODE, která nám opět pouze vykreslí Logaritmicko amplitudovou a fázovou charakteristiku. Zadání se provádí: BODE (SYS) Př21: Bs = [1, 2]; As= [1, 2, 1]; SYS = TF (Bs, As); BODE (SYS) Výsledek:
Otevřít Matlab Pozn:
V otevřeném okně se nahoře vykreslí Logaritmicko amplitudová charakteristika a dole je Logaritmicko fázová charakteristika.
Klasická přechodová funkce Přechodová funkce h(t) je reakce dynamického systému na budící funkci ve tvaru jednotkového skoku při nulových počátečních podmínkách zleva. • 1 H ( s ) = F ( s ). ; h(t ) = H ( s ) • s Pro získání klasické přechodové funkce h(t) použijeme funkci ILAPLACE “Inverzní Laplaceova funkce“ z funkce H(s). Pro vykreslení přechodové fce použijeme funkci STEP - čili odezvu obrazového přenosu na jednotkový skok s počátečními podmínkami rovnými nule (p.p.=0) zleva. Pokud chceme znát konkrétní hodnoty v závislosti na čase, použijeme přiřazení dle příkladu.
16
Zadání se provádí: ILAPLACE ( „Přenosová funkce“*1/s ) STEP (SYS) [x, t] = STEP (SYS) Numerické_Vyjádření = [x, t] Při zadávání můžeme napsat za SYS dobu simulace, po kterou se budou vypočítávat hodnoty. Pak se zadání provádí: STEP (SYS, T) kde T je čas simulace [x, t]= STEP (SYS, T) Př22: Bs = [1, 2]; As= [1, 2, 1]; SYS = TF (Bs, As); SYMS s t; ILAPLACE ((s + 2)/(s^2 + 2*s + 1)*1/s) STEP (SYS) [x, t]= STEP (SYS); Numericke_Vyjadreni = [x, t] Výsledek:
ans
Tato funkce nám udává, že budeme pracovat s neurčitými proměnnými Toto jsou čísla, která získáme z přenosové funkce TF
= -t*exp(-t)-2*exp(-t)+2
Numerické_Vyjádření = 0 0.1277 0.2535 0.3153 0.5519 0.6079 0.8179 0.9139 1.1663
0 0.1280 0.2560 0.3200 0.5760 0.6400 0.8960 1.0240 1.4080 17
Otevřít Matlab Pozn:
Pro fci ILAPLACE musíme bohužel zadávat výsledky jednoho z mezikroků (viz Přík). Pokud chceme pro fci STEP zadat konkrétní barvu, dáme do apostrofů počáteční písmeno této barvy tj. r, g, b, y = red, green, blue, yelow. V případě, že tento parametr nezadáme, bude brán automaticky podle MATLABu.
Impulzní (váhová) přechodová funkce Definice:
Derivace Přechodové funkce. Je reakce dynamického systému na budící funkci ve tvaru Dirackova pulsu U ( A) = δ ( A) při nulových počátečních podmínkách zleva. g (t ) =
h(t ) ; dt
•
g (t ) = G ( s ) ; •
G ( s ) = F ( s ).1
Pro získání Impulzní (váhové) přechodové funkce g(t) použijeme funkci ILAPLACE “Inverzní Laplaceova funkce“ z funkce F(s). Pro vykreslení Impulzní (váhové) přechodové fce použijeme funkci IMPULSE - čili odezvu obrazového přenosu na Dirackův puls s počátečními podmínkami rovnými nule (p.p.=0) zleva. Pokud chceme znát konkrétní hodnoty v závislosti na čase, použijeme přiřazení dle příkladu. Zadání se provádí: ILAPLACE („Přenosová funkce“ ) IMPULSE (SYS) [x, t]= STEP (SYS) Numerické_Vyjádření = [x, t] Př23: Bs = [1, 2]; As= [1, 2, 1]; SYS = TF (Bs, As); SYMS s t; ILAPLACE ((s + 2)/(s^2 + 2*s + 1)) IMPULSE (SYS) [x, t]= IMPULSE (SYS); Numericke_Vyjadreni = [x, t]
Tato funkce nám udává, že budeme pracovat s neurčitými proměnnými Toto jsou čísla, která získáme z přenosové funkce TF
Výsledek: ans =t*exp(-t)+exp(-t) Numericke_Vyjadreni = 1.0000 0 0.9723 0.2560 0.8202 0.7680 0.4281 1.9200 0.3932 2.0480 0.2077 2.9440 0.0940 3.9680 0.0407 4.9920 0.0191 5.8880 0.0079 6.9120 0.0032 7.9360 0.0013 8.9600 0.0005 9.9840 0.0001 11.9040
18
Otevřít Matlab Pozn:
Pro fci ILAPLACE musíme bohužel zadávat výsledky jednoho z mezikroků (viz Př). Pokud chceme pro fci IMPULSE zadat konkrétní barvu, dáme do apostrofů počáteční písmeno této barvy tj. r, g, b, y = red, green, blue, yelow. V případě, že tento parametr nezadáme, bude brán automaticky podle MATLABu.
Odezva systému na libovolně zvolený budící signál Pokud chceme zjistit, jakou bude mít systém odezvu na zvolený budící signál, musíme jej nejprve definovat. A to buď sami tím, že napíšeme do Matlabu u a t, což budou matice o jednom řádku a n prvcích. Obě matice musí být stejně dlouhé. Anebo při přípravě budícího signálu můžeme použít funkci [u, t] = GENSIG(type, Tau, Tf, Ts), kde type je buď ‘sine’ - sinusový signál, ‘square’ – schodová funkce nebo ‘pulse’ – signál složený z jednotlivých pulsů (pro všechny tři je umax rovno jedné). Tau je perioda vzorkování, Tf – celková doba simulace, Ts – vzorkovací čas. Pokud se chceme podívat na námi vytvořenou budící fci, použijeme příkaz plot. Nyní, když si připravíme budící signál, můžeme začít simulovat, k čemuž nám dopomůže funkce LSIM. Zadání se provádí: [u,t] = GENSIG (type, Tau, Tf, Ts) plot (u,t) LSIM (SYS, u, t) Př24: Bs = [1, 2]; As= [1, 2, 1]; SYS = TF (Bs, As); [u, t] = GENSIG (‘square’, 5, 30, 0.1); plot (t, u) LSIM (SYS, u, t) [y,t] = LSIM (SYS, u, t); Num_vyjadreni = [y,u] plot (t,Num_vyjadreni)
kde type – ‘sine’; ‘square’; ‘pulse’
=> perioda = 5, celkový čas simulace = 30, vzorkovací čas je 0.1
19
Výsledek: Toto bude výsledek funkce Plot, kde jsme pomocí příkazu GENSIG nadefinovali jednotlivé skoky. Podívejme se na zadání: Tau = 5 Tf = 30 Ts = 0.1 … toto se projeví pouze na lehkém zešikmení skoků.
Takto bude reagovat soustava na definovaný budící signál. Je vidět, že by chtěla zvětšit doba periody, protože nedáváme dostatek času soustavě na ustálení. Ze zadání víme, že hodnota ustálení je 2, ale zde se dostáváme pouze k hodnotě 1,6.
20
Num_vyjadreni = 0 0 0 1.0000 1.1006 1.0000 1.6008 1.0000 1.6306 0 0.3478 0 0.3222 1.0000 1.6465 1.0000 1.6725 0 0.3529 0 0.3269 1.0000 1.6470 1.0000 1.6730 0 0.3530 0 0.3270 1.0000 1.6470 1.0000 1.6730 0 0.3530 0 0.3270 1.0000 1.6470 1.0000 1.6730 0 0.3530 0 0.3270 1.0000 1.6470 1.0000 1.6730 0
Otevřít Matlab Pozn.:
Samozřejmě, že zde je ukázán pouze jedna z nekonečně mnoha možností zadávání, proto je třeba si s tímto úsekem velice dobře „pohrát“.
PŘÍKLAD Pro celou tuto část je vytvořen soubor M-File, ve kterém je všechno naprogramováno. Proto doporučuji si tento soubor taktéž prohlédnout. Po otevření Matlabu zadej příkaz OPEN spojity, který ti otevře tento program v MATLAB Editor/ Debugger Pro spuštění napiš pouze spojity a celý program se ti v Matlabu spustí.
Otevřít Matlab
21
Zobrazování více přenosů do společného grafu V případě, že máme zadány dva nebo více přenosů (libovolně zadány) a potřebujeme je mezi sebou porovnat, můžeme si je zobrazit do jednoho grafu pomocí funkce LTIVIEW. Zadání se provádí: Kde plottype jsou:
LTIVIEW (plottype, SYS1, SYS2, … , SYSn) ‘step’ - odezva na jednotkový skok ‘impulse’ - impulsní (váhová) přechodová fce ‘bode’ - logaritmicko amplitudová a fázová charakteristika ‘nyquist’ - frekvenční charakteristiky v komplexní rovině ‘lsim’ - odezva na libovolně zvolenou budící fci a další, které nepoužíváme.
Př25: Bs = [1, 2]; As = [1, 2, 1]; N = [-3]; P = [-3; -2]; K = [1]; SYS1 = TF (Bs, As) SYS2 = ZPK (N, P, K) LTIVIEW ( 'step', SYS1, SYS2)
… SYS1 je znázorněn tečkovaně
Výsledek: Transfer function:
s+2 s^2 + 2s + 1
Zero/pole/gain:
(s + 3) (s + 3)(s + 2)
Tento způsob zobrazování není špatný, ale neumožňuje nám vypsat numerické vyjádření přechodových funkcí. Proto LTIVIEW budeme používat pouze pro porovnání jednotlivých přenosů, ať už přechodové funkce, impulzní (váhové) přechodové funkce a dalších (výše jsou popsány).
Otevřít Matlab Pozn.: Změnit typ zobrazování lze i pomocí kliknutí na graf pravým tlačítkem myši, navolit Plot Type a vybrat si libovolné zobrazení nebo přidání mřížky, vypnutí zobrazení jednoho z přenosů atd.
22
Způsoby zobrazování libovoných hodnot Pokud ale potřebujeme znát numerické vyjádření, použijeme pro ně samostatné příkazy a funkce (STEP, IMPULSE, LSIM) a vypíšeme si jejich hodnoty tak, jak je ukázáno v příkladech 22, 23 a 24 v kombinaci s příkazem PLOT. Při použití příkazu PLOT máme možnost zobrazovat pouze prvních X hodnot, a to ve tvaru (1:10), čímž říkáme, že chceme zobrazit pouze prvních 10 hodnot. Nebo můžeme jeden graf rozdělit na N možných grafů pomocí příkazu SUBPLOT. Pokud potřebujeme k práci mřížku, můžeme použít funkce GRID ON – mřížka zapnuta, nebo GRID OFF – mřížka vypnuta. Dále si můžeme definovat velikost os (příkaz AXIS) nebo počet zobrazovaných hodnot. Pro popis slouží příkaz TITLE – titulek. Pro popis jednotlivých os nám slouží příkazy XLABEL a YLABEL pro osu x a y. Pokud jsme již použili příkaz SUBPLOT a později chceme použít pouze PLOT, musíme nejprve zadat SUBPLOT (1,1,1). Jinak by nám příkaz PLOT vykreslil graf do posledního okna u příkazu SUBPLOT. Chceme-li vytvořit několik nezávislých obrázkových oken, použijeme příkaz FIGURE (N), kde N je číslo okna, které chceme aktivovat. Pokud chceme smazat aktuální okno, použijeme příkaz CLF. Zavřít požadované okno se dá příkazem CLOSE (N). Zadání se provádí: plot (x) plot (t,x,‘b‘) SUBPLOT (m,n,N) AXIS ([xmin xmax ymin ymax zmin zmax]) plot (x(1:100)) TITLE (‘zde je mozno napsat titulek’) figure (2) plot (x(1:50)) CLF XLABEL ('Toto je osa x') YLABEL ('Toto je osa y') CLOSE (2) Př26: SYS1 = TF ([1 2], [1 2 1]); SYS2 = TF ([3 2], [1 5 6]); SYS3 = TF ([1], [1 1.92 0.16]); [x1,t1] = STEP (SYS1,50); [x2,t2] = STEP (SYS2,50); [x3,t3] = STEP (SYS3,50); figure (2); plot (t1,x1,t2,x2,t3,x3); XLABEL (‘čas t’); YLABEL (‘hodnota y’) nebo SUBPLOT (3,1,1) plot (t1,x1,’b’); AXIS ([0 10 0 2]); grid on; TITLE (‘Přechodová fce č.1’) SUBPLOT (3,1,2) 23
kde ‘b‘ – je typ barvy viz. Pozn. Př1. kde m … počet řádků n … počet sloupců N … pořadové číslo grafu osa z je pouze pro 3D grafy zobrazí prvních 100 hodnot proměnné x zobrazí prvních 50 hodnot proměnné x
plot (t2,x2,’g’); AXIS ([0 6 0 0.6]); grid on; TITLE (‘Přechodová fce č.3’) SUBPLOT (3,1,3) plot (t3,x3,‘r‘); grid off; TITLE (‘Přechodová fce č.3’) Výsledek:
Pro příkaz plot.
24
Pro příkaz SUBPLOT.
Otevřít Matlab
25
Zobrazování pomocí spektra Pokud chceme zobrazit pouze číselné hodnoty místo spojitého obrazu, použijeme příkaz STEM. Př27: X(1:5) = 0; X(6:15) = 1; X(16:25) = 2; STEM (X); Výsledek:
Porovnejte tento výsledek s výsledkem, který by dal příkaz plot (X).
Otevřít Matlab
26
Zobrazování podle lichoběžníkového pravidla Podle lichoběžníkového pravidla platí, že pokud máme diskrétní hodnoty, tak dokud nepřijde další hodnota, výstup nám drží hodnotu příchozí. Pro zobrazování podle tohoto pravidla použijeme příkaz STAIRS (schody). Jako příklad použijeme Př6. Pouze použijeme příkaz STAIRS. Př28: X(1:5) = 0; X(6:15) = 1; X(16:25) = 2; STAIRS (X); Výsledek:
Porovnejte tento výsledek s výsledky, které by daly příkazy plot (X) a STEM (X).
Otevřít Matlab PŘÍKLAD Pro celou tuto část je vytvořen soubor M-File, ve kterém je všechno naprogramováno. Proto doporučuji si tento soubor taktéž prohlédnout. Po otevření Matlabu zadej příkaz OPEN spojity, který ti otevře tento program v MATLAB Editor/ Debugger Pro spuštění napiš pouze spojity a celý program se ti v Matlabu spustí.
Otevřít Matlab 27
Návrh zpětné vazby s kompenzátorem Soustava s jedním vstupem a jedním výstupem (SISO). V Matlabu se funkce nazývá RLTOOL. Pokud napíšeme pouze tento příkaz, objeví se nám toto (samozřejmě bez popisu):
Základní zadání je ve tvaru: RLTOOL (SYS) nebo RLTOOL (SYS, COMP)
– kde SYS je zadaný přenos (pomocí SS, TF nebo ZPK) – kde COMP je hodnota kompenzátoru (pomocí SS, TF nebo ZPK). Pozor, nestačí pouze hodnota zesílení.
Zadaný přenos SYS se nahradí za P (zadání H, F je vysvětleno dále). Máme dvě možnosti zapojení kompenzátoru, a to buď do přímé větve nebo do zpětné vazby (viz obr.) Pro zadávání jedné z těchto dvou možností je: LocationFlag = 1 Poloha kompenzátoru v přímé větvi (nastaveno jako default) LocationFlag = 2 Poloha kompenzátoru ve zpětné vazbě V tomto případě se zadání provádí: RLTOOL (SYS, COMP, LocationFlag)
28
Můžeme též definovat, jestli se jedná o kladnou nebo zápornou zpětnou vazbu, což nastavíme pomocí parametru FeedbackSign. Pokud nastavíme do této proměnné hodnotu –1, máme zápornou zpětnou vazbu (která je nastavena default), v případě hodnoty +1 dostáváme kladnou zpětnou vazbu. V tomto případě se zadání provádí: RLTOOL (SYS, COMP, LocationFlag, FeedbackSign) Jedna z možností je otevřít pouze RLTOOL bez jakýchkoliv parametrů, kde parametry můžeme nastavit až přes menu. Proto si nejprve navolíme přenosy (pomocí SS, TF nebo ZPK). Otevřeme RLTOOL a v menu File – Import model… (Ctrl + I) můžeme dosadit za P, H nebo F námi zadané přenosy. Můžeme zde též nastavit kompenzátor v menu Tolls – Edit Compensator…, kde zadáme nuly (zero) a póly (pole). Hodnotu zesílení můžeme zadat přímo v okně Root Locus Design, stejně jako nastavení kladné nebo záporné zpětné vazby. Můžeme si zde také nechat vykreslit přechodovou funkci (‘step’), přechodovou (váhovou) funkci (‘impulse’), logaritmicko amplitudovou a fázovou charakteristiku (‘bode’) nebo frekvenční charakteristiku v komplexní rovině (‘nyquist’) a další, které nepoužijeme. Př29: Bs = [1, 2]; As = [1, 2, 1]; SYS = TF (Bs, As); COMP = TF(2, 1); LocationFlag = 2; FeedbackSign = -1; RLTOOL (SYS, COMP, LocationFlag, FeedbackSign) Výsledek:
Otevřít Matlab
29
Bloková algebra Blokovými schématy vyjadřujeme vazby mezi dílčími – samostatnými systémy, které se vzájemně ovlivňují a vytvářejí složitý dynamický celek. Systém úprav vedoucí k vyjádření dynamických vlastností těchto celků označujeme jako blokovou algebru. Máme několik základních schémat, která umí Matlab velice jednoduše vyřešit, avšak rozklad na tyto základní prvky musíme učinit sami. Zpětná vazba obr 1.
Vyjádření záporné zpětné vazby v Matlabu se provede pomocí příkazu FEEDBACK. obr 2.
Zadání se provádí: a) pro obr 1. b) pro obr 2. levý: c) pro obr 2. pravý:
SYS = FEEDBACK (SYS1, SYS2) SYS = FEEDBACK (G, 1) SYS = FEEDBACK (1, G)
obr 3.
Vyjádření kladné zpětné vazby v Matlabu se provede pomocí příkazu FEEDBACK. Zadání se provádí: d) pro obr 3. SYS = FEEDBACK (SYS1, -SYS2) e) obdobně též pro kladnou zpětnou vazbu na obr 2. SYS = FEEDBACK (G, -1) SYS = FEEDBACK (1, -G)
30
Sériové zapojení
Zadání se provádí: SYS = SERIES (SYS1, SYS2) Paralelní zapojení
Zadání se provádí: SYS = PARALLEL (SYS1, SYS2) V případě sčítacího místa s mínusy se zadání provádí pomocí –SYS1 (případně –SYS2) Př30: SYS1 = TF([2 1],[1 2 1]); SYS2 = TF([5],[1 5 6]); SYS_ZV = FEEDBACK (SYS1, SYS2) SYS_ZV_1 = FEEDBACK (SYS1, 1) SYS_ZV_2 = FEEDBACK (1, SYS2) SYS_SER = SERIES (SYS1, SYS2) SYS_PAR = PARALLEL (SYS1, SYS2) Výsledek:
Transfer function: SYS_ZV 2 s ^3 + 11s ^ 2 + 17 s + 6 s ^ 4 + 7 s ^3 + 17 s ^ 2 + 27 s + 11 Transfer function: 2s + 1 s^2 + 4s + 2
SYS_ZV_1
Transfer function: s ^ 2 + 5s + 6 s ^ 2 + 5s + 11
SYS_ZV_2
Transfer function: SYS_SER 10 s + 5 s ^ 4 + 7 s ^3 + 17 s ^ 2 + 17 s + 6 Transfer function: SYS_PAR 2 s ^3 + 16 s ^ 2 + 27 s + 11 s ^ 4 + 7 s ^3 + 17 s ^ 2 + 17 s + 6
Otevřít Matlab
31
Př31: S1 =
s+2 2 s + 2s + 1
S2 =
3 s+2
S3 =
2 s
S4 =
s +1 s
S5 =
4s 2 + 2s + 1 s2 + s
1 s + 1,92 s + 0,16 s +1 S7 = 2 s + 5s + 6
S6 =
2
Postupnou úpravou dle obrázků dostáváme: A=
S3 1 + S 3.S 5
S12 = S1.S 2
B = S 4 + S12
C = A.B
32
D = S1.S 6 1 E= 1+ S6
F = S 7 .E
G=C−D
H = G .F
I=
1 1− H
J = I .C
Zadání do Matlabu: S1 = TF ([1 2],[1 2 1]); S2 = TF ([3],[1 2]); S3 = TF ([2],[1 0]); S4 = TF ([1 1],[1 0]); S5 = TF ([4 2 1],[1 1 0]); S6 = TF ([1],[1 1.92 0.16]); S7 = TF ([1 1],[1 5 6]); A = FEEDBACK (S3,S5); S12 = SERIES (S1,S2); B = PARALLEL (S12,S4); C = SERIES (A,B); D = SERIES (S1,S6); E = FEEDBACK (1,S6); F = SERIES (S7,E); G = PARALLEL (C,-D); H = SERIES (G,F); I = FEEDBACK (1,-H); J = SERIES (I,C); Zde je popsán jeden konkrétní příklad řešení Blokové Algebry. Pro snadnější orientaci je lepší si postupně vyzkoušet tento příklad jak v Matlabu, tak zároveň i v Simulinku. Tak se nejlépe pozná, že výsledný přenos je ve všech bodech řešení příkladu stejný. Výsledná funkce J bude relativně nepřehledná (v čitateli s21 a ve jmenovateli s22). Pokud zapojíte první a poslední obrázek s příslušnými přenosy, bude se přechodová funkce ve vyšších časech „lehce rozbíhat“. To je způsobeno zaokrouhlováním Matlabu ve výsledném přenosu J.
Otevřít Matlab Pozn.:
Jak je již výše poukázáno, je při základním zadávání uvažována zpětná záporná vazba. Pokud tedy chceme používat kladnou zpětnou vazbu, musíme toto zohlednit do rovnice ve formě záporného znaménka. U paralelní vazby je brán součtový člen kladný pro obě vazby, proto musíme opět zadat jedno (resp. obě) záporná znaménka. Jsou-li v paralelní vazbě více jak dva členy, musíme je nejprve upravit, protože Matlab umí sčítat pouze dva systémy. Totéž platí pro sériové zapojení.
33
Převod Spojitého přenosu na Diskrétní přenos V praxi se většinou nevyskytují Spojité systémy, ale většinou se jedná o Diskrétní systémy. Zde je tento systém vzorkován v určitých časových intervalech (toto se v systému projeví jako vzorkovací čas Ts). Matlab nám dává možnost volby několika metod přenosu: ‘zoh’ Metody: zero-order hold - přidržení nulového řádu ‘foh’ first-order hold - trojúhelníková aproximace ‘tustin’ vícelineární Tustinova aproximace ‘prewarp’ Tustinova aproximace s frekvenční překroucením ‘matched’ metoda párování póly-nuly V Matlabu se používá funkce C2D “Continuous to Diskret system” Zadání se provádí: SYS = C2D (SYS1, Ts)
Ts….vzorkovací čas
SYS = C2D (SYS, Ts, method)
method - zvolená metoda
nebo Př32: SYS1 = TF([1 2],[1 2 1]); SYS = C2D (SYS1, 0.1) Výsledek:
Transfer function:
0.09984 z − 0.08173 z ^ 2 − 1.81z + 0.8187 Sampling time: 0.1
Otevřít Matlab Pozn:
Jako základní metoda je nastavena metoda ‘zoh’ Pokud máme zadaný přenos s dopravním zpoždením, můžeme použít pouze metody ‘zoh’ nebo ‘foh’.
Změna vzorkovacího času u Diskrétního přenosu Pokud již máme zadaný Diskrétní přenos a chceme změnit vzorkovací čas, použijeme funkci D2D „Discret to Descret“. Zadání se provádí: SYS1 = D2D (SYS, Ts) Př33: SYS1 = TF([1 2],[1 5 6]); SYS = C2D (SYS1, 0.1) SYS = D2D (SYS, 0.05) Výsledek:
Transfer function:
0.08639 z − 0.07073 z ^ 2 − 1.56 z + 0.6065 Sampling time: 0.1 Transfer function:
0.08639 z − 0.07073 z ^ 2 − 1.56 z + 0.6065
Sampling time: 0.05
Otevřít Matlab Pozn:
Tato funkce nelze použít u vícenásobných kořenů.
34
Převod Diskrétního přenosu na Spojitý přenos Pokud máme zadaný nějaký Diskrétní přenos a potřebujeme z něj zjistit Spojitý přenos, použijeme funkci D2C „Discret to Continuous system“ Matlab nám dává možnost volby několika metod přenosu: ‘zoh’ Metody: zero-order hold - přidržení nulového řádu ‘tustin’ vícelineární Tustinova aproximace ‘prewarp’ Tustinova aproximace s frekvenční překroucením ‘matched’ metoda párování póly-nuly (pouze pro systémy SISO) Zadání se provádí: SYS = D2C (SYS1) nebo SYS = D2C (SYS1, method)
kde method je zvolená metoda
Př34: SYS1 = TF ([1 0.2],[1 0.1 0.5], 0.1) SYS = D2C (SYS1) Výsledek:
Transfer function:
z + 0.2 z ^ 2 + 0.1z + 0.5
Sampling time: 0.1 Transfer function:
75.45s + 2.111e004 s ^ 2 + 69.31 + 2.815e004
Otevřít Matlab Pozn:
Jako základní metoda je nastavena metoda ‘zoh’
Specifikace Diskrétního přenosu v DSP formátu B( z ) b1 + b2 .z −1 + ... + bn +1 .z − n = A( z ) 1 + a 2 .z −1 + ... + a n +1 .z − n DSP – zpracování digitálního signálu. K tomuto se používá funkce FILT. Tato funkce nám umožňuje zadat Diskrétní přenos v zadávání pomocí z-1 (přičemž z-1 = q). H ( z) =
Zadání se provádí: SYS = FILT (Bz, Az, Ts)
kde
Př35: Bz = [1 0.5]; Az = [1 0.2 0.1]; SYS = FILT (Bz, Az, 0.1) Výsledek:
Transfer function:
1 + 0.5 z ^ −1 1 + 0.2 z ^ −1 + 0.1z ^ −2 Sampling time: 0.1
Otevřít Matlab Pozn:
V Matlabu se zpravidla používá místo Bz - NUM a místo Az - DEN.
35
Ts… vzorkovací čas Az…polynom jmenovatele Bz…polynom čitatele
Zadání Diskrétního přenosu pomocí funkce TF b .z m + ... + b1 .z + b0 B( z ) = r m n A( z ) z . a n .z + ... + a1 .z + a 0 Pro zadání Diskrétního přenosu můžeme použít funkci TF, kterou jsme již používali dříve, zde ovšem přidáme jeden parametr navíc, kterým je vzorkovací čas Ts. F ( z) =
(
)
Zadání se provádí: SYS = TF(Bz, Az, Ts) Př36: Bz = [1 0.2] Az = [1 0.2 0.1] SYS = TF (Bz, Az, 0.1) Výsledek:
Transfer function:
z + 0.2 z ^ 2 + 0.2 z + 0.1 Sampling time: 0.1
Otevřít Matlab Pozn:
V Matlabu se zpravidla používá místo Bz - NUM a místo Az - DEN.
Zadání Diskrétního přenosu pomocí funkce SS x[n + 1] = Ax[n] + Bu[n] y[n] = Cx[n] + Du[n] Pro zadání Diskrétního stavového popisu můžeme použít funkci SS, kde zadáme navíc vzorkovací čas Ts. Zadání se provádí: SYS = SS(A, B, C, D, Ts) Př37: A = [0.8 –0.09; 0.09 0.99]; B = [0.09; 0.005]; C = [1 2]; D = [0]; SYS = SS(A, B, C, D, 0.1) Výsledek:
a = x1 x2
x1 0.8 0.09
x1 x2
u1 0.09 0.005
y1
x1 1
x2 -0.09 0.99
b =
c = x2 2
d = y1 Sampling time: 0.1 Discrete-time model.
u1 0
Otevřít Matlab 36
Zadání Diskrétního přenosu pomocí funkce ZPK ( z − n1 ).( z − n2 ).....( z − nn ) N ( z) = K. P( z ) ( z − p1 ).( z − p 2 ).....( z − p n ) Pro zadání Diskrétní přechodové funkce můžeme použít funkci ZPK, kde zadáme navíc vzorkovací čas Ts. H ( z) =
Zadání se provádí: SYS = ZPK (N, P, K ,Ts) Př38: N = [0.8]; P = [0.94; 0.94]; K = 0.1; Ts = 0.1; SYS = ZPK (N, P, K ,Ts) Výsledek:
Zero/pole/gain:
0.1( z − 0.8) ( z − 0.94)^ 2 Sampling time: 0.1
Otevřít Matlab Pozn:
V Matlabu se zpravidla používá místo proměnné N proměnná Z (Zero)
PŘÍKLAD Pro celou tuto část je vytvořen soubor M-File, ve kterém je všechno naprogramováno. Proto doporučuji si tento soubor taktéž prohlédnout. Po otevření Matlabu zadej příkaz OPEN diskr, který ti otevře tento program v MATLAB Editor/ Debugger Pro spuštění napiš pouze diskr a celý program se ti v Matlabu spustí.
Otevřít Matlab
37
Zadání náhodných hodnot Pokud mluvíme o náhodných procesech a o šumu, který je s tímto procesem spojen, musíme nejprve nadefinovat tento náhodný proces (resp. šum). V Matlabu nám k tomu slouží funkce randn. Zadání se provádí: Y = randn (m,n)
kde m,n je počet řádků (resp. sloupců) v proměnné Y
Př39: Y = randn (100,1)
Otevřít Matlab Pozn:
Matlab nám vypíše matici hodnot o 100 řádcích a jednom sloupci. Pokud se chceme podívat jak tento signál vypadá, použijeme funkci PLOT (Y).
Výpočet střední hodnoty 1 N ∑ xi N i =1 Pokud chceme spočítat střední hodnotu, použijeme funkci MEAN. Tato funkce spočítá střední hodnotu ve všech sloupcích matice. x=
Zadání se provádí: STH = MEAN (Y) Př40: Y = [5 25 12; 6 64 19; 8 54 15; 1 23 17; 2 35 15] STH = MEAN (Y) Výsledek:
Y = 5 6 8 1 2 STH = 4.4000
25 64 54 23 35
12 19 15 17 15
40.2000
15.6000
Otevřít Matlab Směrodatná odchylka, Rozptyl
(
)
1/ 2
(
)
1/ 2
2 2 1 N 1 N (1) s= xi − x i (2) s = ∑ xi − x i ∑ N − 1 i =1 N i =1 Pokud chceme spočítat hodnotu rozptylu σ , použijeme funkci STD, a to buď dle vzorce (1) nebo (2).
Zadání se provádí: S = STD (X,Flag)
kde flag je typ 0 pro vzorec (1), typ 1 pro vzorec (2)
Př41: Y = [5 25 12; 6 64 19; 8 54 15; 1 23 17; 2 35 15]; S = STD (Y) Výsledek:
S = 2.8810
18.1025
2.6077
Rozptyl je směrodatná odchylka na druhou, proto pro jeho výpočet použijeme pouze jednoduché vyjádření. 38
Př41.1:Rozptyl1 = S(1,1)^2 Rozptyl2 = S(1,2)^2 Rozptyl3 = S(1,3)^2 Výsledek:
V závorce je zadán první řádek a první sloupec matice V závorce je zadán první řádek a druhý sloupec matice V závorce je zadán první řádek a třetí sloupec matice
Rozptyl1 = 8.3000 Rozptyl2 = 327.7000 Rozptyl3 = 6.8000
Otevřít Matlab Vzájemná kovariance c xy (l ) =
[(
)
1 N −l ∑ x(k ) − x .(y (k + l ) − y N − l k =1
]
l = 0,1,2.....N − 1 ;
τ = K.TV
V matlabu můžeme použít pro výpočet vzájemné kovariance funkci XCOV, tento příkaz se dá použít i pro výpočet autokovarianční funkce. Při použití funkce XCOV má vektor X velikost Nx, a vektor Y velikost Ny (kde Nx > Ny). Potom výsledný vektor bude mít rozměr 2*Nx – 1. Autokovarianční funkce ukazuje pravděpodobnost toho, že stochastický signál x(k) vztažený ke střední hodnotě, který má v t1 hodnotu x1, bude mít v t1 + τ hodnotu x1. Zadání se provádí: C = XCOV (X,Y, ‘coeff’) nebo C = XCOV (X,X, ‘coeff’)
… pro autokovarianční fci
Př42: Y = randn (30,1); X = randn (30,1); C = XCOV (X, Y, ‘coeff’);
Otevřít Matlab Vzájemná korelace R xy (τ ) =
1 N
N −l
∑ x(k ). y(k + l )
l = 0,1,2.....N − 1 ;
k =1
τ = K.TV
V matlabu můžeme použít pro výpočet vzájemné korelace funkci XCORR, tento příkaz se dá použít i pro výpočet autokorelační funkce. Při použití funkce XCORR má vektor X velikost Nx, a vektor Y velikost Ny (kde Nx > Ny). Potom výsledný vektor bude mít rozměr 2*Nx – 1. Autokorelační funkce ukazuje pravděpodobnost toho, že stochastický signál x(k), který má v t1 hodnotu x1, bude mít v t1 + τ hodnotu x1. Zadání se provádí: R = XCORR (X, Y, ‘coeff’) nebo R = XCORR (X, X, ‘coeff’)
… pro autokorelační fci
39
Př43: Y = randn (30,1); X = randn (30,1); R = XCORR (X, Y, ‘coeff’);
Otevřít Matlab Dvojrozměrná vzájemná korelace V Matlabu se použije funkce XCORR2, která vrátí křížovou korelaci matice X a Y beze změny měřítka. Tzn. vektor X má velikost Nx, a vektor Y velikost Ny. Potom výsledný vektor bude mít rozměr Nx + Ny – 1. XCORR2 je dvojrozměrná verze XCORR. Zadání se provádí: R = XCORR2 (X,Y); nebo R = XCORR2 (X,X);
… pro autokorelační fci
Př44: Y = randn (30,1); X = randn (30,1); R = XCORR2 (X, Y);
Otevřít Matlab Výpočet kovarianční matice Kovarianční matice má podobu: 2 1 N xi − x ∑ N i =1 1 N ∑ y i − y . xi − x N i =1 M 1 N ∑ z i − z . xi − x N i =1
(
)
(
)(
)
(
)(
)
1 N
∑ (x N
i =1
1 N
1 N
i
∑ (y N
i =1
∑ (z N
i =1
)(
− x . yi − y
i
M
i
−y
)
)
2
K K
)(
− z . yi − y
)
O K
( (
)( )(
1 N ∑ xi − x . z i − z N i =1 1 N ∑ yi − y . z i − z N i =1 M 1 N ∑ zi − z N i =1
(
) )
)
Kovarianční matice nám spočítá hodnoty stochastických signálů vztažených ke střední hodnotě. K tomuto nám slouží v Matlabu funkce COV. Při zadávání můžeme posuzovat pouze dvě proměnné, proto pokud potřebujeme porovnat více signálů, musíme tyto signály vložit do jedné proměnné, funkce COV nám tyto signály v jedné proměnné porovná mezi sebou. Zadání se provádí: C = COV (X)
Otevřít Matlab Matice Korelačních koeficientů Funkce CORRCOEF vrací matici korelačních koeficientů propočítaných z vstupní matice, jejíž řádky jsou zkoumány a jejíž sloupce jsou proměnné. Pokud C = COV(X), pak CORRCOEF (X) je matice, jejíž elementy (i,j) jsou
40
CORRCOEF (i, j ) =
C (i, j ) C (i, i ) ∗ C ( j , j )
Zadání se provádí: C = CORRCOEF (X)
Otevřít Matlab Výstupní a stavová Kovariance systému řízeného bílým šumem Popis: COVAR spočítá stacionární Kovarianci výstupu y u modelu LTI SYS řízeného Gaussovým bílým šumem vstupu w. Tato fce pracuje zároveň se spojitým a diskrétním časem. P = covar(sys,W) vrací ustálenou hodnotu Kovariance výstupu. Zadání se provádí: kde … W je intenzita bílého šumu sys zadaný diskrétní přenos
[P,Q] = COVAR(SYS,W) Př45: SYS = TF([2 1],[1 0.2 0.5],0.1) P = COVAR(SYS,5) Výsledek:
Transfer function:
2z + 1 z ^ 2 + 0.2 z + 0.5 Sampling time: 0.1 P = 30.3167
Otevřít Matlab PŘÍKLAD Pro celou tuto část je vytvořen soubor M-File, ve kterém je všechno naprogramováno. Proto doporučuji si tento soubor taktéž prohlédnout. Po otevření Matlabu zadej příkaz OPEN NP - který ti otevře tento program v MATLAB Editor/ Debugger Pro spuštění napiš pouze NP a celý program se ti v Matlabu spustí.
Otevřít Matlab
41
Diskrétní identifikace pomocí modelu ARX ARX (AutoRegresive eXogenous) - odhaduje parametry modelu ARX nebo AR. Parametry ARX modelu mají strukturu: A(q ). y (t ) = B(q ).u (t − nk ) + e(t ) Při zadávání do Matlabu použijeme th = arx(z,nn), kde th (theta) nám vrátí hodnoty odhadu modelu ARX, z = [y,u], kde y je výstupní vektor a u je vstupní vektor, nn = [na nb nk], kde na je stupeň polynomu A, nb je stupeň polynomu B a nk je pro naše případy vždy rovno jedné. Zadání se provádí: Z = [Y, U] NN = [na, nb, 1] TH = ARX (Z, NN) Jestliže vypočteme matici th musíme jí převést na obrazový přenos s určitým vzorkovacím časem. Pro tuto operaci použijeme funkci th2arx („theta to arx“). Zadání se provádí: [A, B] = th2arx (TH) SYS = TF (B, A, Ts)
kde T je vzorkovací čas
Otevřít Matlab Diskrétní identifikace pomocí modelu ARMAX ARMAX (AutoRegresive Moving Average eXogenous) - odhaduje parametry modelu ARMAX nebo ARMA. Parametry ARMAX modelu mají strukturu: A(q ). y (t ) = B(q ).u (t − nk ) + C (q ).e(t ) Při zadávání do Matlabu použijeme th = armax(z,nn), kde th (theta) nám vrátí hodnoty odhadu modelu ARMAX, z = [y,u], kde y je výstupní vektor a u je vstupní vektor, nn = [na nb nc nk], kde na je stupeň polynomu A, nb je stupeň polynomu B, nc je stupeň polynomu C a nk je pro naše případy vždy rovno jedné. Zadání se provádí: Z = [Y, U] NN = [na, nb, nc, 1] TH = ARMAX (Z, NN) Jestliže vypočteme matici th musíme jí převést na obrazový přenos s určitým vzorkovacím časem. Pro tuto operaci použijeme funkci th2arx („theta to arx“). Zadání se provádí: [A, B, C] = th2arx (TH) SYS1 = TF (B, A, Ts) SYS2 = TF (C, A, Ts)
kde T je vzorkovací čas
Otevřít Matlab Příklad Pro oba tyto příkazy je vytvořen příklad v Matlabu, pod názvem IDENT.m, který si je možno si spustit.
Otevřít Matlab 42