Ayarlanabilir Butterworth filtreleri için standart uygulama formları var mı?


17

Bir Butterworth filtresini uygulamanın standart yollarından biri, her biri bir çift karmaşık konjugat kutbuna karşılık gelen ikinci dereceden bölümlerden oluşan bir basamaktır. Dördüncü dereceden bir filtre için, örneğin, iki ikinci dereceden bölümler olacaktır. Kesme 0hz'ye yakın Nyquist yakınında tasarlandığı için bir düşük geçiş filtresi için kutup konumlarının z düzleminde nasıl değiştiğini düşünürsek, her kutup çifti tarafından "süpürülen" yol, birim çemberin içindeki bir çift arka karşılık gelir. , aşağıdaki şekilde gösterildiği gibi [dördüncü dereceden filtreler için]:

Dördüncü Derecede Butterworth Alçakgeçiren Filtreler için Z Düzlemi Kutup Konumları

Bu filtrelerin ne kadar süredir var olduğu ve bu "yayların" s-düzlemindeki düz çizgilere karşılık geldiği göz önüne alındığında, birisinin kutupları süpürebilen tek bir parametreyle bir uygulama formu geliştirmiş olması mantıklıdır. yaylar boyunca "çalışma zamanında" ["tasarım zamanı" nın aksine). Ancak henüz böyle bir şeyle karşılaşmadım.

Bunu, özellikle menzil segmentlerinde, bunu yapmanın çeşitli yollarını bulmak ve ona biraz fazladan hesaplama yapmaya istekli olmak nispeten basittir. Merak ettiğim şu:

1) optimal bir özelliğe sahip olan (örneğin, verimlilik, sağlamlık) ve 2) tüm aralığı kapsayan belirli bir düzende ayarlanabilir [dijital] Butterworth filtresini uygulamanın standart bir yolu var mı?

Yoksa bu gerçekten çok kolay bir problem mi, hiç kimse bunun hakkında konuşmak için rahatsız etmiyor mu? Bu durumda, filtre tasarımı programlarında "statik" tasarım seçeneklerinin yanında görünecektir.

Bunu buldum: Değişken kesim frekansına sahip çok amaçlı bir Butterworth filtresi , ancak ilk olarak Google'da ne olduğu hakkında çok fazla bilgi yok gibi görünüyor.

Güncelleme (yeniden: cevaplar)

Sadece biraz daha açık olmak gerekirse:

  • Zaman değişken bir sistemde kullanmak için otomatik olarak DC'den Nyquist (kazanç normalleştirilmiş tutarken) kesme ayarlayacak bir parametre (örneğin [0,1]) ile bir "meta-tasarım" arıyorum. Butterworth kısıtlamaları hariç, bu iki kutuplu rezonatör gibi bir şey . Fikir, parametrenin hesaplanmasının çalışma zamanında tipik çevrimdışı tasarım prosedüründen geçmekten daha etkili olacağıdır.
  • Hatta bir "meta-filtre" (yani sayılar yerine değişkenler ile matematik yapmak) nasıl tasarım arıyor değilim, standart [açık olmayan] uygulama formları için seçenekler olup olmadığını merak ediyorum - çünkü, diyelim ki, statik duruma karşılık gelen doğrudan yaklaşım, zamanla değişen durumda sayısal sorunlara neden olur.
  • Belki hiçbir sorun yoktur ve pratikte kullanılan basit bir yaklaşımdır. Bu harika olurdu. Endişem, danıştığım kaynakların hiçbirinde bu konunun açıkça belirtilmediğini görmem, ancak belki de gerçekten açık bir şeyi kaçırdım, bu yüzden soruyorum.
  • Burada daha fazla ayrıntı ekleme sürecinde, parametrik biquad yapıların genel bir tedavisi ile karşılaştım, bu neredeyse aradığım şey (ve bazı güzel referansları var).

Güncelleme 2

Jason R için ikinci yorumuma koyduğum cevapları aşağıdaki gibi arıyorum:

"Oh evet, III-2b parametrelerini so-and-th'in tezinden, dokunulmuş durum kafes formunda kullanmak istiyorsunuz çünkü minimum sayıda çarpımı kullanırken böyle ve böyle bir kenar durumunu çözüyor."

Belki böyle bir şey yoktur, ama sorum şu ki, öyle mi, eğer öyleyse, nedir ya da nerede bulabilirim?

jackpot

Jason R'in cevabında comp.dsp iş parçacığında Tim Wescott tarafından verilen "gözlemci kanonik formu" referansına dayanarak , kontrol sistemleri literatüründe kazmaya başlamamız gerekebileceğini varsaymaya karar verdim, bu yüzden bir arama yapmayı denedim butterworth "devlet alanı" , ve aşağıdaki parametrik Butterworth değil, aynı zamanda Chebyshev ve Eliptik filtreler, tasarım / uygulama, çok serin, tedavi ortaya çıktı:

Sophocles J. Orfanidis, "Yüksek Dereceli Dijital Parametrik Ekolayzer Tasarımı," J. Audio Eng. Soc., Cilt. 53, s. 1026-1046, Kasım 2005.

Kazmak biraz zaman alacak, ancak şimdiye kadar okuduğum şeye dayanarak, aradığım şey olmasa çok şaşırırdım. Beni Orfanidis gazetesine götüren comp.dsp referansı için Jason R'ye veriyorum. Cevabı ayrıca Butterworth filtrelerinin tasarımına da pratik bir bakış.

