-ELE 371- Sinyaller ve Sistemler PROJE 1 FEHİM TAHA BAĞCI 121201054
(Resim 1) de yankılı y[n] sinyalinin matlabda plot komutu ile çizdirilmiş hali görülmektedir. (Resim 1) a.) y[n] = x[n] + αx[n N] (Denklem 1) Denklem 1 deki sistemin dürtü yanıtını bulmak için; sistemin girdisi x[n] birim dürtü fonksiyonu (δ[n]) olarak alınır; çıktı y[n]=h[n] (dürtü yanıtı) olacaktır. h[n]= δ[n] + α δ[n N] (Denklem 1 deki sistem için dürtü yanıtı) h[0] = δ[0] + α δ[0 N] = 1 h[1] = δ[1] + α δ[1 N] = 0 h[n] = δ[n] + α δ[n N] = α İndisin değeri : 0 n 1000 olarak belirlenmiş. δ[n] ve h[n] sinyalleri aşağıdaki gibi tanımlıdır. δ[n] = 1 ; n=0 0 ; n 0 h[n] = 1 ; n=0 α ; n=n=1000 0 ; otherwise Yukarıda bilinen değerlerden yola çıkılarak oluşturulan dürtü yanıtının matlabda tanımlanmış vektörü ve grafiği (Resim - 2) de görülmektedir. 1
(Resim-2) b.) z[n] + αz[n N] = y[n] (Denklem 2) Denklem 1 deki sistemde: x[n], mikrofona doğrudan kaydedilen gecikmesiz(yankısız) girdi sinyalini ifade eder. x[n N] ise ses kaydı yapılan odadaki duvarlardan yansıyan gecikmeli(yankılı) girdi sinyalini ifade eder. Bu iki sinyalin toplamı çıktı sinyaline (y[n]) eşittir. Denklem 2 deki girdisi y[n] çıktısı z[n] yankısı yok edilmiş sinyal- olan sistem incelenirse; bu sisteme yankılı y[n] girdisine (Denklem 1 in çıktısı) karşılık yankıdan arıtılmış z[n] çıktısı alınır. z[n] istenilen cevaptır. Yani yankısı olmayan ses sinyalidir (x[n]). x[n] Sistem y[n] Sistemin tersi x[n] = z[n] Burada girdi x[n] ile çıktı z[n] konuşmacının doğrudan mikrofona gelen ses sinyalini(yankısız sinyali) ifade eder. Dolayısıyla (Denklem 2) deki sistem (Denklem 1) deki sistemin tersidir ve x[n] = z[n] sistemin bir çözümüdür. Bu sistemler DZD (doğrusal zamanda değişmez) ise sistemlerin dürtü yanıtlarının evrişimleri birim dürtü fonksiyonunu verecektir. (Denklem 1) in çıktısı y[n] (Denklem 2) deki girdi yerine yazılırsa: y[n] = x[n] + αx[n N] z[n] + αz[n N] = y[n] = x[n] + αx[n N] x[n] = z[n] z[n] = x[n] + αx[n N] αz[n N] (Fark Denklemi) z[n] ile x[n] arasında ilişki kuran fark denklemi elde edilir. 2
c.) (Denklem 2) deki sistemin dürtü yanıtı (her) h1[n] olsun. h1[n] nin bulunması için fark denklemindeki y[n] girdisini δ[n] e eşitlemek gerekir. y[n] = δ[n] h1[n] = δ[n] αh1[n N] (Denklem 2 deki sistemin dürtü yanıtını veren fark denklemi) Yukarıdaki fark denklemini çözersek: h1[0] = δ[0] αh1[0 N] = 1 αh1[ N] h1[1] = δ[1] αh1[1 N] = αh1[1 N] h1[2] = δ[2] αh1[2 N] = αh1[2 N]... h1[n] = δ[n] αh1[n N] = α αh1[0] h1[2n] = δ[2n] αh1[2n N]... h1[nn] = δ[nn] αh1[(n 1)N] Yukarıdaki işlemler sonsuza kadar devam ettirilebilir. Çünkü fark denkleminin çözümünde h1[(n 1)N] ifadesi yerine daha önce elde edilen bir ifade yazılamaz. Yani bu fark denklemi bizim belirleyeceğimiz n ve N değerlerine göre sınırlanmaktadır. Bu nedenle (Denklem 2) de verilen yankı yok edici sistemin dürtü yanıtı sonsuz olacaktır. y[n] = δ[n] olursa h1[n]+ α h1[n N] = δ[n] eşitliğinden yararlanarak, istenilen cevabın yakınsamasını bulmak için d=[1 zeros(1,4000)] girdili fonksiyon kullanılır. Her sinyali matlabda (Resim 3) deki gibi tanımlıdır. (Resim 3) 3
Yukarıdaki kodlama da girdi olarak d1=[1 zeros(1,4000)] in alınmasının nedeni y[n] = δ[n] olmasıdır. d1 vektörü 4000 örnekli δ[n] fonksiyonunu belirtmektedir. Çıktının katsayı vektörünün [1 zeros(1,1000) alfa] olarak alınmasının sebebi ise h1[n]+ α h1[n N] = δ[n] h1[n] { δ[n]+ α δ[n N] }= δ[n] şeklinde yazılabilmesidir. { δ[n]+ α δ[n N] } bu eşitlik a.) şıkkında he vektörü olarak hesap edilmişti. d.) Matlabda filter fonksiyonu kullanılırken filter(b,a,y) şeklinde yazılır. Burada b y[n] in katsayısı, a z[n] in uygun katsayı vektörünü ve y de sistemin girdisini ifade etmektedir (y = load.lineup ile yüklenilen sinyal idi). Z[n] sinyalinin matlabda filtrelenmiş (yankıdan arıtılmış) ve plot ile çizdirilmiş hali (Resim 4) de görülmektedir. (Resim 4) (Resim 4) ve (Resim 1) i karşılaştıracak olursak; girdi sinyalinin yankısının giderildiği, sinyallerin grafiklerinin farklı olmasından anlaşılmaktadır. (Resim 4) deki grafik (Resim 1) dekine göre önce sönümlenmiş. Bu farklılık αz[n N] den kaynaklanmaktadır. Zaten koddan anlaşıldığı gibi çıktının(z[n]) katsayı vektörü de gecikmeyi temsil etmesi için a = [1 zeros(1,1000) alfa] olarak alındı. Eğer bu gecikme olmasaydı z[n] = y[n] olacaktı. Matlabda yankısı giderilmiş z[n] sinyali sound(z,8192) komutu ile dinlenirse yankının giderildiği anlaşılır. e.) Birinci ve ikinci sistemin seri bağlantısını aşağıdaki gibi modellenmişti: x[n] Sistem y[n] Sistemin tersi x[n] = z[n] Bu sistemin dürtü yanıtını bulabilmek için girdi olarak birim dürtü fonksiyonu alınırsa çıktı olarak birim dürtü yanıtı elde edilir. Bu birim dürtü yanıtı h2[n] (hoa) olarak tanımlı olsun. (x[n] = δ[n]) 4
z[n] = x[n] + αx[n N] αz[n N] h2[n] = δ[n] + α δ [n N] αh2[n N] bu şekilde yazılır. h2[0] = δ[0] + α δ [ N] αh2[ N] = 1 αh2[ N] h2[1] = δ[1] + α δ [1 N] αh2[1 N] = αh2[1 N] h2[2] = δ[2] + α δ [2 N] αh2[2 N] = αh2[2 N] h2[n] = δ[n] + α δ [N N] αh2[n N] = α αh2[0] =α α(1 αh2[ N]) = α 2 h2[ N] h2[2n] = δ[2n] + α δ [2N N] αh2[2n N] = α (α 2 h2[ N]) = α 3 h2[ N] h2[nn] = α n+1 h2[-n] olarak bulunur. n n/n h2[n] = ( α) (n/n)+1 h2[-n] h2[-n] başlangıç koşulu bilinirse fark denklemi çözülmüş olur. Başlangıç değeri bilinmediği için: h2[n] = h[n]*h1[n] (seri bağlanan iki sistemin dürtü yanıtı) kullanılmalıdır. Hoa adlı vektör yani h2[n] = h[n] * h1[n] iki sistemin dürtü yanıtının evrişimi matlabda (Resim 5 ) deki gibi tanımlanmaktadır. (Resim 5) (Resim 5 ) de görülen grafiğin birim dürtü fonksiyonunun grafiği gibi çıkması bekleniyordu çünkü biliniyor ki; birbirinin tersi olan 2 sistemin seri bağlantısından oluşan sistemin dürtü yanıtı δ[n] e eşittir. 5
Yani h2[n] = h[n] * h1[n] = δ[n] olmalıdır. (Resim 5) deki grafiğin δ[n] ile aynı gelmemesinin sebebi sonsuza giden h1[n] dürtü yanıtının 4001 örnekle sınırlandırılmasıdır. Grafikten anlaşıldığı gibi 4001 örnekli h1[n] sonsuza gitseydi olabilseydi h2[n](hoa) δ[n] e yakınsayacaktı. Vektör he ve her in konvolüsyon çarpımlarının (h[n]*h1[n]) birim dürtü fonksiyonunun çıkmamasının bir sebebi de bu sistemlerin DZD olmaması olabilir. Çünkü b.) şıkkında da belirttildiği üzere iki sistemin konvolüsyon çarpımının birim dürtü fonksiyonunu vermesi neticesi ancak iki DZD sistem için geçerlidir. Fakat bu iki sistemin DZD olduğu bilinmektedir o yüzden bu olasılık ortadan kalkmış olur. f.) R yy yi R xx cinsinden yazmak için: R yy = y[n] * y[ n] R xx = x[n] * x[ n] ve δ[n] = δ[ n] y[n] = x[n] + αx[n N] yerine yazarsak; R yy = y[n] * y[ n] = ( x[n] + αx[n N] ) * ( x[ n] + αx[ n N] ) = { x[n] * ( δ[n] + α δ[n N] ) }* { x[ n] * ( δ[ n] + α δ[ n N] )} Konvolüsyon çarpımının değişme özelliği kullanılarak x[n] ve x[ n] i yanyana getirilir: { x[n] * x[ n] } * ( δ[n] + α δ[n N] ) * ( δ[ n] + α δ[ n N] ) Daha sonra dağılma özelliğinden ( δ[n] + α δ[n N] ) * ( δ[-n] + α δ[-n N] ) ifadesinin çarpımı yapılır: Bilinmelidir ki δ[n] = δ[ n] ; = { x[n] * x[ n] }*{ δ[n]*δ[ n] + ( δ[n]*α δ[ n N] ) + ( δ[ n]*α δ[n N] ) + ( α δ[n N]*α δ[ n N] ) } = { x[n] * x[ n] }*{ δ[n] + α δ[n N] + α δ[n N] α 2 δ[n]} { x[n] * x[-n] } yerine R xx [n] yazılırsa: = R xx [n]* { δ[n] + α δ[n N] + α δ[n + N] α 2 δ[n]} Rxx * δ[n] = Rxx (Sifting özelliği) R yy [n]= R xx [n] + αr xx [n N] + αr xx [n + N] + α 2 R xx [n] R yy [n]= R xx [n](1 + α 2 ) + α( R xx [n N] + R xx [n + N]) (Denklem 3) Aşağıda (Resim 6,7,8) de görülen, matlabda yapılan işlemler şu şekildedir: Öncelikle NX ve alpha parametreleri sabit kalırken N deki değişiminin Ryy ye etkisi incelendi(nx1=nx2 & alpha1=alpha2), daha sonra N ve alpha parametreleri sabit tutulup NX deki değişimin Ryy ye etkisi incelendi (N2=N3 & alpa2=alpha3) ve son olarak da alpha daki değişimin 6
Ryy ye etkisini incelemek için, NX ve N parametreleri sabit tutuldu(nx3=nx4 & N3=N4). Bunlara ek olarak, değiştirilen parametrelerle oluşturulan Ryy fonksiyonlarının alabilecekleri maksimum ve minimum değerlerindeki değişim; alpha, NX ve N parametrelerindeki değişimlerin fonksiyonların genliğine etkilerini göstermektedir. (Resim 6) 7
(Resim 7) 8
(Resim 8) Alpha, N ve NX deki değişimin genliğe olan etkisinden çıkarım yapılabilir. NX 3 kat artırıldığında maksimum genlik değeri de yaklaşık olarak 2 kat artmaktadır. Alpha nın 2 kat artması sinyalin genliğinde çok az bir değişim meydana getirmiştir. Ancak sadece bir tane peak değeri iyi tahminler için yeterli olmayacaktır. Yukarıdaki yaklaşımın geçerli olabilmesi için; girdi sinyalinin değerlerinin değişmemesi gerekir. Yukarıdaki örnek incelenirse; girdi X, x = randn(1,nx) olarak tanımlandı. Yani her seferinde random değerler alan x sinyali için her zaman aynı çıktı alınmayacaktır. Dolayısıyla bu yaklaşım ideal bir çözüm olmaz. Hatta apendis bölümünde bulunan kod matlabda çalıştırılacak olursa rapor ile aynı olmayan çıktılar alınacaktır. Bu yaklaşımın yapılmasının amacı otokorelasyon metodunun işleyişi hakkında bilgi sahibi olmaktır. g.) f şıkkında yapılan yaklaşım projede verilen, load lineup.mat ile matlaba yüklenen y2 ve y3 sinyallerine uygulanırsa: södürme faktörleri(α2 α3) ve gecikme süreleri (N2 N3) tahmin edilebilir. f deki işlemler y, y2 ve y3 sinyalleri için tekrarlanırsa : Genliklerin maksimum değerlerindeki değişimlerden (α 2 α 3 ) ve (N 2 N 3 ) değerleri tahmin edilebilir. f.) şıkkında yapılan yaklaşım y y2 ve y3 girdisi için daha uygun bir yaklaşım haline gelir. Çünkü bu girdiler herzaman aynı değerlerden oluşmaktadır. Yine de çok yakın tahminlerde bulunulamayacağından faklı bir yaklaşıma ihtiyaç duyulmaktadır. Farklı bir yaklaşım olarak, yine otokorelasyon metodu kullanılır fakat bu sefer matlabın xcorr metodundan yararlanılır. xcorr metodu matlabda y,y2 ve y3 sinyallerinin otokorelasyonları analitik işleme gerek duymadan 9
hesaplamamızı sağlar. α ve N değerlerini tahmin edebilmek için grafiklerden yararlanılmalıdır. Grafikler (Resim 9) de görülmektedir. (Resim 9) de görülen grafikler incelenirse görülür ki Ryy[n] en yüksek değeri n = 0 da alacaktır. Diğer peak noktaları ise n = N ve n = N değerlerinde olacaktır. Grafiklerde kırmızı yuvarlaklar ile gösterilen değerler n=0, n=n, n= - N oldugu değerlerdir. Matlabda negatif indis değerleri tanımlanmaz dolayısıyla grafiklerin altında yazan indis değeri 0 dan başlar ve 14000 de biter. Bu nedenle aslında n=0 değeri matlabdaki grafikde 7000 e denk gelmektedir. Ek olarak n=n=1000 değeri 8000 e ve n= -N= - 1000 değeri ise 6000e denk gelmektedir. Grafiklerin üzerine eklenen yeni indis değerleride zaten bu açıklamanın daha net görülmesi için eklendi. İlk grafik y sinyaline ait olduğu için 2. ve 3. grafikleri ilki ile karşılaştırırsak. N2 gecikme değeri ve N3 gecikme değerlerini grafikden okunduğu kadarıyla tahminen N2=500, N3 1 =750 ve N3 2 =2250 yakaşık değerleri bulunur. -7000-5000 -3000-1000 0 1000 3000 5000 7000 9000 n=0; n= N; n=n; 3500-7000 -5000-3000 -500 0 500 3000 5000 7000 n=0; 12500 n= N2; n=n2; 7000 10
-7000-5000 -2250-750 0 750 2250 5000 7000 n=0; 14000 n= N3 2 ; n= N3 1 ; n=n3 1 ; n= N3 2 ; 4000 3000 (Resim-9) Aritmetik olarak incelenirse f.) şıkkında hesap edilen; R yy [n]= R xx [n](1 + α 2 ) + α( R xx [n N] + R xx [n + N]) (Denklem 3) kulanılmalıdır. Bu denklem grafikte 3 peak değeri varsa kullanılır. Dolayısıyla y2 için uygun bir denklemdir. Ryy[0] = 9000 ve Ryy[N] = Ryy[ N]= 3500 Ryy2[0] = 12250 ve Ryy2[N] = Ryy2[ N]= 7000 Ryy2[N] = 2. Ryy[N] α2= 2x(0.5) α2=1 Eğer grafikte 3 yerine 5 tane peak noktası bulunuyorsa (3.grafikteki gibi) f.) şıkındaki yazılan (Denklem 3) aşağıdaki gibi tekrar yazılmalıdır: (5 peak değeri için 2 ayrı sönümlenme katsayısı ve onlara ait 2 ayrı gecikme süresi vardır : α3 1,N3 1 ve α3 2 N3 2 Ryy3= y[n] * y[ n] R xx = x[n] * x[ n] ve δ[n] = δ[ n] y[n] = x[n] + α 1 x[n N 1 ] + α 2 x[n N 2 ] şeklindedir. Yerine yazarsak; Ryy3= y[n] * y[ n] = ( x[n] + α 1 x[n N 1 ] + α 2 x[n N 2 ] ) * ( x[ n] + α 1 x[ n N 1 ] + α 2 x[ n N 2 ] ) = { x[n] * (δ[n] + α 1 δ[n N 1 ] + α 2 δ[n N 2 ] ) }* { x[ n]*( δ [ n] + α 1 δ[ n N 1 ] + α 2 δ[ n N 2 ] )} Konvolüsyon çarpımının değişme özelliği kullanılarak x[n] ve x[ n] i yanyana getirilir: ={ x[n] * x[ n] } * {(δ[n] + α3 1 δ[n N3 1 ] + α3 2 δ[n N3 2 ] ) * ( δ [ n] + α3 1 δ[ n N3 1 ] + α3 2 δ[ n N3 2 ] )} 11
Daha sonra dağılma özelliğinden {(δ[n] + α3 1 δ[n N3 1 ] + α3 2 δ[n N3 2 ] ) * ( δ [ n] + α3 1 δ[ n N3 1 ] + α3 2 δ[ n N3 2 ] )} ifadesinin çarpımı yapılır: Bilinmelidir ki δ[n] = δ[ n] ve Rxx = x[n] * x[ n] ; =Rxx*{ δ[n] + α3 2 1 δ[n] + α3 2 2 δ[n] + α3 1 δ[n N3 1 ] + α3 2 δ[n N3 2 ] + α3 1 δ[n+n3 1 ]+ α3 2 δ[n+n3 2 ] + α3 1 α3 2 δ[n ( N3 2 N3 1 ) + α3 1 α3 2 δ[n + ( N3 2 N3 1 ) ] } Rxx * δ[n] = Rxx (Sifting özelliği) Ryy3[n]= Rxx[n] + α3 2 1 Rxx[n] + α3 2 2 Rxx[n] + α3 1 Rxx[n N3 1 ] + α3 2 Rxx[n N3 2 ] + α3 1 Rxx[n+N3 1 ]+ α3 2 Rxx[n+N3 2 ] + α3 1 α3 2 Rxx[n (N3 2 N3 1 )] + α3 1 α3 2 Rxx[n + ( N3 2 N3 1 )] 2 Ryy3[n]= Rxx[n] {1 + α3 1 + α3 2 2 } + α3 1 { Rxx[n N3 1 ] + Rxx[n+N3 1 ] } + α3 2 { Rxx[n N3 2 ] + Rxx[n+N3 2 ] } + α3 1 α3 2 { (Rxx[n (N3 2 N3 1 )] + Rxx[n + ( N3 2 N3 1 )] } (Denklem 4) Ryy[0] = 9000 ve Ryy[0] = Ryy[ N]= 3500 Ryy3[0] = 14000 ve Ryy3[N3 1 ] = Ryy3[ N3 1 ]= 4000 Ryy3[0] = 14000 ve Ryy3[N3 2 ] = Ryy3[ N3 2 ]= 3000 α3 1 = 0.6 α3 2 = 0.45 α3 1 ve α3 2 değerlerinin hesabı, Ryy[0], Ryy[N], Ryy3[0], Ryy3[N3 1 ] ve Ryy3[N3 2 ] in grafikten okunan değerlerinin (Denklem 4) te yerine konulmasıyla elde edilen denklem sisteminin çözümünden bulundu. SONUÇ: Bu projede yankılı ses sinyalinin yankısız hale getirilmesi incelendi. Bu süreçte sinyallerin ve sistemlerin özelliklerinden faydalanıldı. Sönümlenme katsayıları ve gecikme değerleri farklı olan diğer iki yankılı sinyalinde gecikme değerleri ve sönümlenme katsayıları hesaplanarak yankıdan arıtıldı. Yapılan tahminler asıl değerlere çok yakındır. Çünkü bu tahminler yapılırken, matlabda grafiklerdeki peak noktalarının değerleri matlabda çizilen grafikler üzerine zoom yapılarak belirlendi. 12
Apendis Matlab Kodları %Fehim Taha BAĞCI %121202054 ELE371 % Proje-1 %Matlab kodlarını çalıştırmadan önce bilinmelidir ki; proje soruları ayrı %ayrı cevaplanmıştır. Proje sorularının cevaplarının anlamlı olabilmesi %için her soru için belirtilen kodlar ayrı ayrı çalıştırılmalıdır. Ayrıca %soruların içerisindeki grafikler de ayrı ayrı çizdirilmelidir. Bu sayede %bu dosya proje raporu ile uyumlu bir matlab dosyası olacaktır. load lineup.mat; %sound(y,8192) %başlamadan önce yankılı sinyali dinleyin! %a.) n=0:1000; alfa=0.5; N=1000; d=[1 zeros(1,n-1)]; he=[1 zeros(1,n-1) alfa]; stem(he); %c.) d1=[1 zeros(1,4000)]; her=filter(1,he,d1); stem(her); %d.) a=[1 zeros(1,n-1) alfa]; z=filter(1,a,y); plot(z); z2=filter(1,a,y2); %z2 ve z3,y2 ve y3 ün yankısı giderilmiş çıktısıdır. z3=filter(1,a,y3); %sound(z,8192) yankısı yok edilmiş sinyali dinleyin! %e.) hoa=conv(he, her); stem(hoa) 13
%f.) NX1=1000; x1=randn(1,nx1); N1=1000; alpha1=0.5; ya=filter([1 zeros(1,n1) alpha1],1,x1); Ryya=conv(ya,fliplr(ya)); plot([-nx1+1:nx1-1],ryya); NX2=1000; x2=randn(1,nx2); N2=8000; alpha2=0.5; yb=filter([1 zeros(1,n2) alpha2],1,x2); Ryyb=conv(yb,fliplr(yb)); plot([-nx2+1:nx2-1],ryyb); NX3=3000; x3=randn(1,nx3); N3=8000; alpha3=0.5; yc=filter([1 zeros(1,n3) alpha3],1,x3); Ryyc=conv(yc,fliplr(yc)); plot([-nx3+1:nx3-1],ryyc); NX4=3000; x4=randn(1,nx4); N4=8000; alpha4=1.0; yd=filter([1 zeros(1,n4) alpha4],1,x4); Ryyd=conv(yd,fliplr(yd)); plot([-nx4+1:nx4-1],ryyd); A=[max(Ryya);max(Ryyb);max(Ryyc);max(Ryyd)] B=[min(Ryya);min(Ryyb);min(Ryyc);min(Ryyd)] %g.) c1=xcorr(y); plot(c1); c2=xcorr(y2); plot(c2); c3=xcorr(y3); plot(c3); % c1=xcorr(y) ile y sinyalinin otokorelasyonu bulunur. % yani Ryy[n] i bulmuş oluruz. % c2=xcorr(y2) ile y2 sinyalinin otokorelasyonu bulunur. % c3=xcorr(y3) ile y3 sinyalinin otokorelasyonu bulunur. 14