filter2Bu yazımda matlab ortamında özelliklerini belirleyeceğimiz alçak geçiren (low-pass) bir IIR filtre tasarımını yapıp simülasyon ile doğruladıktan sonra yandaki resimden de görüldüğü üzere analog çeviricimiz ile giriş sinyalimizi örnekleyip, digital IIR filtre  fonksiyonumuzdan geçirerek çıkış sinyalimizi elde edeceğiz. Amacım IIR filtre tasarımını matlab fda-tool ile nasıl yapılmasını gerektiğini göstermek olduğundan konuyla ilgili akademik düzeydeki bilgilere ve FIR filtreler arasındaki farklara Dijital Sinyal İşleme(DSP) kaynaklarından ulaşabilirsiniz.

IIR FİLTRE ÖZETİ

Genel hatlarıyla IIR filtre nedir, analog filtrelere göre ne tür avantajları vardır, hangi durumlarda kullanılması önerilir sorularını yanıtlayarak başlamakta fayda var.

IIR filtreler genelde

  • Butterworth
  • Chebyshev
  • Elliptic
  • Least Pth-Norm

gibi analog filtre tasarımında kullanılan metodlar ile önce laplace domeninde ki transfer fonksiyonu G(s) elde edilir ve

tasarim_asamasi

Bilinear dönüşümü kullanılarak dijital yani z-ortamında ki karışılığı olan G(z), uygun bir örnekleme frekansına göre oluşturulur.

lowpass
Analog 2.Derece Filtre
400px-Biquad_filter_DF-II.svg
Dijital 2.Derece Kanonik Form IIR Filtre

 

 

 

 

 

 

 

Analog filtreler ile kıyaslandığında ise dijital filtrelerin çok önemli bir kaç üstünlüğü ön plana çıkıyor. Bunlar:

  1. Herhangi bir elektronik devre kurulması gerekmediğinden PCB sadeleşiyor
  2. Analog filtre transfer fonksiyonu oluşturulurken kullanılan pasif elemanların ortam koşullarına göre değerleri değişkenlik gösterebildiğinden ve tam olarak istediğiniz filtre karakteristiğini elde edebilmeniz için 0 toleranslı malzemelerin olmaması
  3. Tasarladığınız filtre karakteristiği değiştirilmek istenebilir. Bu durumda analog bir filtre için pasif eleman değerlerinin yeniden hesaplanıp tekrar lehimleme işlemi yapılması gerekecektir. Ancak dijital filtre kullanılıyor ise sadece yazılım güncellemesiyle çok daha hızlı ve kolay bir modifikasyon yapılacaktır.
  4. Adaptif bir filtre uygulaması için dijital yaklaşım kaçınılmazdır.

Dezavantaj olarak ise kullanılacak mirodenetleyici, örnekleme frekansı ve filtre derecesine bağlı olarak dijital filtremiz için ciddi bir işlem gücü gereksinimi ortaya çıkabilir. Filtremiz mikromuzun diğer işlemlerini(özellikle kontrol rutinlerini) geciktirmesine/aksamasına neden olmuyorsa, motor kontrol, AC-DC yada DC-DC dönüştürücü uygulamalarında yüksek frekanslı bileşenlerin temizlenmesi için kullanılabilir.

MATLAB İLE IIR FİLTRE TASARIM AŞAMALARI

Dijital filtremiz için gerekli katsayıları çok fazla efor sarf etmeden, matlabın fdatool ortamını kullanarak IIR ve FIR filtreleri kısa sürede oluşturabiliyoruz. Bunun için matlab komut satırına fdatool yazıldığında

fdatool

şekilde ki, 7 bölgeden oluşan arayüz karşımıza çıkıyor. Kısaca bu bölgeleri açıklayalım.

Current Filter Information: Filtre tasarımı için gerekli parametreler girilip filtre tasarımının başlatılması için Design Filter butonuna basılınca, filtremizle ilgili genel bilgilerin gösterdiliği bölümdür.

Filter Specifications: Filtremizin bode, impulse, group delay, kutup ve sıfır gibi karakteristik özelliklerinin grafiksel ifade edildiği bölümdür.

Response Type: Yüksek geçiren, alçak geçiren, bant geçiren ve bant durduran olmak üzere filtre türünün seçildiği alandır.

Filter Order: Filtre derecemizin seçimini en düşük dereceli filtreyi üretecek şekilde matlaba bırakabilir veya kendimiz bu değeri belirtebiliriz. Eğer “Specific Order” seçilir ise “Magnitude Specifications” ve “Options” bölgelerindeki parametreler için giriş yapılmasına gerek kalmaz ayrıca Fstop ile Fpass değerlerine yerine yalnızca köşe frekansını(Fc) belirteceğimiz bir alan oluşur. Bu durum aşağıdaki görüntüde gösterilmiştir.

