plot(ph);
***************************************************************************
REAL
Real komutu Karmaşık bir sayı veya işaretin gerçek kısmı ifade eder. x herhangi bir karmaşık ifadeyi göstermek üzere real(x) biçiminde kullanılır. İstediğimiz ifadeyi real komutunda parantez içinde belirttiğimizde ifadenin gerçek kısmını elde ederiz.
En basit biçimde,
Örnek 1
EDU» real(2+3*i)
ans =
2
2+3i ifdesinin gerçek kısmı 2’dir.
Örnek 2
Karmaşık sayılardan oluşan 3x3’lük bir matrisin gerçek kısmı.
EDU» x=[3+2*i 1-3*i 4+2*i
2+6*i 4-1*i -3-3*i
7+3*i -1-2*i -3+2*i]
x =
3.0000 + 2.0000i 1.0000 - 3.0000i 4.0000 + 2.0000i
2.0000 + 6.0000i 4.0000 - 1.0000i -3.0000 - 3.0000i
7.0000 + 3.0000i -1.0000 - 2.0000i -3.0000 + 2.0000i
EDU» real(x)
ans =
3 1 4
2 4 -3
7 -1 -3
Örnek 3
3x4’lük bir matrisin gerçek ve imajiner kısmı.
EDU» x=[1+3*i 2-1*i -5-7*i
2+4*i 0+5*i 0-3*i
5-4*i 2+2*i 2
-2 -2-2*i 0]
x =
1.0000 + 3.0000i 2.0000 - 1.0000i -5.0000 - 7.0000i
2.0000 + 4.0000i 0 + 5.0000i 0 - 3.0000i
5.0000 - 4.0000i 2.0000 + 2.0000i 2.0000
-2.0000 -2.0000 - 2.0000i 0
EDU» r=real(x) %gerçek kısmı
r =
1 2 -5
2 0 0
5 2 2
-2 -2 0
EDU» i=imag(x) %imjiner kısmı
i =
3 -1 -7
4 5 -3
-4 2 0
0 -2 0
EDU» y=r+i*j % a+jb şeklinde toplamı aldığımızda yeniden x’i verir
y =
1.0000 + 3.0000i 2.0000 - 1.0000i -5.0000 - 7.0000i
2.0000 + 4.0000i 0 + 5.0000i 0 - 3.0000i
5.0000 - 4.0000i 2.0000 + 2.0000i 2.0000
-2.0000 -2.0000 - 2.0000i 0
Örnek 4
Transfer fonksiyonu
İçin kutup-sıfır grafiğini çizdirelim.
EDU» a=[1 -0.75 0.90 -0.25];
EDU» b=[0.25 0.36 0.36 0.25];
EDU» [z,p,k]=tf2zp(b,a);
EDU» zplane(z,p)
şimdi bu kutup ve sıfırların karmaşık kısımlarını yok edip sadece gerçek kısımlarını alip transfer fonksiyonunu bulalım.
EDU» z=real(z);
EDU» p=real(p);
EDU» zplane(z,p)
EDU» [b,a]=zp2tf(z,p,k);
EDU» b
b =
0.2500 0.3600 0.1221 0.0121
EDU» a
a =
1.0000 -0.7500 0.1829 -0.0146
yeni transfer fonksiyonu:
Örnek 5
Blackaman filtresinin fourier dönüşümünün gerçek kısmının genlik ve faz yanıtı
EDU» y=fir1(10,0.25,blackman(11)); 10. dereceden kesim frekansı 0.25π
EDU» f=fft(y); fourier dönüşümünü al
EDU» r=real(f); fourier dönüşümünün gerçek kısmı
EDU» subplot(2,2,1)
EDU» stem(abs(f))
EDU» title('filtrenin genlik yanıtı')
EDU» subplot(2,2,3)
EDU» stem(angle(f))
EDU» title('filtrenin faz yanıtı')
EDU» subplot(2,2,2)
EDU» stem(abs(r))
EDU» title('fourier dönüşümünün gerçek kısmı alınmış filtrenin genlik yanıtı')
EDU» subplot(2,2,4)
EDU» stem(angle(r))
EDU» title('fourier dönüşümünün gerçek kısmı alınmış filtrenin faz yanıtı')
blackman filtresinin fourier dönüşümü karmaşık bir ifade olduğundan gerçek kısmı alındığında şekilde görüldüğü gibi faz yanıtı değişmiştir. Faz yanıtı sadece 0 ve π değerlerini almaktadır.
Örnek 6
Fourier dönüşümü alınan bir işaretin ters fourier dönüşümü
EDU» t=0:1000; % 0 1000 arasında tanımlı
EDU» x=sin(2*pi*0.01*t); % sinüs işareti
EDU» plot(x)
EDU» subplot(3,1,1)
EDU» plot(x)
EDU» title('sinüs işareti')
EDU» f=fft(x); % fourier dönüşümü
EDU» a=ifft(f); % yeniden ters fourier dönüşümü
EDU» subplot(3,1,2)
EDU» plot(a)
EDU» title('fourieri alınmış sinüs işaretinin ters fourieri')
EDU» r=real(a); %yeniden orijinal işareti elde etmek için
EDU» subplot(3,1,3)
EDU» plot(r)
EDU» title(' ters fourier in gerçek kısmı')
bir işaret’in ifft ile ters fourier’i alınınca işaret zamanda çizdirilmek istenirse önce real komutu kullanılarak gerçek kısmı alınmalıdır.
Örnek 7
EDU» n=-10:10; %-10,10 arasında tanımlı
EDU» x=n.*0; % x’in tüm değerleri sıfır
EDU» for i=1:length(n)
if(n(i)==0)x(i)=1; %x’in sıfır anındaki değeri 1
elseif(n(i)==1)x(i)=-1; %x’in bir anındaki değeri -1
elseif(n(i)==2)x(i)=1; %x’in iki anındaki değeri 1
elseif(n(i)==3)x(i)=2; %x’in üç anındaki değeri 2
end
end
EDU» subplot(2,1,1)
EDU» stem(x) % x’i çiz
EDU» title('orjinal işaret')
EDU» f=fft(x) % x’in fourier dönüşümü
f =
Columns 1 through 4
3.0000 -2.3671 + 1.4961i 0.7729 - 2.1867i 1.0245 + 1.6708i
Columns 5 through 8
-2.2002 - 0.1464i 2.2760 - 1.7052i -1.3460 + 3.0796i 0 - 3.4641i
Columns 9 through 12
1.0102 + 2.8851i -1.1784 - 1.8639i 0.5082 + 1.1076i 0.5082 - 1.1076i
Columns 13 through 16
-1.1784 + 1.8639i 1.0102 - 2.8851i 0.0000 + 3.4641i -1.3460 - 3.0796i
Columns 17 through 20
2.2760 + 1.7052i -2.2002 + 0.1464i 1.0245 - 1.6708i 0.7729 + 2.1867i
Column 21
-2.3671 - 1.4961i
EDU» r=real(f) %fourier dönüşümünün gerçek kısmı
r =
Columns 1 through 7
3.0000 -2.3671 0.7729 1.0245 -2.2002 2.2760 -1.3460
Columns 8 through 14
0 1.0102 -1.1784 0.5082 0.5082 -1.1784 1.0102
Columns 15 through 21
0.0000 -1.3460 2.2760 -2.2002 1.0245 0.7729 -2.3671
EDU» y=real(ifft(r)); %ters fourier’i
EDU» subplot(2,1,2)
EDU» stem(y)
EDU» title('fourierinin gerçek kısmı alınmış işaret')
Örnek 8
EDU» n=-10:10; %-10:10 arasında tanımlı
EDU» x=n.*0;
EDU» for i=1:length(n)
if(n(i)==0)x(i)=1; %birim dürtü işareti
end
end
EDU» subplot(2,2,1)
EDU» stem(x) %birim dürtü işaretini çiz
EDU» title('birim dürtü işareti')
EDU» f=fft(x);
EDU» subplot(2,2,3)
EDU» stem(abs(f)) %birim dürtü işaretin genlik spektrumunu çiz
EDU» title('birim dürtü işaretin genlik spektrumu')
EDU» r=real(f); %fourierin gerçek kısmı
EDU» subplot(2,2,4)
EDU» stem(abs(r)) %gerçek kısmın genlik spektrumu
EDU» title('fourierin gerçek kısmı alınmış işaret')
EDU» subplot(2,2,2)
EDU» stem(real(ifft(r))) %ters fourier alarak çiz
EDU» title('fourierin gerçek kısmı alınmış işaretin genlik spektrumu')
Örnek 9
EDU» x=[1 -5 -8 1 -3 -4]
x =
1 -5 -8 1 -3 -4
EDU» y=exp(x)+sqrt(x) % y=ex+
y =
Columns 1 through 4
3.7183 0.0067 + 2.2361i 0.0003 + 2.8284i 3.7183
Columns 5 through 6
0.0498 + 1.7321i 0.0183 + 2.0000i
EDU» real(y) %y’nin sadece gerçek kısmı
ans =
3.7183 0.0067 0.0003 3.7183 0.0498 0.0183
EDU» imag(y) %y’nin sadece imajiner kısmı
ans =
0 2.2361 2.8284 0 1.7321 2.0000
Örnek 10
EDU» x=[1+1i 2+2i 3+3i 4+4i
4+2i -2-2i 1-4i -2
2i -3 -4i 0]
x =
1.0000 + 1.0000i 2.0000 + 2.0000i 3.0000 + 3.0000i 4.0000 + 4.0000i
4.0000 + 2.0000i -2.0000 - 2.0000i 1.0000 - 4.0000i -2.0000
0 + 2.0000i -3.0000 0 - 4.0000i 0
EDU» y=3.*x+sqrt(x)-x %y=3x+-x
y =
3.0987 + 2.4551i 5.5538 + 4.6436i 7.9030 + 6.7882i 10.1974 + 8.9102i
10.0582 + 4.4859i -3.3564 - 5.5538i 3.6005 - 9.2496i -4.0000 - 1.4142i
1.0000 + 5.0000i -6.0000 - 1.7321i 1.4142 - 9.4142i 0
EDU» r=y-j*imag(y) % y’den imajiner kısmı çıkartıyoruz
r =
3.0987 5.5538 7.9030 10.1974
10.0582 -3.3564 3.6005 -4.0000
1.0000 -6.0000 1.4142 0
EDU» real(y) % y’nin gerçek kısmı üstteki ifadeyle aynı
ans =
3.0987 5.5538 7.9030 10.1974
10.0582 -3.3564 3.6005 -4.0000
1.0000 -6.0000 1.4142 0
Örnek 11
EDU» x=fir1(50,0.2,hamming(51));
EDU» fx=fft(x);
EDU» ax=abs(fx);
EDU» subplot(3,2,5)
EDU» plot(ax,'k')
EDU» title('hamming süzgeci genlik yanıtı')
EDU» t = 0:0.001:0.6;
EDU» y = sin(2*pi*100*t) + sin(2*pi*500*t)+sin(2*pi*750*t) + sin(2*pi*1000*t)+sin(2*pi*2500*t) + sin(2*pi*1200*t);
EDU» fy=fft(y);
EDU» ay=abs(fy);
EDU» subplot(3,2,3)
EDU» plot(y,'k')
EDU» subplot(3,2,1)
EDU» plot(y,'k')
EDU» title('farklı frekansta 6 sinüs toplamı')
EDU» subplot(3,2,3)
EDU» plot(ay,'k')
EDU» title('sinüslerin genlik spektrumu')
EDU» c=conv(x,y);
EDU» subplot(3,2,2)
EDU» plot(c)
EDU» fc=fft(c);
EDU» ac=abs(fc);
EDU» subplot(3,2,4)
EDU» plot(ac)
EDU» title('tek sinüsün genlik spektrumu')
EDU» subplot(3,2,2)
EDU» title('süzgeç çıkışı tek sinüs');
Örnek 12
EDU» t=0:1:100; %0 ile 100 arasında tanımlı
EDU» x=t.*0; % x’in tüm değerlerini sıfırla
EDU» for i=1:length(t)
if(t(i)<25)x(i)=2; % 25’ten küçükse x’in değeri 2
else x(i)=0;
end
end
EDU» subplot(2,2,1)
EDU» plot(x) %çiz
EDU» title('tek darbe')
EDU» fx=fft(x); %fourier dönüşümünü al
EDU» ax=abs(fx); %genlik spektrumu
EDU» subplot(2,2,2)
EDU» plot(ax)
EDU» title('genlik spektrumu (sinc)')
EDU» subplot(2,2,3)
EDU» plot(ax)
EDU» title('genlik spektrumu (sinc)')
EDU» y=fir1(20,0.2,hamming(21)); %hamming filtresi 20.dereceden
EDU» c=conv(x,y); %darbeyi süzgeçle (konvolüsyon)
EDU» fc=fft(c); %süzgeç çıkışının fourier’i
EDU» ac=abs(fc); %genlik spektrumu
EDU» subplot(2,2,4)
EDU» plot(ac)
EDU» title('süzgeçlenmiş darbenin genlik spektrumu')
EDU» subplot(2,2,2)
EDU» plot(c)
EDU» title('süzgeçlenmiş darbe')
********************************************************************
ROOTS
Bir polinomun köklerini MATLAB’ ta bulmak için kullanılan fonksiyonlardandır. Genel kullanım biçimi
r = roots ( p )
olarak verilir.
buradaki p ; polinomu , r ise onun köklerini ifade eder.
MATLAB’ ta aşağıdaki komut girildiğinde
>> help roots
ROOTS Find polynomial roots.
ROOTS(C) computes the roots of the polynomial whose coefficients
are the elements of the vector C. If C has N+1 components,
the polynomial is C(1)*X^N + ... + C(N)*X + C(N+1).
See also POLY, RESIDUE, FZERO.
ROOTS Polinom köklerini bulma
ROOTS (C) C vektörünün elemanları olan katsayıların polinom köklerini hesaplar. Eğer C N+1 bileşen içeriyorsa, polinom C(1)*X^N + ... + C(N)*X + C(N+1) ‘dir.
POLY, RESIDUE, FZERO fonksiyonlarına da bakınız.
ÖRNEKLER
1 ) p (x) = 5x3 + 3x2+2x+1 polinomu verilsin. Bu polinomun köklerini MATLAB ile bulalım.
Çözüm :
>> p = [ 5 3 2 1 ] ;
>> r = roots(p)
r =
-0.0288 + 0.6066i
-0.0288 - 0.6066i
-0.5424
3.dereceden denklemin 3 adet kökü olan x1 = -0.0288 + 0.6066i
x2 = -0.0288 - 0.6066i , ve
x3 = -0.5424 karşımıza çıkar.
2 ) p(x) = 2x5 - 3x3+51x-241 polinomu verilsin. Bu polinomun köklerini MATLAB ile bulalım.
Çözüm :
>> p = [2 0 -3 0 51 -241 ] ;
>> r = roots(p)
r =
-2.2949 + 1.7063i
-2.2949 - 1.7063i
1.0936 + 2.2220i
1.0936 - 2.2220i
2.4025
3 ) Aşağıda verilen sabit katsayılı diferansiyel denklemin katsayılarının köklerini bulalım.
4 d3 y + d2y + 7 dy + 3y = 15 x ( t )
dt3 dt2 dt
Çözüm :
>> a= [4 1 7 3] ;
>> p=roots(a)
p =
0.0814 + 1.3456i
0.0814 - 1.3456i
-0.4127
4 ) Bir sabit katsayılı fark denkleminin ( SKFD ) katsayıları daha önce roots fonksiyonu ile bulunmuştur. Bu denklemin katsayılarını bulalım
a = [3.9393 , -0.2363 + 0.8600i , -0.2363 - 0.8600i] x : Sistem girişi
b = [1.0928 + 0.3883i , 1.0928 - 0.3883i , -0.5056] y : Sistem çıkışı
Çözüm :
>> a = [3.9393 , -0.2363 + 0.8600i , -0.2363 - 0.8600i] ;
>> x= poly (a)
x =
1.0000 -3.4667 -1.0663 -3.1335
>> b = [1.0928 + 0.3883i , 1.0928 - 0.3883i , -0.5056] ;
>> y= poly (b)
y =
1.0000 -1.6800 0.2399 0.6800
Demek ki SKFD :
y[n] – 1.68 y[n-1] + 0.2399 y[n-2] + 0.68 y[n-3] = x[n] –3.4667 x[n-1] – 1.0663 x[n-2] – 3.1335 x[n-3] olur.
5 ) X(z) = 0.18 + 0.2 z-1 + 0.2 z-2 + 0.18 z-3 için kutup-sıfır grafiğini MATLAB ile
1 - 0.87 z-1 + 0.92 z-2 – 0.26z-3
çizdirelim.
Çözüm :
>> a= [ 1 -0.87 0.92 -0.26]; paydanın katsayıları
>> b= [ 0.18 0.2 0.2 0.18 ]; payın katsayıları
>> [z,p,k]= tf2zp(b,a) X(z) transfer fonksiyonunu sıfır-kutup gösterimine çevir
z = sıfırlar
-1.0000
-0.0556 + 0.9985i
-0.0556 - 0.9985i
p = kutuplar
0.2587 + 0.8189i
0.2587 - 0.8189i
0.3525
k = 0.1800 katsayı
>> zplane (z,p) kutup-sıfır grafiğini çizdir.
Şekil 1 . Program 5 için kutup-sıfır grafiği
Sıfır ve kutuplar aşağıdaki gibi de bulunabilir.
>> b= [ 0.18 0.2 0.2 0.18 ];
>> z=roots(b)
z =
-1.0000
-0.0556 + 0.9985i
-0.0556 - 0.9985i
>> a= [ 1 -0.87 0.92 -0.26];
>> p=roots(a)
p =
0.2587 + 0.8189i
0.2587 - 0.8189i
0.3525
6 ) X(z) = 1 – 0.64 z-2 için kutup-sıfır grafiğini çizdirelim .
1 - 0.2 z-1 – 0.08 z-2
Çözüm :
>> b= [ 1 0 -0.64] ; payın katsayıları
>> a= [ 1 -0.2 -0.08]; paydanın katsayıları
>> [z,p,k] = tf2zp(b,a) X(z) transfer fonksiyonunu sıfır-kutup gösterimine çevir
z =
0.8000
-0.8000
p =
0.4000
-0.2000
k =
1
>> zplane (z,p) kutup-sıfır grafiğini çizdir.
Sıfır ve kutuplar aşağıdaki gibi de bulunabilir.
>> z=roots(b)
z =
0.8000
-0.8000
>> p=roots(a)
p =
0.4000
-0.2000
Şekil 2 . Program 6 için kutup-sıfır grafiği
7 ) 6. örnekteki ifadenin kısmi kesirlere açılımını MATLAB ile bulalım.
>> b= [ 1 0 -0.64] ; payın katsayıları
>> a= [ 1 -0.2 -0.08]; paydanın katsayıları
>> [r,p,k] = residuez(b,a) X(z)’ i kısmi kesirlere aç
r = kalıntı vektörü ( rezidü )
-2
-5
p = kutuplar
0.4000
-0.2000
k = bölen katsayıları
8
Program çıktıları doğrultusunda X(z)’nin kısmi kesirlere açılımı
X(z) = k0 + r0 / (1- p0 z-1) + r1 / (1 –p1 z-1 ) = 8 + [ -2 / 1-0.4z-1] + [-5 / 1+0.2z-1] elde edilir.
8 ) MATLAB kullanarak sıfır ve kutuplarını roots fonksiyonu ile belirlediğimiz bir sistemin frekans yanıtını bulalım.
Çözüm :
>> p=[0.5 ; 0.45+0.5i ; 0.45-0.5i ]; 3 adet kutbun konumunu tanımla
>> z=[-1 ; i ; -i] ; 3 adet sıfırın konumunu tanımla
>> zplane(z,p) sıfır-kutup grafiğin çizdir
>> [num,den]=zp2tf (z,p,k) sıfır-kutup bilgilerini transfer fonksiyonu şekline çevir
num =
8 8 8 8
den =
1.0000 -1.4000 0.9025 -0.2263
>> [h,w]= freqz(num,den); transfer fonksiyonundan frekans yanıtını elde et
>> subplot(2,1,1); 2 grafikten ilkini al
>> plot(w,abs(h)); genlik yanıtını çizdir
>> title('midX(e^j^Omega)mid')
>> subplot(2,1,2); 2 grafikten ikincisini al
>> plot(w,angle(h)); faz yanıtını çizdir
>> title('ARG(X(e^j^Omega))')
Şekil. 3 Program 8 için sıfır-kutup grafiği
Şekil. 4 Program 8 için frekans yanıtı genlik ve faz grafikleri
9 ) Bir sistemin giriş ve çıkış fonksiyonları verilmiş ise sıfır-kutup grafiğini çizdirerek sistemin kararlı olup olmadığını MATLAB ile anlama :
>> b= [1 0.2 -0.5 1.16]; sistem çıkış fonksiyonu (y(n)) katsayıları
>> a= [1 - 1.6500 0.7025 -0.6649]; sistem giriş fonksiyonu (x(n)) katsayıları
>> p=roots(a) sistem kutupları
p =
0.5404 + 0.8549i
0.5404 - 0.8549i
>> z=roots(b) sistem sıfırları
z =
-1.2878
0.5439 + 0.7778i
0.5439 - 0.7778i
>> zplane(z,p) sıfır-kutup gösterimini çizdir.
Şekil . 5 Program 9 için sıfır-kutup grafiği
Açıklama : Sistem kutuplarının ikisi de birim çember içerisinde yer aldığından verilen sistem kararlı olmaktadır.
10 ) Aşağıdaki program ; bir ses dosyasının okunması MATLAB ile okunması ve roots fonksiyonu ile değerlerini belirlediğimiz bir dürtü yanıtı ile konvüle edildiğindeki genlik ve faz yanıtlarını göstermektedir.
>> a=[ 1.0000 -0.6236 0.1104 -0.0068 0.0001 -0.0000]; dürtü yanıtı katsayıları
>> h=roots(a)
h =
0
0.3764
0.1267
0.0993
0.0211
>> [y,fs,n] = wavread('orhan veli10.wav'); ses dosyasını oku
>> c=conv(y,h); ses işareti ile dürtü yanıtını konvüle et
>> subplot(2,2,1);
>> plot(y); ses işaretini çizdir.
>> subplot(2,2,2);
>> plot(h); dürtü yanıtını çizdir
>> spec=fft(y); ses işaretinin spektrumu için hızlı fourier dönüşümünü al
>> mag=abs(spec); spektrum genlik yanıtı
>> ph=angle(spec); spektrum faz yanıtı
>> subplot(2,2,3);
>> plot(mag); genlik yanıtını çizdir
>> subplot(2,2,4);
>> plot(ph); faz yanıtını çizdir.