ELE 371 SİNYALLER VE SİSTEMLER PROJE 1 - RAPOR Konuşma Kaydında Bulunan Bir Yankıyı Yok Etmek Ali Burak PARIM 101201010 Bölüm 1 : (a) İstenildiği gibi yankı sisteminin dürtü yanıtı hesaplanmış ve çizdirilmiştir. Bölüm 2 : (b) Denklem (1) ve denklem (2) deki ifadeleri birleştirirsek, yani seri olarak bağlarsak, (3) şeklinde üçüncü bir denklem elde ederiz. Yankı yok eden sistemin girdisinin y[n] olduğunu ve denklem (1) de gösterildiği gibi x[n] girdisiyle oluşan y[n] sinyalini biliyorduk. Bu bilgiler doğrultusunda y[n] i x[n] cinsinden yazdık. Burada sistemin çıktısı, durumundadır. Beklentimiz girdi olarak birim dürtü fonksiyonu verdiğimizde dürtü cevabı olarak da bir birim dürtü fonksiyonu elde etmek. Fark denklemleriyle bu durumu göstermeye çalışalım. Birim dürtü fonksiyonu girdi olduğunda denklem (3) aşağıdaki hali alacaktır. Şimdi dan başlayarak recursion yöntemi ile istediğimiz sonucu bulmaya çalışalım. n = 0 n = 1 n = N n = 2N n = 3N
Sisteme n<0 için bir sinyal verilmediğini biliyoruz. Dolayısıyla n<0 için. Bu durumda olarak ortaya çıkacaktır. n = N olduğunda olmasına rağmen aynı katsayıya sahip oldukları için birbirlerini götürecek ve olacaktır. n kn, k=0,1,2, için dürtü yanıtı hep sıfır olacaktır. Her n değeri için dürtü yanıtını topladığımızda, dürtü yanıtı, olarak ortaya çıkar. Sistem özelliklerinden seri bağlı iki sistem eğer birbirinin tersi iki sistem ise girdi ile çıktının aynı olacağını biliyoruz. Denklem (3), denklem (1) ve denklem (2) nin seri bağlantısı olduğuna göre denklem (1) ve (2) birbirinin tersi denklemlerdir diyebiliriz. Öyleyse eşitliği de açıkça görülmektedir. Diğer bir ifadeyle sistem için bir çözümdür. Bölüm 3 : (c) Denklem (2) teki 2. terimi, 3.terimin yanına atarsak denklem aşağıdaki hali alır. Bu ifadenin üzerinde recursion yöntemiyle fark denklemi uygulayabiliriz. Dürtü cevabını bulmak için sistemin girdisi olan i dürtü fonksiyonu yapalım. n=0 için 0<n<N için. Çünkü n-n<0, yani dürtü cevabının önceki terimleri de 0. Ayrıca n 0, yani dürtü fonksiyonu da 0. Bu nedenle dürtü cevabı 0. n=n için 0<n<N için. Çünkü n 0, yani dürtü fonksiyonu da 0. Ayrıca, n kn (k=0,1,2, ), yani dürtü cevabının önceki terimleri de 0. Bu nedenle dürtü cevabı 0. n=2n için n=3n için. n=kn için Yukarıdaki ifadede bütün n değerleri için dürtü cevabını toplarsak karşımıza aşağıdaki gibi bir ifade çıkar.
Sistemin katsayıları ise n=kn, k=0,1,2, iken a vektörü olarak tanımlarsak, diğer bütün değerler için 0 olacaktır. Yani a=[1 (999 tane 0) α (999 tane 0) (-α) 2 (999 tane 0).] şeklinde olacaktır. Grafikler aşağıda gösterilmiştir.
Bölüm 4 : (d) İstenildiği gibi fitler komutuyla ses sinyalimizi işledik. (c) de bulunan a katsayılar vektörü burada z sinyal çıktısının katsayılar vektörü olarak kullanıldı. sound fonksiyonuyla z dinlendiğinde beklenildiği gibi ses yankıdan arınmış halde duyuldu. Grafikler aşağıda gösterilmiştir. %%%(d)%%% z=filter(a,1,y); Bölüm 5 : (e) he ve her vektörlerini evreşimi beklendiği gibi bir birim dürtü fonksiyonu elde edilememiştir. Bu iki dürtü cevabı, birbirinin tersi olan iki sisteme ait olmalarına rağmen bu sonucun ortaya çıkmasının elbet bir sebebi vardır. Denemelerim sonucu edindiğim izlenim, bu iki dürtü cevabının gerçekte sonsuza kadar devam eden iki sinyalin 1000 ve 4001 örneklemeyle elde edilmiş halleri olduğu için böyle bir sonuç doğurdukları olmuştur. Şöyle ki, bu içi dürtü yanıtının evrişimi sonsuza giderken birbirini sıfırlayan terimler içermektedir. Ancak biz bu sinyalleri birkaç bin örneklemeden oluşan halleri üzerinden evrişime tabi tuttuğumuz için sonsuza giderken sıfırlanan ara terimlerden indisi örnekleme aralığında değeri olan en büyük olan varlığını korumaktadır. Çünkü sonrasında gelecek ve onu sönümleyecek sinyaller örneklemenin içinde bulunmamaktadır. Örnekleme sayımızı azalttığımızda bu terimlerin daha küçük bir indiste daha büyük bir genlikle; örnekleme sayımızı arttırdığımızda ise daha büyük bir indiste daha küçük bir genlikle ortaya çıktığı görülecektir. Grafikler aşağıda gösterilmiştir.
Bölüm 6 : (f) Bu bölümde yankısız hali bilinmeyen bir sinyalin yankısının gecikmesini ve söndürme faktörünü nasıl tahmin ederiz? sorusuna bir cevap bulunabilmiş değildir. Ancak eğer sinyalin yankısız halini bildiğimiz varsayımı ile hareket edecek olursak, sonraki paragrafta anlatılacağı gibi bir yöntem geliştirilebilir. - Yankılı sinyalimiz ile yankısı bulunmayan sinyalimizin grafiklerini çizdirir ve karşılaştırırız. - Yankılı sinyalin, gecikme noktasına gelene kadar, yankısız sinyal ile aynı karakteristiği göstereceğini göz önünde bulundurarak; iki grafik arasında fark gözlemlenen ilk nokta gecikme (N) olarak kaydedilir. ( Bu işlem, iki sinyalin vektör elemanlarının birebir eşliliği, bir for döngüsü içinde kontrol edilerek farklılık gözlemlenen ilk indisin bit değişkene kaydedilmesi ile de yapılabilir.) - Sonrasında iki sinyalin (N) noktasındaki genlik farkı tespit edilerek, bu fark yankısız sinyalin (N-(N-1)) indisindeki değerine bölünür. Bu değer söndürme faktörü (α) olarak kaydedilir. - Bu yöntemi doğrulamak için bulunan (N) ve(α) değerleri ile bir katsayı vektörü oluşturularak fitler fonksiyonu ile orijinal (yankısız) sinyal elde edilmeye çalışılır. Bu yöntem dışında ipucu olarak verilenler ışığında xcorr fonksiyonuyla y,y2,y3,z sinyalleri ile bu sinyallerin zamanda terslerini işlediğimizde bir sinyalle ilgili bir takım özellikler taşıdığı anlaşılan ancak tarafım tarafında yorumlanamayan grafikler elde edildi.
Bölüm 7 : (g) Bu bölümde (f) bölümünde tasarladığımız yankı tespit etme sistemini test edebiliriz. Çünkü sinyalin yankıdan arındırılmış halini biliyoruz. Yukarıda tasarladığımız sistemi aynen burada deneyebiliriz. Ancak belirtmem gerekir ki bu sistemin çalışırlığından çok emin değilim. Çünkü sağlama yapmak amacıyla y ve z vektörlerini bu işlemlere tabi tuttuğumda N sayısını ve söndürme faktörü (α) yı elde etmeme rağmen, yöntemin her sistem için çalışırlığı konusunda yeterli örnekleme yapma imkanı bulunamamıştır.
Matlab kodları ve sonuçları ekler bölümünde mevcuttur. >> whos EKLER Name Size Bytes Class Attributes N 1x1 8 double N_1 1x1 8 double N_2 1x1 8 double N_3 1x1 8 double Ryy 13999x1 111992 double Ryz 13999x1 111992 double Rzz 13999x1 111992 double a 1x7000 56000 double a0 1x1000 8000 double a1 1x1000 8000 double a2 1x1000 8000 double a3 1x1000 8000 double a4 1x1000 8000 double a5 1x1000 8000 double a6 1x1000 8000 double a7 1x1000 8000 double a8 1x1000 8000 double a9 1x1000 8000 double a_sample 1x10000 80000 double alfa 1x1 8 double
alpha 1x1 8 double alpha_1 1x1 8 double alpha_2 1x1 8 double alpha_y2 1x1 8 double alpha_y3 1x1 8 double ans 1x1 8 double bayrak 1x1 1 logical d 1x4001 32008 double delta 1x10000 80000 double deltaf 1x1001 8008 double deltaf_yanki 1x1001 8008 double gecikme 1x1 8 double gecikme_y2 1x1 8 double gecikme_y3 1x1 8 double he 1x1001 8008 double her 1x4001 32008 double hoa 1x2001 16008 double ii 1x1 8 double n 1x1001 8008 double say 1x1 8 double stdnoise 1x1 8 double y 7000x1 56000 double y2 7000x1 56000 double y3 7000x1 56000 double z 7000x1 56000 double zdelta 1x10000 80000 double
Bölüm 1 : (a) %%%(a)%%% n = 0:1000; N = 1000; alfa = 0.5; deltaf = [1 zeros(1,n)]; % N+1 elemanla sınırlandırılmış %bir dürtü fonksiyonu deltaf_yanki = [zeros(1,n) 1]; %dürtü fonksiyonunun %N kadar ötelenmiş hali he = deltaf + alfa * deltaf_yanki; >> stem(he) >> title('(a)"he" yankı sistemi dürtü yanıtı') >> Bölüm 2 : (b) Bu bölümde yapılan işlemler matematiksel olarak ifade edilmiştir. Bölüm 3 : (c) %%%(c)%%% a0=[1 zeros(1,n-1)]; %bu vektör n<n için (denklem2)deki sistemin % katsayılar vektörüdür. a1=(-alfa)*a0; % Burada ise (denklem2)de ifade edilen sistemin a2=(-alfa)*a1; % 0<n<7001 için oluşan katsayılar vektörü sonsuzu a3=(-alfa)*a2; % örneklemek amacıyla tanımlanıp 'a' vektörü olarak a4=(-alfa)*a3; %atanmıştır. a5=(-alfa)*a4; a6=(-alfa)*a5; a7=(-alfa)*a6; a8=(-alfa)*a7; a9=(-alfa)*a8; a_sample=[a0(1:n) a1(1:n) a2(1:n) a3(1:n) a4(1:n) a5(1:n) a6(1:n) a7(1:n) a8(1:n) a9(1:n)]; delta = [1 zeros(1,10*n-1)]; %Bu satırda tanımlanan delta vektörü ise %sonsuz algısı yaratacak bir birim dürtü %sinyali örneklemesi oluşturmaktadır. %Amaç giderek küçülen ama sonsuza giden %dürtü cevabını örneklemektir. zdelta = filter (a_sample, 1, delta); a=[a0(1:n) a1(1:n) a2(1:n) a3(1:n) a4(1:n) a5(1:n) a6(1:n)]; %Ses dosyamız 7000 terimli bir vektör olduğu için katsayılar %vektörü olan 'a' da 7000 elemanlı olarak gösterilmiştir.
d=[1 zeros(1,4*n)]; her=filter(a,1,d); >> stem(zdelta) >> title('denklem(2) sonsuz dürtü yanıtı örneklemesi') >> stem(her) >> title('denklem(2) d girdisi için dürtü yanıtı') >> stem(a) >> title('katsayılar vektörü "a"') >> Bölüm 4 : (d) %%%(d)%%% z=filter(a,1,y); >>plot(z) >>title('(d)yankıdan arınmış ses dosyası') >> Bölüm 5 : (e) %%%(e)%%% hoa=conv(he,her(1:n+1)); >> stem(hoa) >> title('(e)"hoa" toplam sistem dürtü yanıtı') >> Bölüm 6 : (f) Bu bölümde yapılan işlemler, rapor üzerinde kuramsal olarak ifade edilmiştir. Onun dışında, matlab üzerinde sadece otokorelasyon denenmiştir. Kuram (g) bölümünde uygulanma imkanı bulmuştur. Kodlar o bölüm üzerinden incelenebilir.
%%%(f)%%% Ryy=xcorr(y,fliplr(y)); Ry3y3=xcorr(y3,fliplr(y3)); Ry2y2=xcorr(y2,fliplr(y2)); Rzz=xcorr(z,fliplr(z)); >> stem(ryy) >> title('(f) Ryy') >> stem(ry2y2) >> title('(f) Ry2y2') >> stem(ry3y3) >> title('(f) Ry3y3') >> stem(rzz) >> title('(f) Rzz') >> Bölüm 7 : (g) %%%(g)%%% N_1=0; %gecikme indisleri tanimlandı N_2=0; N_3=0; for say=1:7001; %gecikme indisini bulan döngüler bayrak=z(say)==y2(say); %bayrak=ilk farklılığın tespit edildiği indis if(bayrak==0) N_1=say; break end end for say=1:7001; bayrak=z(say)==y3(say); if(bayrak==0) N_2=say; break end end for say=1:7001; bayrak=z(say)==y(say); if(bayrak==0) N_3=say; break end end alpha=(y(n_3)-z(n_3))/z(n_3-(n_3-1)); %söndürme faktörleri alpha_1=(y2(n_1)-z(n_1))/z(n_1-(n_1-1)); alpha_2=(y3(n_2)-z(n_2))/z(n_2-(n_2-1)); >> N_1 N_1 =
502 >> N_2 N_2 = 752 >> N_3 N_3 = 1001 >> alpha_1 alpha_1 = 0.7000 >> alpha_2 alpha_2 = 0.7500 >> alpha alpha = 0.5000 >>