Bir Polinomun Köklerini ve İntegralini Bulma

İçerik

SORU 1

kokler01 isimli bir fonksiyon yazın. Fonksiyon giriş olarak sembolik bir polinom fonksyon (f) almalı ve çıktı olarak sırasıyla aşağıdakileri vermelidir:

  • Polinomun tüm kökleri (S)
  • Polinomun gerçek kökleri (Sreal). Eğer gerçek kök yoksa Sreal boş bir vektör olmalıdır.
  • Gerçek köklerden polinoma çizilen teğetlerin denklemleri (fm). Eğer gerçek kök yoksa fm boş bir vektör olmalıdır.
  • Fonksiyonun belli bir aralıktaki integrali (intf). Eğer fonksiyonun iki veya daha fazla gerçek kökü varsa bu aralık en küçük ve en büyük köklerin arasındaki kısımdır. Eğer ikiden az gerçek kök varsa bu aralık [-1, 1] aralığı olarak alınmalıdır.

Fonksiyon ayrıca iki adet şekil çizmelidir. Şekiller iki ayrı pencerede olmalıdır, yani birincisini silip üzerine ikinicisi çizdirmemelidir. Şekillerin içeriği:

  • Birinci şekilde fonksiyon kendisi çizdirilmeli, kökleri fonsiyon üzerinde işaretlenmeli ve teğet çizgileri gösterilmelidir. Şeklin başlığında fonksiyonun denklemi yazmalıdır. Çizimin sınırları tüm kökler ve teğetler net ve açık görülecek şekilde otomatik olarak ayarlanmalıdır. Eğer hiç gerçek kök yoksa çizim [-2,2] aralığında yapılabilir.
  • İkinci şekilde fonksiyonun kendisi çizdirilmeli, yukarıdaki tanıma göre integral alınan aralık gösterilmeli ve bu aralıkta fonksiyonun altında kalan alanlar sarı renkte doldurulmalıdır. İntegralin hangi aralıkta alındığı ve çıkan sayısal değer de şeklin başlığında belirtilmelidir. Çizimin sınırları integral alınan bölge açıkça görülecek şekilde otomatik olarak ayarlanmalıdır.

SORU 1’deki fonksiyonun örnek kullanımı 1

Not: Fonksiyonun üç tane gerçek kökü olduğu için ikinci şekildeki integralin en küçük kök -0.6643 ve en büyük kök 4.8957 arasında alınmış olduğuna dikkat edin.

SORU 1’deki fonksiyonun örnek kullanımı 2

Not: Fonksiyonun ikiden az gerçek kökü olduğu için (hiç yok) ikinci şekildeki integralin % -1 ve 1 arasında alınmış olduğuna dikkat edin.

SORU 1’deki fonksiyonun örnek kullanımı 3

Not: Fonksiyonun ikiden az gerçek kökü olduğu için (bir tane var) ikinci şekildeki integralin -1 ve 1 arasında alımış olduğuna dikkat edin. bakımından çıkması beklenen sonuçlar verilmiştir.

SORU 2

MATLAB’a standart ses dosyalarındaki ses sinyallerini yüklemek ve onlar üzerinde işlemler yapmak mümkündür. Bu soruda basit ses sinyalleri üzerinde bazı işlemler yapacağız.

Öncelikle Giris01.wav dosyasını MATLAB’da şu anda bulunduğunuz çalışma klasörüne kaydedin. (Linkin üzerine sağ tıklayıp, Farklı Kaydet diyebilirsiniz).

Aşağıdaki komutları çalıştırmadan önce dosyayı kaydettiğiniz klasörde çalıştığınızdan mutlaka emin olun. Eğer yanlış klasörde olursanız dosyanın bulunamadığına dair hatalar alırsınız. (Hatırla: MATLAB ekranının üst tarafındaki Current Folder isimli alandan çalışma klasörünüzü görebilir ve değiştirebilirsiniz.)

MATLAB’a WAV formatında ses dosyası yüklemek için wavread komutu kullanılır. Aşağıdaki Giris01.wav dosyasının içindeki ses sinyali s değişkenine, sesin örnekleme frekansını fs değişkenine, örnek başına kullanılmış olab bit sayısını da nb değişkenine alır. (Aslında nb değişkenine bu ödev için ihtiyacımız olmayacak).