fdatool3

Frequency Specifications: Örnekleme frekansı, “Filter Order” bölümünde ki seçime bağlı olarak köşe frekansı(Fc) yada Fpass, Fstop değerleri istenilen filtre karakteristiğine göre belirtilir. Örnekleme frekansını köşe yada Fpass frekansının 10-40 katı olacak şekilde ayarlamanız uygun olacaktır.

Magnitude Specifications: “Filter Order” bölümünde ki minimum order seçilmesi durumunda geçiş bandında izin verilen salınım ve durdurma bandına gelindiğinde filtrelenen sinyalde ne kadarlık bir bastırma/zayıflatma yapılacağını belirttiğimiz bölümdür.

Design Method: Filtre tasarlanırken matlabın hangi metodu kullanmasını istediğimizi burada belirtiyoruz.

Options: “Filter Order” bölümünde ki minimum order seçilmesi durumunda, matlaba durdurma yada geçiş bantlarından hangisinin bizim için daha önemli olduğunu belirtiyoruz. Böylece matlab tarafından filtremiz oluşturulurken bu durum dikkate alınarak filtremizin tasarlanmasını sağlamış oluyoruz.

Tasarım tamamlandıktan sonra matlab ortamında basit bir simülasyon ile filtremizin doğrulamasını yapmak için, aşağıda ki ekran görüntüsünde siyah kare içine alınan “Model” bölümüne gidilir. Bu bölümde ki ayarlamalar yapıldıktan sonra Realize Model butonuna basılarak, dijital filtremiz için simulink ortamında blok diyagram oluşturulur.

realize_model2

 IIR KÜTÜPHANESİNİN OLUŞTURULMASI

Matlab ile oluşturulan dijital filtre Direk-Form’da olup aşağıda ki yapı için filtre derecesinden bağımsız genel bir kütüphane oluşturmak yazılım tarafında ki işlerimizi oldukça kolaylaştıracağından dolayı önceden oluşturmuş olduğum aşağıda ki kaynak kodu projelerinizde kullanabilirsiniz.

sema_blokici2

Source dosyası:

Header dosyası:

Kütüphanenin nasıl kullanıldığını bir sonraki bölümde yer alan demo uygulamada verilmiştir.

Filtre katsayılarının değerlerinin kolay bir şekilde güncellenebilmesi için bir fonksiyon yazmanız güzel olacaktır. Uzun zamandır C++ ile uygulama geliştirdiğim için bu kütüphanemi güncellemedim. İşin bu kısmı sizlere kalıyor.

SİMÜLASYON VE GERÇEKLEME

Filtre özellikleri şu şekilde olsun:

  • Butterworth alçak geçiren
  • Fc = 2kHz
  • Fs = 10 * Fc = 20kHz
  • Filtre derecesi 2
bode2
Frekans Cevabı

Belirlenen özelliklere göre filtre tasarlandığında bode çıktısı yukarıda ki gibi olmaktadır. Burada mavi genlik, kırmızı ise faz cevabıdır. Simulink ile elde edilen simulasyon sonucu ise aşağıda ki gibidir.

sim_output
100Hz, 1kHz ve 2kHz lik sinyaller için fitre cevabı

Stm32f429-disco kitini kullanarak, giriş sinyalleri olarak sırasıyla 100Hz, 1kHz ve 2kHz frekanslı sinüsler uygulayıp filtre cevaplarımızı incelediğimizde sonuçlar aşağıda ki gibi olmaktadır. Elde edilen çıkış sinyalleri faz ve genlik cevaplarıyla örtüşmektedir. Çıktılarda ki sarı sinyal girişi turkuaz ise çıkışı göstermektedir.

uygulama_100hzuygulama_1000hzuygulama_2000hz

Algoritmanın koşturulduğu kod parçası aşağıya eklenmiştir, herhangi bir işlemci için benzer yapıda bir kod yazarak aynı sonuçları elde edebilirsiniz. Örnekleme frekansı için Timer2 kullanılmış olup, 20kHz frekans ile ADC1 çevre birimine tetikleme gönderilmiştir.

Yazılımın tamamına buradan ulaşabilirsiniz. Donanım ile ilgili ayarlamaları ise iir_filter.ioc dosyasını STM32CubeMx programıyla açarak inceleyebilirsiniz.

IIR FİLTRE TASARIMI Ve GERÇEKLEMESİ

Leave a Reply