Dijital filtre tasarimi : band pass, ayrik zamanda tasarim

Başlatan picusta, 05 Ocak 2014, 15:59:26

picusta

Merhaba arkadaslar,
Dijital filtre tasarlamak ve bu tasarimi tabii ki MCU'da kosturmak istiyorum. Yazilim da sorun yok, yalniz teori'de epey bir unutkanlik var.
Bu isin teorigini ögreneli, uygulayali 10 sene geçmis.
Diyelim elmizde bir audio sinyal var (40KHz örneklenmis). Ben bu sinyali band pass filtreden geçirmek istiyorum, 100 Hz düsük frekans fmin, 1000Hz yüksek kesme fmax.
Bu filtreyi gerçeklestirmek için asamalari adim adim anlatabilirmisiniz ?
Tabii ki, Matlab veya baska yazilimlar ile filtrenin katsayilari direkt bulunabiliyor, ama ben matematiksel hesaplamasini istiyorum.
önce analog filtreyi tasarlayip bunu dijitale çevirmek degil, dogrudan ayrik zamanda tasaralamak istiyorum : p'ye (veya s'e) geçmeden dogrudan Z'den baslayip öyle gitmek.
Ana asamalar söylemiydi  :
- Low pass filtreyi tasarla (kesme frekansi, örnekleme frekansina göre)
- High pass filtreyi tasarala
- iki filtreyi Z 'de çarp ( zamanda convolution)
- Z'den recursive denklemini çikart ve MCU'ya kodla.

Baslangiç olarak 1. dereceden veya 2. dereceden filtre yeterli olur.
Sonra nasil daha keskin filtre yapilir sorusuna bakariz (5. dereceden Butterworth, ya da FFT yapip filtreleyip tekrar ters FFT).

Amacim daha sonra bu frekans araligindaki enerjiyi ölçmek. FFT library hazirda var ama kullanmak istemiyorum.

Evet, dijital filtre hesaplarini ve tasarimini anlatabilecek bir genç var mi ?



Icarus

Walla bende hatırlamıyorum hep matlab'da yaptım. Ama bence önemli bir noktası şu:
Filitre denkleminin seçilmesi, çünkü filitrelerin faz ve step response'ları ve ripple'ları çok farklı olduğundan her uygulamada iyi bir çözüm olmayabiliyorlar.
Birde kesimleriniz ne kadar keskinse ör: 1kHz 0db ama 1.1khz -60db gibi o kadar çok filitre elementine ihtiyaç duyacaktırlar belki MCU yerine minicik bir FPGA daha pratik olabilir.
Unutmadan dijital filitrelerde tıpkı analog kardeşleri gibi osilasyon yapabilirler. Mathlab'de bir spectral analysis yapmak çok kolaylık sağlıyor

z

Birisi bu konuyu anlatirsa ben de minnettar kalirim.

Okulda  filitre tasarim dersi almadik. Bu yuzden once analog tasarim yapip S domeninde transfer fonksiyonunu buluyorum. Daha sonra Z domenine geciyor ve ardindan fark denklemlerini yaziyorum.

En son asamada ise kodlamaya geciyorum.

Bunca zahmete girmeden direk Z domeninde nasil tasarim yapiliyor?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

picusta

Basta dedigim gibi, filtrenin keskinligi ilk asamada önlemli değil. 1. dereceden 20db/dec yeter.
Matlab'i bir kenara birakalim, denklemler lazim bana.
Geri besleme, yapmayacagim, sadece sinyali filtreleyecegim.

- FIR filtre veya IIR filtre olur :
IIR bandpass için daha uygun galiba. Phase farki önemli değil.
FIR Step response ile tasarim için daha uygun.

- Causal veya anti causal da olur.
Biraz gecikme sorun değil.

- Stabilite kriterinin adi neydi ? Jüri gibi birsey miydi ? Z'de daire mi çiziliyordu ? 


Daha sonra, maksat MCU'ya fmin fmax'i girmek, IIR parametrelerini hesaplasin.

picusta

Konu pek ragbet görmedi veya bilenler anlatmak istemiyor, ya da dersi kimse anlamamis.

Sagdan soldan ve internetten buldugum bilgiler asagida yaziyorum.
Lütfen yanlislarimi düzeltin.

Dogruluktan emin değilim, eger birisinde Matlab veya benzeri bir yazilim varsa, filtrelerin bode grafigini koyabilir mi ?

LOW PASS 1. dereceden : ( 1 pol)

H = K*( 1 - z0) / (z - z0)

burada z0 =  e^( - 2*pi*ffiltre/fs)
fs : sample frekansi
ffiltre : kesim frekansi.

HIGH PASS 1. dereceden : ( 1 zero)

H = 1+ bz^-1

b : -1 'den büyük negatif sayi.

b= - e ^( - 2*pi*ffiltre/fs)

DC filter Audio sinyali için (44 KHz)

H = ( 1 - z^-1) / ( 1- R*z^-1 )   

R: 0,995 (44 Khz için)

Bu filtreleri kontrol ettikten sonra sayisal ve yazilimsal uygulamaya geçeriz.

picusta

Sonunda isi 2 çinli stajyere yaptiracagim.
Biri STM32F4 discovery kiti ile yapacak, digeri Texas instrument fixed point DSP ile VC5055.
Matlab'da filtre tasarlama tools'undan FIR veya IIR sentezleyecekler, simule edecekler. C kodu üretip islemcide kosturacaklar.
Fixed point mu, floating point mu farka bakacaklar.