Yanıtlar:


10

Tam olarak ne aradığından emin değilim. Sorunuzda belirttiğiniz gibi , Butterworth filtre ailesinin transfer fonksiyonları iyi anlaşılmıştır ve analitik olarak kolayca hesaplanabilir. Filtre sırası ve kesme frekansı ile ayarlanabilen bir Butterworth filtre yapısı uygulamak oldukça basittir:

  1. Seçilen filtre sırasına, kesim frekansına ve örnekleme hızına bağlı olarak, Butterworth analog prototip filtresi için kutup konumlarını hesaplayın. Butterworth filtrelerinde sıfır olmadığı için, aktarım işlevi kutup konumları (ve DC kazancı) tarafından belirlenir.

  2. Bilineer dönüşümü kullanarak, analog prototipin kutup konumlarını, filtrenin dijital gerçekleştirilmesinde karşılık gelen konumlarla eşleyin.

  3. Yine dijital filtre, 2. adımda bulunan kutup konumları ile tanımlanır . Kutupları çiftler halinde gruplayarak filtreyi ikinci derece bölümlere ayırın.

Bu kadar. Söylediğim gibi, ihtiyacınız olan parametreleri kullanarak programlı olarak bir Butterworth filtresi tasarlamak basittir; operasyonların hiçbirinin uygulanması çok karmaşık değildir.

Düzenleme: Hangi sonucu aradığınızdan emin değilim. Bunun yerine, çoğunlukla Butterworth filtresine özgü olmayan, zamanla değişen katsayılara sahip IIR filtrelerin nasıl uygulanacağını merak ediyorsunuz. Hedefinizin, filtre kesme frekansını değiştirirken eserleri en aza indirgemek olduğunu varsayıyorum; bu, bu yılın başlarında comp.dsp haber grubu üzerine yapılan bir tartışmada ele alındı . Bu filtre yapısı için kullanım durumunuzun veya gereksinimlerinizin ne olduğundan emin olmasam da, geçişi gerçekleştirmenin birkaç yolu vardır.

Filtrenizin kesim frekansını tanımlayan tek bir parametreye sahip olmasını istediğinizi söylediğinizi biliyorum, ancak ayarlanabilir yapınızın kesim frekansını gerekli katsayılara (veya Butterworth durumunda sadece kutup konumları). Yukarıda tarif edilen işlem, istenen normalleştirilmiş numune hızına göre kutup konumlarının oluşturulması için uygundur.

Dijital filtrenin z düzlemindeki kutup konumlarının geometrisini analiz ederek kutup konumu hesaplama işlemini potansiyel olarak basitleştirebilirsiniz. Analog Butterworth filtresi, s-düzleminin sol yarısında yarım daire içinde bulunan kutuplara sahiptir; bilinear dönüşüm, bu yarım daireyi soru açıklamanızda gösterdiğiniz eliptik görünümlü desene eşler. Bilinen bu deseni analog Butterworth filtresinin kutuplarına, bilinear dönüşümün haritalama fonksiyonuna ve bazı cebire kullanarak, dijital filtrenin kutup konumları için nispeten basit bir ifade ortaya çıkarabilir, böylece size daha basit görünen bir filtre verebilirsiniz. ayarlama eylemi.


Jason, belirli bir Butterworth belirtimini nasıl tasarlayacağımı aramıyorum, bir "meta-tasarım" arıyorum. Soruyu biraz daha ayrıntılı olarak güncelleyeceğim.
datageist

1
Re: Düzenle. Son paragrafta tanımladığınız süreç tam olarak ona nasıl yaklaşacağım - bunun gerçekten herhangi bir yerde kapsanıp kapandığını merak ediyorum. Başka bir deyişle, "Oh evet, so-and -'s tezinden parametreleştirme III-2b'yi, dokunulmuş durum kafes formunda kullanmak istiyorsunuz çünkü minimum sayıda çarpımı kullanırken böyle ve böyle bir kenar durumunu çözüyor. "
datageist

1
Küçük nit seçici yorum: Z düzleminde BW filtresinde sıfırlar var. Düşük geçiş filtreleri için hepsi -1 ve yüksek geçiş filtreleri için +1'dir.
Hilmar

s±ss0

2

Evet, Butterworth için standart uygulama formları ve hemen hemen her filtre yanıtı vardır. Hepsi tamamen açık kaynaklı IIR filtre kütüphanemde uygulandı. Keyfi derecede bir Butterworth filtresi için kutup / sıfır çiftleri üreten bir kod snippet'i:

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

Gördüğünüz gibi, kutupların konumu, s-düzleminin "çiftler" eşit parçalara bölünmesiyle hesaplanır.

Tüm yaygın filtre tepkileri için uygun kod sağlanmıştır: Chebyshev, Eliptik, Legendre, her birinin raf versiyonları dahil.

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

Ekran görüntüsü


DSPFilters kitaplığı, çalışma zamanında bir dijital filtrenin kutup / sıfır çiftlerini hesaplamak için parametreli bir denklem kullanarak doğrudan orijinal soru tarafından tasarlanan kullanım durumunu ele alır. Cevabı ayrıca bir kaynak kod snippet'i içerecek şekilde değiştireceğim.
Vinnie Falco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.