X7SGS Signály a systémy Matlab minihelp (poslední změna: 0. září 2008) 1 Základní maticové operace Vytvoření matice (vektoru) a výběr konkrétního prvku matice vytvoření matice (vektoru) oddělovač sloupců je bud mezera nebo čárka, oddělovač řádků je středník >> A = [; 4 5 6] A = 4 5 6 vytvoření posloupnosti (vektoru) s konkrétním krokem >> cas1=0:4 cas1 = 0 4 >> cas2=0:0.5:2 cas2 = 0 0.5000 1.0000 1.5000 2.0000 výběr konkrétního prvku, první index představuje řádek, druhý sloupec matice; Matlab používá indexaci vektorů a matic od 1, tj. index prvního prvku je 1, nikoliv 0 (na rozdíl např. od jazyka C/C++) >> A(1,1) 1 >> A(2,1) 4 vybrání posledního prvku v 1. řádku, posledního prvku v posledním řádku klíčové slovo end 1
>> A(1,end) >> A(end,end) 6 vybrání celého 1. řádku, vybrání celého 2. sloupce operátor dvojtečka: >> A(1,:) >> A(:,2) 2 5 Aritmetické operace s maticemi (vektory) sčítání a odčítání >> []+[2 2 2] 4 5 >> []-[2 2 2] -1 0 1 násobení a dělení konstantou >> [2 4]*2 4 6 8 >> [2 4]/ 0.6667 1.0000 1. násobení a dělení prvků matice (vektoru) prvky jiné matice (vektoru) dimenze matic (vektorů) musí být stejné 2
>> [2 4 6].*[4 2 1] 8 8 6 >> [2 4 6]./[2 2 ] 1 2 2 násobení dvou matice (pro dimenze matic platí: {m n} {n o} {m o}) >> A = [; 4 5 6], B = [; 4; 5] A = 4 5 6 B = 4 5 >> A*B 26 62 skalární součin vektorů X = {x 1,x 2,...,x n } a Y = {y 1,y 2,...,y n } je číslo x 1 y 1 +x 2 y 2 + + x n y n = i x iy i. Pro implementaci této operace v Matlabu použijeme předchozího operátoru násobení (hvězdička *). První vektor musí být řádkový, druhý sloupcový a oba musí mít stejný počet prvků >> a = [], b=[; 2; 1] a = b = 2 1 >> a*b 10 Transponovaná matice, matice hermitovsky sdružená operace transpozice A T, hermitovsky sdružená matice A H = (A ) T, kde A je matice komplexně sdružená k matici A 1. Hermitovsky sdružená matice se v Matlabu realizuje 1 Pro reálnou matici jsou obě operace zřejmě totožné.
operátorem (apostrof), transponovaná matice pak operátorem. (tečka a apostrof). Komplexně sdružený vektor (matice) se získá funkcí conj(). >> B=[1, j, 2+2j]; >> B 1.0000 0-1.0000i 2.0000-2.0000i >> B. 1.0000 0 + 1.0000i 2.0000 + 2.0000i >> conj(b) 1.0000 0-1.0000i 2.0000-2.0000i Ostatní užitečné funkce size(a) Vrací vektor o dvou prvcích počet řádků a počet sloupců matice A. size(a,1) Vrací počet řádků matice A. size(a,2) Vrací počet sloupců matice A. length(a) Je-li A vektor, vrací velikost vektoru. Je-li A matice typu m n vrací větší z obou čísel m nebo n. (Ekvivalentní operaci max(size(a));) abs(a) Absolutní hodnota (modul) provedeno nad prvky matice A. conj(a) Komplexně sdružená hodnota provedeno nad prvky matice A. real(a) Reálná část prvků matice A. imag(a) Imaginární část prvků matice A. sum(a) Je-li A vektor, pak vrátí součet všech prvků vektoru. log(a),log2(a),log10(a) Přirozený, dvojkový a desítkový logaritmus prvků matice (vektoru) A. who Vypíše seznam definovaných proměnných. help prikaz Nápověda k příkazu prikaz. workspace Otevře okno ze seznamu definovaných proměnných; jejich hodnoty lze pak editovat. 4
clear, clear(a) Maže (odstraní) všechny dříve definované proměnné, odstraní proměnou A. 2 Ovládání grafického výstupu plot(xvalue,yvalue) Zobrazí 2D graf, hodnoty x jsou dány vektorem xvalue, hodnoty y vektorem yvalue. Oba vektory musí mít stejnou dimenzi. stem(yvalue), stem(xvalue,yvalue) Zobrazí 2D graf ve formátu stonkového grafu, hodnoty grafu nejsou navzájem spojeny. Vhodné pro zobrazení diskrétních signálů. subplot(m,n,i) Rozdělí grafické okno na m n podoken (oblastí) a vybere i-tou oblast pro kreslení následujícím grafickým příkazem (např. plot nebo stem). Oblast je v nápovědě Matlabu označována jako axis. figure(i) Vytvoří (nebo vybere, pokud je již vytvořeno) grafické okno s identifikátorem i. clf, clf(i) Maže aktuální grafické okno (vybrané předchozím voláním příkazu figure). Maže grafické okno s identifikátorem i. title( string ) Vytvoří titulek aktuálního grafu (grafu v dané oblasti) umístěný nad grafem. xlabel( string ) Vytvoří popisku osy X aktuálního grafu. ylable( string ) Vytvoří popisku osy Y aktuálního grafu. legend( string1, string2,...) Vytvoří legendu aktuálního grafu. grid on, grid off Zobrazí/odstraní mřížku aktuálního grafu. Příklad: cas, ve kterych generuji vzorky signalu pocatecni hodnota 0 koncova hodnota (N-1)/fvz krok 1/fvz N=1000;fvz=e6; caso=0:1/fvz:(n-1)/fvz; signal=10*cos(2*pi*100*caso); zobrazeni figure(1);clf; subplot(2,1,1); 5
plot(caso,signal); title( cely signal ); subplot(2,1,2); plot(caso(10:50),signal(10:50)); title( usek signalu ); figure(2);clf; plot(abs(fft(signal))); Implementace operace s[k] 2 Tato operace s diskrétním signálem se objevuje ve vztazích pro výpočet energie nebo výkonu signálu. Uvažujme, že máme N vzorků (obecně komplexního) signálu a máme např. vypočítat energii, tj. určit E = N s[k] 2 = k=1 N s[k]s[k]. Existuje několik způsobů, jak tuto operaci implementovat v Matlabu: k=1 varianta 1 využití skalárního součinu Jedná se o nejefektivnější implementaci (dle rychlosti): radkovy vektor nahodnych cisel o N prvcich: signal=randn(1,n); Energie=signal*signal ; signal je sloupcovy vektor, jeho hodnoty jsou komplexne sdruzene varianta 2 pomocí funkce sum signal=randn(1,n); Energie=sum(signal.*conj(signal)); varianta pomocí cyklu for signal=randn(1,n); Energie=0; pripravim promennou for i=1:length(signal), Energie = Energie+abs(signal(i))^2; end; 6