Assembly ile STM32F4 Üzerinde FIR Filtre Tasarımı

Dijital filtreler analog filtrelere göre daha kararlı çalışırlar. Filtrenin karakteristliği sadece katsayılar değiştirilerek kolayca değiştirilebilir. Dijital filtreler işlemcilerde büyük işlem yükü getirirler. Bunun için dijital filtrelerin DSP üzerinden yapılması ya da hard bir şekilde FPGA ile yapılması performansı arttırabilir. Bu yazımda filtre işlemlerini yaparken Cortex-M4 işlemcisinin Fixed-Point DSP'sinden yararlanacağım. Dijital filtrelerin 2 farklı türü vardır, bunlardan biri FIR yani Finite Impulse Response diğeri IIR yani Infinite Impulse Response'dir. Her iki filtrenin de çalışma mantığı benzerdir. Belli aralıklarla alınan veriler önceden hesaplanmış katsayılar ile çarpılıp toplanarak çıkışa gönderilir. FIR filtrenin tasarımı aşağıdaki gibidir:

Katsayıları MATLAB programının "Filter Design & Analysis Tool" uygulasından hesaplayabiliriz.

Aşağıda Cortex-M4 işlemcisinin DSP komutları gösterilmiştir. Bu komutların hepsi 1 cycle'da gerçekleşir.

Bu komutları kullaranak aşağıdaki gibi bir kod yazılabilir.

Program bu hali ile 48 tap için 140 cycle'da bir döngüyü tamamlamaktadır. Programdaki bütün döngüler loop unrolling ile açılarak daha hızlı gerçekleşmesi sağlanmıştır. Loop unrolling ile ilgili daha önce yazdığım yazıya buradan ulaşabilirsiniz.

FIR filtrelerin tipine göre katsatılar arasında ilişkiler vardır:

  • Tip-1 : Katsayı sayısı tek, katsayılar aralarında simetrik
  • Tip-2 : Katsayı sayısı çift, katsayılar aralarında simetrik
  • Tip-3 : Katsayı sayısı tek, katsayılar aralarında ters simetrik
  • Tip-4 : Katsayı sayısı çift, katsayılar aralarında ters simetrik

Bu ilişkilere göre programda optimizasyonlar yapılabilir. Örneğin Tip-2 filtre için ilk ADC verisi ile son ADC verisi toplanıp katsayı ile tek seferde çarpılabilir.

Yüksek hızlarda katsayıların tutulduğu flash memory, ram'den daha yavaş kalacağından katsayılar programın başında flash'dan ram'e aktarılması programın daha hızlı çalışmasını sağlayacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir