SİSTEM ANALİZİ

advertisement
SİSTEM ANALİZİ
Ders notları yanında yardımcı referans kaynaklar:
•
•
System Analysis and Signal Processing, 1998, Philip Denbigh
An Intrduction to Random Vibrations, Spectral & Wavelet Analysis, 3rd ed., 1993
Longman Scientific & Technical, David E. Newland
Signals and Systems – ‘97 (Alain V. Oppenheim)
A Course in Digital Signal Processing by Boaz Pont – ‘97
Analog and Digital Signal Processing by Ashok Ambers
Matlab for Engineers, - ’95, ’99, ’00 (Adrian Byran & Moshe Breiner)
MATLAB, Programming for Engineers (Stephen Chepman)
•
•
•
•
•
1. GİRİŞ
İşaret İşlemede temel MATLAB kullanımı
>> a=5;
(;) eklenmezse enter’a basıldığında Matlab, ekranda
a =
5
şeklinde çıkış verir.
Değişkene değer atama bir işlemin sonucu şeklinde de olabilir:
>> parmaklarim = 5 * 2;
Diziler
>> x = [15.3 17.2 14.7 18.1; 12.3 13.6 14.5 16.2; 18.1 20.2 18.2
20.6];
Buradaki (;) matris yazarken alt satıra geçişi ifade eder.
↵
>> x
15.3
12.3
18.1
17.2
13.6
20.1
>> size(x)
14.7
14.5
18.2
18.1
16.2
20.6
↵
3
4
19 karaktere kadar değişken ismi kullanılabilir. İlk karakter harf olmak zorundadır, büyük
küçük harf ayırımı vardır.
>> x = [1 3 5 7]
1
3
5
7
↵
Satır vektörü
↵
>> x = [1; 3; 5; 7]
Sütun vektörü
1
3
5
7
>> clear ↵
Hafızayı boşaltır.
>> clc ↵
Sadece komut penceresini
temizler.
Resmi temizler (clear figure).
>> clf ↵
Bir vektörün oluşturulması:
>> x = [0*pi .1*pi .2*pi .3*pi .4*pi .5*pi] ↵
x =
0 0.3142 0.6283 0.9425 1.2566 1.5708
>> x = (3 : 6) ↵
x =
3
4
5
6
>> x = (0: .1 : .5) * pi
Bu ifade x = [0*pi .1*pi .2*pi .. .5*pi] ile aynı sonucu verir.
(0 ve .5 sınırlar, .1 adım büyüklüğü olmak üzere)
>> x = linspace(0, 0.5*pi, 6)
Adım büyüklüğü bilinmiyorsa linspace komutu kullanılabilir, üstteki komut ile aynı sonuç
alınır. (0: başlangıç, 0.5*pi: bitiş, 6: eleman sayısı)
>>
>>
>>
>>
>>
t
y
a
b
c
=
=
=
=
=
linspace(0, 50*pi, 501)
sin(t);
[1 3 5];
[2 4 6 8 10];
[a b a]
Adım Büyüklüğü = 50π / (501-1) = 0.1 π
c =
1 3 5 2 4 6 8 10 1 3 5
>> a = zeros(3, 5)
a
3×5 Sıfırlar Matrisi
=
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>> c = ones(1, 7)
1×7 Birler Matrisi (birim vektör)
c =
1 1 1 1 1 1 1
Önceden üretilmiş bir matrisin boyutunda sıfır/bir matrisi üretir.
>> ones(size(d))
>> zeros(size(d))
“Zero padding” diye anılan işlem. Elimizdeki matrisin değerini değiştirmeden 2n = (belirli bir
sayıya) tamamlamak için 0 ile doldurmak.
>> g(4:6)= (8 2 7)
g =
4’ten 6’ya kadar olan elemanları verince
boşlukları 0 ile dolduruyor.
0 0 0 8 2 7
>> g(10) = 0
g =
↵
↵
7’den 10’a kadar olan elemanları 0 yapıyor.
0 0 0 8 2 7 0 0 0 0
>> f(7) = 0
↵
f =
0 0 0 0 0 0 0
7 elemanlı sıfır vektörü
>> f(7) = 1
↵
f =
1 1 1 1 1 1 1
7 elemanlı birim vektör
>> x = (3: 10);
>> x(3)
↵
ans=
5
3. elemanı çağırma
>> y = x(2:6) ↵
Sub-vector (alt vektör) mevcut vektörün (x) bir
kısmını başka bir vektöre atayabiliriz.
y=
4 5 6 7 8
>> z = x(6:-2:2)
z=
8 6 4
↵
(6. elemandan 2. elemana doğru -2 eksilterek)
Dizi Matematiği
Matlab’te işlem öncelik sırası aşağıdaki gibidir:
•
•
•
Güç alma
Çarpma ve Bölme (eşit öncelikli, hangisi önce geliyorsa o işlem yapılır)
Toplama ve Çıkarma (eşit öncelikli, hangisi önce geliyorsa o işlem yapılır)
4/3 * 2 = (4/3) * 2
4 + 3/4 = 4 + (3/4)
>> y = [9 7 4];
>> z = y * 2 – 3^2 ↵
z=
9 5 –1
>> x = linspace(0, 10, 6) ↵
x=
0 2 4 6 8 10
>> y = linspace(0 1 6) ↵
y=
0 .2 .4 .6 .8 1
>> z = x + y
z=
0 2.2000 4.4000 6.6000 8.8000
>> z = x .* y
z =
0 0.4000 1.6000 3.6000 6.4000
11.0000
10.0000
(.) eleman eleman çarpım uygulamasını sağlar, bölme önünde de kullanılabilir. (.) olmasaydı
satır-sütun sayısı uyuşmazlığı yüzünden hata verirdi.
>> z = x ./ y
z=
NaN
10 10 10 10 10
(NaN = not a number)
(x/y ≠ y\x)
>> z = x .\ y
z=
NaN .1 .1 .1 .1 .1
>> z = x.^2
z=
0 4 16 36 64 100
Eleman İndeksleme ve Zaman İndeksleme
x = [8 6 4] , n = (0:2)
n’nin değeri x’in sırasını (indeksini) verir
plot(n,x)
(x’i n’ye göre çizer)
>> x = [23000 41000 67000 81000] , n = (1996:1999)
x =
23000
41000
67000
81000
n =
1996 1997 1998 1999
Bir vektörün ve indeksinin uzatılması
Sayısal işaret işlemede indeksi de dikkate alarak bir diziyi her iki ucundan uzatmak çokça
yapılan bir işlemdir. Mesela bir dizi ve indeksi aşağıdaki gibi olsun,
>> x = [8 2 7], n =(3 : 5);
diziyi indeksi -2’den 8’e uzayacak şekilde sıfırla destekleyelim.
>> nn = (-4 : 15);
Bunun en kolay yolu diziyi ve indeksini elle girmektir:
>> xx =[0 0 0 0 0 8 2 7 0 0 0], nn=(-2:8)
Bu giriş ekranda şöyle bir çıktı verir:
xx =
0 0
nn =
-2 -1
0
0
0
8
2
7
0
0
0
0
1
2
3
4
5
6
7
8
Uzun vektörlerle çalışıldığında daha pratik yollar gereklidir. Şimdi aynı işlemi MATLAB’in
yeteneklerinden yararlanarak yapalım. n(1)-nn(1) ile x’in soluna gelecek 0 sayısını
buluruz (yani 3-(-2)=5). Sol tarafı 5 sıfırla uzatılmış x dizisi:
>> xx = [zeros(1,n(1)-nn(1)) x]
xx =
0 0 0 0 0 8 2 7
Şimdi de xx’i sağdan nn’in uzunluğuna gelinceye kadar uzatalım:
>> xx(length(nn)) = 0
xx =
0 0 0 0 0 8 2
7
0
0
0
Başta elle elde edilen diziye ulaşılır.
Lineer Cebir ve Matris İşlemleri
>> A= [1 2 3; 4 5 6; 7 8 9], B=[9 7 5; 8 6 4; 3 2 1]
A =
1
4
7
2
5
8
3
6
9
9
8
3
7
6
2
5
4
1
B =
Matrislerin boyutları:
>> size(A), size(B)
ans =
3 3
ans =
3 3
Girilen adresteki elemanların çağrılması:
>> A(3,2), B(1,3)
ans=
8
ans=
5
Matrislerin yan yana ve alt alta birleştirilmesi:
>> C=[A,B], D=[A;B]
C =
1 2 3 9 7 5
4 5 6 8 6 4
7 8 9 3 2 1
D =
1 2 3
4 5 6
7 8 9
9 7 5
8 6 4
3 2 1
>> size(C)
ans=
>> size(D)
ans=
3
6
6
3
Matrislerden istenen alt-vektörlerin çekilip alınması:
>> A(1,:)
A’nın birinci satırını alır. (:) Tüm elemanları ifade eder.
ans=
1 2 3
>> C(:,2)
ans =
2
5
8
% (normal matris çarpımı [karşılıklı satır-sütun])
>> A*B
ans =
34
94
154
25
70
115
16
46
76
(elemanların karşılıklı çarpımını yapar)
>> A.*B
ans =
9
32
21
14
30
16
15
24
9
Örnek:
3 bilinmeyenli 3 denklem. x , y ve z’nin bulunması:
2x + 3y + 4z = 5
5x + 2y + 3z = 10
8x – 2y – 5z = -10
_____________
>> A= [2 3 4; 5 2 3; 8 -2 -5], B=[5; 10; -10]
A =
2
3
4
5
2
3
8
-2
-5
B =
5
10
-10
AX = B
x = [x y z]
x = A-1 B
>> X = inv(A) * B
X =
1.1429
-9.0000
7.4286
x,y ve z bilinmeyenleri sırasıyla 1.1429, -9 ve 7.4286 olarak bulunur.
‘plot’ ve ‘stem’ Komutları
plot girilen noktaların grafiğini ”enterpolasyon”la birleştirirken, stem ayrık olarak çizer.
>> t= 0:0.01:6;
>> y= sin(2*pi*1*t);
>> subplot (2, 1, 1)
>> plot(t,y)
>> subplot (2, 1, 2)
>> t= 0:.125:6; y= sin(2*pi*1*t); stem(t,y,'r')
>> stem(t,y)
t= 0:0.01:6; y= sin(2*pi*1*t); plot(t,y), grid
1
0.5
)
V
(
kil
n
e
g
0
-0.5
-1
0
1
2
3
4
5
6
zaman (s)
5
6
zaman (s)
t= 0:.125:6; y= sin(2*pi*1*t); stem(t,y,'r'), grid
1
0.5
)
V
(
kil
n
e
g
0
-0.5
-1
0
1
2
3
4
Matlab özellikle bir çok bilim ve mühendislik dalı için hazırlanmış zengin “alet kutu”larıyla
büyük kolaylıklar sağlar. Bunlardan bazıları
Signal Processing,
Filter Design,
Image Processing,
Wavelet,
Control Systems,
Robust Control
Communications,
Data Acquisition
Statistical,
Financial,
Neural Network,
Fuzzy Logic,
System Identification,
Symbolic Math,
İlgili alet kutularından yararlanılarak elde edilmiş birkaç örnek grafik aşağıya alınmıştır:
İleri yol transfer fonksiyonu aşağıdaki gibi verilen bir negatif birim geri beslemeli kontrol
sistemini ele alalım.
G(s) =
K ( s + 3)( s + 4)( s + 8)
s 2 ( s + 2)( s + 15)
>> pay = [20*(conv([1 3],(conv([1 4],[1 8]))))];
>> payda = [conv([1 0 0],(conv([1 2],[1 15])))];
Bu sisteme ait açık-çevrim transfer fonksiyonu:
>> sis1 = tf(pay,payda)
Transfer function:
20 s^3 + 300 s^2 + 1360 s + 1920
-------------------------------s^4 + 17 s^3 + 30 s^2
sisteme ait kapalı-açık çevrim transfer fonksiyonu:
>> sis2 = [1];
>> gbsistem = FEEDBACK(sis1,sis2)
Transfer function:
20 s^3 + 300 s^2 + 1360 s + 1920
-------------------------------------s^4 + 37 s^3 + 330 s^2 + 1360 s + 1920
Başka bir sistemin kök yer eğrisini çizelim:
>> num=[1]; denum=[conv(conv([1 2],[1 4]),[1 6])]; rlocus(num,denum)
Root Locus
10
0.84
0.72
0.6
8
6
0.92
System: sys
Gain: 193
Pole: -10
0.98
Damping: 1
2
Overshoot (%): 0
Frequency
(rad/sec):
1010
14
12
0
System: sys
Gain: 480
Pole: 0.00159 + 6.63i
0.46 Damping:
0.3 -0.00024
0.16
Overshoot (%): 100
Frequency (rad/sec): 6.63
4
si
x
A
y
r
a
ni
g
a
m
I
8
6
4
2
-2
0.98
-4
-6
0.92
-8
-10
-16
0.84
0.72
-14
-12
-10
0.6
-8
0.46
-6
Real Axis
0.3
-4
0.16
-2
0
2
Basit bir RC devresiyle kurulan bir alçak geçiren filtrenin frekans analizi:
1 kΩ
vi
vo
0.1 µF
num=[1]; denum=[1e-4 1]; bode(num,denum), grid
Bode Diagram
0
-10
)
B
d(
e
d
uti
n
g
a
M
-20
-30
-40
0
)
g
e
d(
e
s
a
h
P
-45
-90
2
10
3
10
4
10
5
10
6
10
Frequency (rad/sec)
Ayrıca SIMULINK kullanarak çok daha kullanımı ve geliştirmesi kolay uygulamalar
gerçekleştirebiliriz:
1
]
n[
1
x
0.5
0
-4
-2
0
2
4
10
12
14
6
8
10
12
14
6
8
10
12
14
0.5
0
-4
4
]
n[
2
x*]
n[
1
x
-2
0
2
4
n
2
0
-4
-2
0
2
4
n
Convstem.m
Final1.m
8
n
1
]
n[
2
x
6
Download