Apakah ada bentuk implementasi standar untuk filter Butterworth yang bisa disetel?

17

Salah satu cara standar untuk menerapkan filter Butterworth adalah dengan riam bagian orde dua, masing-masing sesuai dengan sepasang kutub konjugat kompleks. Untuk filter urutan keempat, misalnya, akan ada dua bagian urutan kedua. Jika kita mempertimbangkan bagaimana lokasi kutub untuk perubahan lowpass filter pada bidang-z saat cutoff dirancang untuk mendekati 0 hz ke dekat Nyquist, jalur "tersapu" oleh masing-masing pasangan kutub sesuai dengan sepasang busur di dalam lingkaran unit , seperti yang diilustrasikan oleh gambar berikut [untuk filter urutan keempat]:

Posisi Tiang Z-plane untuk Filter Lowpass Orde Keempat

Mengingat berapa lama filter ini telah ada, dan mengingat fakta bahwa "busur" ini sesuai dengan garis lurus di s-plane, masuk akal bahwa seseorang akan mengembangkan formulir implementasi dengan parameter tunggal yang dapat menyapu kutub sepanjang busur pada "run time" [sebagai lawan dari "waktu desain"]. Namun, saya belum menemukan hal seperti itu.

Ini relatif mudah untuk datang dengan berbagai cara untuk melakukan ini, terutama dalam segmen jangkauan, dan dengan kemauan untuk memberikan sedikit perhitungan ekstra padanya. Yang saya ingin tahu adalah sebagai berikut:

Apakah ada beberapa cara standar untuk menerapkan filter Butterworth [digital] dari urutan tertentu yang 1) memiliki sifat optimal (misalnya efisiensi, ketahanan), dan 2) mencakup seluruh rentang?

Atau apakah ini benar-benar masalah yang mudah sehingga tidak ada orang yang mau membicarakannya? Jika itu masalahnya, sepertinya itu akan muncul di program desain filter di sebelah opsi untuk desain "statis".

Saya memang menemukan ini: Filter multi-tujuan Butterworth dengan frekuensi cutoff variabel , tetapi pada awalnya Googling tampaknya tidak banyak informasi tentang apa yang ada di dalamnya.

Perbarui (ulang: jawaban)

Agar lebih jelas:

  • Saya mencari "meta-desain" dengan parameter (katakanlah dari [0,1]) yang secara otomatis akan menyesuaikan cutoff dari DC ke Nyquist (sambil menjaga gain dinormalisasi) untuk digunakan dalam sistem yang bervariasi waktu. Sesuatu seperti resonator dua kutub ini , kecuali dengan batasan Butterworth. Idenya adalah bahwa menghitung parameter akan lebih efisien daripada melalui prosedur desain offline pada saat runtime.
  • Saya bahkan tidak perlu mencari cara mendesain "meta-filter" (yaitu melakukan matematika dengan variabel alih-alih angka), saya bertanya-tanya apakah ada pilihan untuk bentuk implementasi standar [tidak jelas] - karena, katakanlah, pendekatan langsung yang sesuai dengan kasus statis akhirnya memiliki masalah numerik dalam kasus yang bervariasi waktu.
  • Mungkin tidak ada masalah, dan pendekatan langsung adalah apa yang digunakan dalam praktik. Itu akan bagus. Kekhawatiran saya adalah bahwa saya belum pernah melihat topik ini disebutkan secara eksplisit di salah satu sumber yang saya konsultasikan, tapi mungkin saya hanya melewatkan sesuatu yang sangat jelas, jadi saya bertanya.
  • Dalam proses menambahkan lebih detail di sini, saya menemukan perlakuan umum struktur biquad parametrik, yang hampir seperti yang saya cari (dan memiliki beberapa referensi yang bagus).

Perbarui 2

Saya mencari jawaban seperti yang saya berikan di komentar kedua saya kepada Jason R, sebagai berikut:

"Oh yeah, kamu ingin menggunakan parametrization III-2b dari tesis ini-dan-begitu, dalam bentuk kisi negara yang disadap karena menyelesaikan kasus tepi ini-dan-itu sambil menggunakan jumlah perkalian yang minimal."

Mungkin tidak ada yang seperti itu, tetapi pertanyaan saya adalah apakah itu benar, dan jika demikian, apa itu, atau di mana saya dapat menemukannya?

Jackpot

Berdasarkan referensi ke "bentuk pengamat kanonik" yang diberikan oleh Tim Wescott dalam utas comp.dsp dalam jawaban Jason R , saya memutuskan untuk berasumsi bahwa saya mungkin harus mulai menggali dalam literatur sistem kontrol, jadi saya mencoba melakukan pencarian untuk butterworth "state space" , dan muncul perlakuan desain / implementasi berikut yang sangat keren, tidak hanya parametrik Butterworth, tetapi juga filter Chebyshev dan Elliptic:

Sophocles J. Orfanidis, "Desain Equalizer Parametrik Digital Orde Tinggi," J. Audio Eng. Soc., Vol. 53, hlm. 1026-1046, November 2005.

Butuh sedikit waktu untuk menggali, tetapi berdasarkan apa yang telah saya baca sejauh ini, saya akan sangat terkejut jika bukan itu yang saya cari. Saya memberikan yang ini kepada Jason R untuk referensi comp.dsp yang membawa saya ke kertas Orfanidis. Jawabannya juga merupakan gambaran praktis yang bagus untuk mendesain filter Butterworth juga.