Okumuş olduğumuz ses sinyalini sound komutu ile dinleyelelim. Bu sinyal bu ödev için oluşturmuş olduğum basit bir ses sinyali olup, birkaç farklı frekansta sinüs sinyalinin birleşimidir.

Ödevin bu kısmında sizden istenen, filtrele01 isimli bir fonksiyon yazmanız olup, fonksiyonun girileri sırasıyla aşağıdaki gibi olmalıdır:

  • Filtrelenecek giriş sinyali (s)
  • Örnekleme frekansı (fs)
  • Sinyalin içindeki farklı frekaslar arasındaki mesafe bilgisi (fAra). Bu soru için fAra = 100 Hz farz edeceğiz. Şu durumda s’nin içindeki farklı sinüs sinyallerinin frekansları arasında en az 100 Hz olmalıdır. Mesela s’nin içinde 500 Hz’lik bir sinyal varsa o zaman [400 Hz, 600 Hz] aralığında başka bir sinüs olamaz, 1000 Hz’lik bir sinüs varsa o zaman [900 Hz, 1100 Hz] aralığında başka sinüs olamaz vs.
  • Sinyale yapılması istenilen işlemi belirten parametre (is).

is parametresi fonskiyonun yapacağı iş ve çıkışını belirler. Şöyle ki:

  • Eğer is = 0 ise: Giriş sinyali s içindeki en güçlü (genliği en falza olan, dolayısıyla FFT’de kendisine karşılık gelen büyüklük en fazla olan) bileşeni bularak bu bileşeni bastıracak bir filtreleme işlemi yapmalıdır. Filtreleme sonucunda bu bileşen en az 40 dB bastırılmalıdır. Sinyalin içindeki diğer bileşenler olduğu gibi korunmalıdır. Filtrelenmiş sinyal, fonksiyonun çıkış değişkeni (y) olarak döndürülmelidir.
  • Eğer is = 1 ise: Giriş sinyali s içindeki en güçlü (genliği en falza olan, dolayısıyla FFT’de kendisine karşılık gelen büyüklük en fazla olan) bileşeni bularak bu bileşen dışındaki tüm bileşenleri bastıracak bir filtreleme işlemi yapmalıdır. Bastırılacak bileşenler en az 40 dB azalmalıdır. Korunacak olan en güçlü bileşen ise olduğu gibi kalmalı ve herhangi bir azalmaya uğramamalıdır. Filtrelenmiş sinyal, fonksiyonun çıkış değişkeni (y) olarak döndürülmelidir.

Fonksiyon ayrıca üç adet şekil çizmelidir. Şekiller üç ayrı pencerede olmalıdır, yani öncekini silip yenisi üzerine çizdirmemelidir. Şekillerin içeriği:

  • Birinci şekilde kullanılan filtrenin frekans cevabı (Bode çizgesi) yer almalıdır.
  • İkinci şekilde Giriş ve Çıkış sinyalleri üst üste çizdirilmelidir.
  • Üçüncü şekilde iki ayrı alt şekil (subplot) olmalı, üstteki alt şekilde girişin FFT katsayılarının büyüküğü, alttaki şekilde de çıkışın FFT katsayılarının büyüklüğü yer almalıdır.

SORU 2’deki fonksiyonun örnek kullanımı 1

İstersek filtrelenmiş sinyali dinleyebilir ve başka bir WAV dosyasına yazdırabiliriz:

SORU 2’deki fonksiyonun örnek kullanımı 2

İstersek filtrelenmiş sinyali dinleyebilir ve başka bir WAV dosyasına yazdırabiliriz:

SORU 2’deki fonksiyonun örnek kullanımı 3

Fonksiyonumuzu denemek için ona rastgele test girişleri üreten bir fonksiyon yazılabilir. Örneğin testSinyaliUret01.m fonksiyonunu çalışma klasörünüzün içine indirin.

Bu fonksiyonu kullanarak bir test sinyali üretip fonksiyonumuza giriş olarak verelim. (Bu işlem dilendiği kadar tekrarlanabilir, her seferinde farklı bir sinyal üretecektir).

