IIR filtreleri (ve özellikle Butterworth filtresi) nedensel midir?

Aug 19 2020

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.8ile NumPyve SciPy.

Çevrimdışı durum için (önceden kaydedilmiş bir zamanı filtrelemek) bir Butterworth yüksek geçiren filtre tasarladım ve signal.filtfiltiş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.freqzFonksiyonu 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:

  1. Doğru anlarsam, Butterworth filtreleri IIR (sonsuz dürtü yanıtı) filtreleridir. Bu doğru mu?
  2. 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?
  3. Butterworth filtreleri nedensel midir? Her zaman değilse, hangi durumda nedenseldir?
  4. 3'ün cevabı doğruysa, hem zaman alanında hem de frekans alanında nedensel Butterworth filtresi nasıl uygulanır? (I kullanabilir SciPygibi fonksiyonları signal.butter, signal.freqzvs.)

İ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

7 endolith Aug 19 2020 at 13:49
  1. Evet, Butterworth IIR'dir. Bir dürtüden kaynaklanan bozulma teknik olarak sonsuza kadar sürer.
  2. Evet, [uygulanabilir] IIR'lerin tümü nedenseldir.
  3. Evet, # 1 ve # 2 yüzünden.
  4. 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ç filtfiltaynı şeyi yapar lfilter.

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 edilmelidir lfilter.

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 lfilterveya filtfiltkatsayılarınızın zaten b, aformatta 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 filtfiltfonksiyonlar iki defa filtre uygulamak, bu nedenle orijinal filtrenin çift sipariş olacaktır.

1 TimWescott Aug 19 2020 at 16:17

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.