datageist
sumber

Jawaban:

10

Saya tidak yakin persis apa yang Anda cari. Seperti yang Anda catat dalam pertanyaan Anda, fungsi transfer dari keluarga filter Butterworth dipahami dengan baik dan mudah dihitung secara analitis. Cukup mudah untuk menerapkan struktur filter Butterworth yang dapat disesuaikan dengan urutan filter dan frekuensi cutoff:

  1. Berdasarkan urutan filter yang dipilih, frekuensi cutoff, dan laju sampel, hitung lokasi kutub untuk filter prototipe analog Butterworth. Karena filter Butterworth tidak memiliki nol, fungsi transfer ditentukan oleh lokasi kutub (dan penguatan DC).

  2. Dengan menggunakan transformasi bilinear , petakan lokasi kutub dari prototipe analog ke lokasi terkait dalam realisasi digital filter Anda.

  3. Sekali lagi, filter digital ditentukan oleh lokasi kutub yang ditemukan pada langkah 2. Pisahkan filter menjadi bagian urutan kedua dengan mengelompokkan kutub berpasangan.

Itu dia. Seperti yang saya katakan, sangat mudah untuk secara terprogram merancang filter Butterworth menggunakan parameter apa pun yang mungkin Anda butuhkan; tidak ada operasi yang sangat rumit untuk diimplementasikan.

Sunting: Saya tidak begitu yakin apa hasil akhir yang Anda cari. Saya pikir Anda yang paling tertarik pada bagaimana menerapkan filter IIR dengan koefisien yang bervariasi waktu, belum tentu spesifik untuk filter Butterworth. Saya berasumsi tujuan Anda adalah untuk meminimalkan artefak saat mengubah frekuensi cutoff filter; ini dibahas dalam diskusi di newsgroup comp.dsp awal tahun ini. Meskipun saya tidak yakin apa kasus penggunaan Anda atau persyaratan untuk struktur filter ini, ada sejumlah cara untuk menyelesaikan peralihan.

Saya tahu Anda mengatakan Anda ingin filter Anda memiliki parameter tunggal yang menentukan frekuensi cutoff, tetapi kenyataannya tetap bahwa struktur merdu Anda harus memiliki cara untuk menerjemahkan frekuensi cutoff ke koefisien yang diperlukan (atau dalam kasus Butterworth, hanya saja lokasi kutub). Proses yang saya jelaskan di atas sesuai untuk menghasilkan lokasi kutub berdasarkan laju sampel dinormalisasi yang diinginkan.

Anda berpotensi menyederhanakan proses perhitungan lokasi kutub dengan menganalisis geometri lokasi kutub filter digital di bidang-z. Filter Butterworth analog memiliki kutub yang terletak setengah lingkaran di bagian kiri bidang-s; bilinear transform memetakan setengah lingkaran ini ke dalam pola yang tampak elips yang Anda ilustrasikan dalam deskripsi pertanyaan Anda. Dengan menggunakan pola yang diketahui ini ke kutub filter Butterworth analog, fungsi pemetaan transformasi bilinear, dan beberapa aljabar, Anda mungkin dapat menghasilkan ekspresi yang relatif sederhana untuk lokasi tiang filter digital, sehingga memberi Anda filter yang lebih mudah terlihat aksi tuning.

Jason R
sumber
Jason, saya tidak mencari cara mendesain spesifikasi Butterworth yang diberikan, saya mencari "meta-design". Saya akan memperbarui pertanyaan dengan sedikit lebih detail.
datageist
1
Re: Edit. Proses yang Anda jelaskan dalam paragraf terakhir adalah persis bagaimana saya akan mendekatinya - Saya hanya ingin tahu apakah ini sebenarnya telah dibahas di mana saja. Dengan kata lain, hal-hal seperti, "Oh yeah, Anda ingin menggunakan parametrization III-2b dari tesis begitu-dan-begitu, dalam bentuk kisi negara mengetuk karena menyelesaikan kasus tepi ini-dan-itu saat menggunakan jumlah perkalian yang minimal. "
datageist
1
Komentar kecil-pilih-pilih: Di bidang Z, filter BW memang memiliki nol. Untuk filter low pass semuanya pada -1 dan untuk filter high pass mereka berada di +1.
Hilmar
s±ss0
2

Ya ada formulir implementasi standar untuk Butterworth, dan hampir setiap respons filter lainnya. Mereka semua sepenuhnya diterapkan di perpustakaan filter IIR open source saya. Berikut cuplikan kode yang menghasilkan pasangan kutub / nol untuk filter Butterworth dengan derajat acak:

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());
  }
}

Seperti yang Anda lihat, posisi kutub dihitung dengan membagi kembali bidang s menjadi "pasangan" segmen yang sama.

Kode yang sesuai disediakan untuk semua jenis respons filter yang umum: Chebyshev, Elliptic, Legendre, termasuk masing-masing versi rak.

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

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

Tangkapan layar

Vinnie Falco
sumber
Pustaka DSPFilters secara langsung membahas kasus penggunaan yang direnungkan oleh pertanyaan asli, menggunakan persamaan parameter untuk menghitung pasangan kutub / nol filter digital pada saat run-time. Saya akan mengubah jawaban untuk juga memasukkan potongan kode sumber.
Vinnie Falco