IIR filtreleri (ve özellikle Butterworth filtresi) nedensel midir?
Sinyal işlemede yeniyim. Şimdi filtrelemeyi öğreniyorum ve yüksek geçiş filtresi (HPF) ve daha sonra bant geçiren filtre (BPF) uygulamaya çalışıyorum. Ben filtreleri uygulamak Python 3.8
ile NumPy
ve SciPy
.
Çevrimdışı durum için (önceden kaydedilmiş bir zamanı filtrelemek) bir Butterworth yüksek geçiren filtre tasarladım ve signal.filtfilt
işlevi kullanarak zaman etki alanındaki sinyale uyguladım . Bununla birlikte, dokümantasyonun gösterdiği gibi, bu yaklaşım sadece çevrimdışı durumlar için iyidir ve gerçek zamanlı için değildir, çünkü filtre sinyali ileriye ve sonra geriye doğru tarar. signal.freqz
Fonksiyonu kullanarak filtreden frekans yanıtını kurtarabilirim .
Şimdi bu filtrenin gerçek zamanlı olarak da çalışmasını istiyorum (bu nedenle nedensel olması gerekiyor ve bu tür filtreler için bunun mümkün olup olmadığını soruyorum. Sorularım şunlar:
- Doğru anlarsam, Butterworth filtreleri IIR (sonsuz dürtü yanıtı) filtreleridir. Bu doğru mu?
- IIR filtresi nedensel mi? Tüm IIR filtreleri nedensel olmayabilir ve bazılarının olduğu ve bazılarının olmadığı olabilir. IIR filtrelerinin nedensel olduğu durumlar nelerdir?
- Butterworth filtreleri nedensel midir? Her zaman değilse, hangi durumda nedenseldir?
- 3'ün cevabı doğruysa, hem zaman alanında hem de frekans alanında nedensel Butterworth filtresi nasıl uygulanır? (I kullanabilir
SciPy
gibi fonksiyonlarısignal.butter
,signal.freqz
vs.)
İlgili bağlantılar:
- Butterworth filtresinin tasarlanmasına yardımcı olun
- filtfilt: https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.filtfilt.html
Teşekkür ederim.
Yanıtlar
- Evet, Butterworth IIR'dir. Bir dürtüden kaynaklanan bozulma teknik olarak sonsuza kadar sürer.
- Evet, [uygulanabilir] IIR'lerin tümü nedenseldir.
- Evet, # 1 ve # 2 yüzünden.
- Kullanmayın signal.filtfilt. Kullanın signal.lfilter. bir nedensel filtreyi sıfır fazlı bir filtreye dönüştüren zıt yönlerdeki iki tanesi hariç
filtfilt
aynı şeyi yaparlfilter
.
Bununla birlikte, bu işlevlerin her ikisinin de belgelendirmesinin önerdiği gibi, çoğu pratik kullanım için, bunun yerine SOS değişkenlerini kullanmalısınız:
İkinci dereceden bölümlerin daha az sayısal problemi olduğundan, çoğu filtreleme görevi için işlev
sosfilt
(ve kullanılan filtre tasarımıoutput='sos'
) tercih edilmelidirlfilter
.
Fonksiyonları özetlemek için:
- lfilter: Nedensel tek aşamalı filtreleme (yalnızca düşük siparişler)
- filtfilt: Sıfır fazlı tek aşamalı filtreleme (yalnızca düşük siparişler)
- sosfilt: Nedensel ikinci dereceden bölüm filtreleme
- sosfiltfilt: Sıfır fazlı ikinci dereceden bölüm filtreleme
Gerçekten kullanmanın tek nedeni lfilter
veya filtfilt
katsayılarınızın zaten b, a
formatta olması, ders kitabından bir şey uyguluyorsanız vb.
Filtreyi kendiniz tasarlıyorsanız, sayısal hatayı azaltan SOS formunu kullanın.
Not olduğu filtfilt
fonksiyonlar iki defa filtre uygulamak, bu nedenle orijinal filtrenin çift sipariş olacaktır.
IIR filtresi nedensel mi? Tüm IIR filtreleri nedensel olmayabilir ve bazılarının olduğu ve bazılarının olmadığı olabilir. IIR filtrelerinin nedensel olduğu durumlar nelerdir?
Tüm gerçek IIR filtreleri nedenseldir. Evren göründüğünden çok daha tuhaf olmadığı sürece, tüm gerçek sistemler nedenseldir.
Sen edebilirsiniz tanımlamak gelecek bilgilere davranan bir filtre; yani bunu söyleyebilirdin$y_n = 0.9 y_{n+1} + x_n$. Bu, (okuyucunun şüpheciliğinin üstesinden gelmek için birçok kelimeyle) dürtü yanıtı olan bir filtreyi tanımlar.$$h_\kappa = \begin{cases} 0 & \kappa > 0 \\ 0.9^{-\kappa} & \kappa \le 0 \end{cases}$$
Bununla birlikte, gerçek hayatta böyle bir filtreyi gerçekten uygulayamazsınız.