BONUS SORU

ayikla01 isimli bir fonksiyon yazın. Fonksiyonun girdileri sırasıyla aşağıdaki gibi olmaldır:

  • Filtrelenecek giriş sinyali (s). Bu sinyal birkaç tane sinüsoidal sinyalin toplamıdır. (Kaç tane sinüsün toplamı olduğu önceden bilinmiyor).
  • Örnekleme frekansı (fs)
  • Sinyalin içindeki farklı frekaslar arasındaki mesafe bilgisi (fAra). Bu soru için fAra = 100 Hz farz edeceğiz. Şu durumda s’nin içindeki farklı sinüs sinyallerinin frekansları arasında en az 100 Hz olmalıdır. Mesela s’nin içinde 500 Hz’lik bir sinyal varsa o zaman [400 Hz, 600 Hz] aralığında başka bir sinüs olamaz, 1000 Hz’lik bir sinüs varsa o zaman [900 Hz, 1100 Hz] aralığında başka sinüs olamaz vs.
  • Sinyalin içindeki bileşenlerin sahip olabileceği minimum genlik (minGenlik). Bu soru için minGenlik = 0.01 alacağız. Şu durumda s’nin içindeki bileşenlerden hiçbirinin genliğinin 0.01’den küçük olmadığı bilgisi bize verilmiş oluyor. Mesela s’nin içinde 0.005*sin(2*pi*200*t) gibi bir bileşen olamaz.

Fonksiyonun çıkışları sırasıyla aşağıdaki gibi olmalıdır:

  • Giriş sinyalini içinde bulunan bileşenlerin frekanslarından oluşan vektör (fo)
  • Giriş sinyali içinde bulunan bileşenlerden oluşan bir matris (yo). Matrisin her sütünu bir bileşene karşılık gelmektedir. Örneğin fo(1) frekansındaki bileşen yo(:,1), fo(2) frekansındaki bileşen yo(:,2) … şeklinde verilmelidir.

Fonksiyon ayrıca iki adet şekil çizmelidir. Şekiller iki ayrı pencerede olmalıdır, yani birincisini silip üzerine ikinicisi çizdirmemelidir. Şekillerin içeriği: * Birinci şekilde sinyali oluşturan bileşenler üst üste çizilmelidir. Zaman aralığı olarak sinyallerin rahatça görülebileceği birkaç periyotluk zaman seçilerek bu aralıkta çizim yapılmalıdır. * İkinci şekilde sinyalin FFT’sinin büyüklüğü çizilmeli ve bileşenlerinin frekanslarına karşılık gelen tepeler X ile işaretlenmelidir.

BONUS SORU’daki fonksiyonun örnek kullanımı 1

BONUS SORU’daki fonksiyonun örnek kullanımı 2

Test sinyali üretmek için yine testSinyaliUret01.m fonksiyonumuzu kullanalım: (Bu işlem dilendiği kadar tekrarlanabilir, her seferinde farklı bir sinyal üretecektir).

İstersek fonksiyonun ayıklamış olduğu bileşenleri sırasıyla dinleyebiliriz. Bunun için aşağıdaki kod kullanılabilir:

BAZI NOTLAR

sound komutuyla ses sinyallerini çalarken bazı frekanstaki seslerin çıkmadığını veya kısık çıktığını fark edebilirsiniz, bu normaldir. Bu durum bilgisayarınızda bulunan hoparlörlerin kapasitesi ile ilgilidir. Düşük frekanslı (bas) sesleri çıkarmak daha zordur ve bunlar için daha büyük ve güçlü hoparlörler gerekir. Genellikle dizüstü bilgisayarlardaki standart hoparlörler 400 Hz’in altındaki sesleri çok iyi çıkartamazlar. Normal masaüstü bilgisayarlardaki hoparlörler ile muhtemelen 250 Hz ve üstündeki sesleri alabilirsiniz. 250 Hz’in altındaki sesler ise eğer buna uygun özel ses donanımınız yoksa (subwoofer) çıkmayacaktır. Subwoofer’ınız varsa muhtemelen 30 Hz’e kadar olan sesleri alabilirsiniz.

ÇÖZÜM

Soruların Çözümleri