Desain Filter FIR: Jendela vs Taman McClellan dan Kotak Terkecil


21

Apakah ada keuntungan menggunakan pendekatan jendela di atas Parks-McClellan (disingkat lebih lanjut di sini sebagai PMcC) atau algoritma Least Squares untuk desain filter FIR dari filter low pass? Asumsikan dengan kekuatan komputasi hari ini bahwa kompleksitas algoritma itu sendiri bukan merupakan faktor.

Pertanyaan ini tidak membandingkan PMcC dengan Least Squares tetapi secara khusus jika ada alasan untuk menggunakan teknik desain FIR jendela alih-alih algoritma tersebut, atau apakah teknik windowing untuk menyaring desain yang usang oleh algoritma tersebut dan dipindahkan ke tujuan didaktik?

Di bawah ini adalah salah satu perbandingan di mana saya membandingkan jendela Hamming dengan pendekatan desain favorit saya dengan Least-Squared, menggunakan jumlah keran yang sama. Saya memperluas passband dalam pendekatan Least Squared agar cocok dengan Hamming Window, dan dalam hal ini cukup jelas bahwa Least-Squared akan mengungguli (menawarkan penolakan stop band yang jauh lebih signifikan). Saya belum melakukan ini dengan semua jendela, yang mengarahkan saya ke pertanyaan jika Anda dapat melakukan PMCC dan kuadrat-terkecil, atau jika ada aplikasi lain untuk filter low pass FIR di mana pendekatan windowing akan lebih disukai?

masukkan deskripsi gambar di sini


2
Saya mungkin menyarankan membandingkan Kaiser -windowed sinc ke firpm()dan firls().
robert bristow-johnson

Jawaban:


16

Saya setuju bahwa metode desain windowing filter bukan salah satu metode desain yang paling penting lagi, dan mungkin memang itu yang terwakili dalam buku teks tradisional, mungkin karena alasan historis.

Namun, saya pikir penggunaannya dapat dibenarkan dalam situasi tertentu. Saya tidak setuju bahwa kompleksitas komputasi tidak ada masalah lagi. Ini tergantung pada platform. Duduk di komputer desktop dan mendesain filter, kita memang tidak perlu khawatir tentang kerumitan. Namun, pada platform tertentu dan dalam situasi di mana desain perlu dilakukan secara quasi-realtime, kompleksitas komputasi adalah masalah, dan teknik desain suboptimal sederhana akan lebih disukai daripada teknik optimal yang jauh lebih kompleks. Sebagai contoh, saya pernah bekerja pada sistem untuk beamforming di mana filter (beamformer) perlu dirancang ulang dengan cepat, dan kompleksitas komputasi memang menjadi masalah.

Saya juga yakin bahwa dalam banyak situasi praktis kita tidak perlu khawatir tentang perbedaan antara desain optimal dan suboptimal. Ini menjadi lebih benar jika kita perlu menggunakan aritmatika titik tetap dengan koefisien terkuantisasi dan hasil operasi aritmatika terkuantisasi.

Masalah lainnya adalah stabilitas numerik dari metode desain filter yang optimal dan implementasinya. Saya telah menemukan beberapa kasus di mana algoritma Parks-McClellan (saya harus mengatakan, implementasi yang saya gunakan) tidak bertemu. Ini akan terjadi jika spesifikasi tidak masuk akal, tetapi juga bisa terjadi dengan spesifikasi yang sepenuhnya masuk akal. Hal yang sama berlaku untuk metode desain kuadrat terkecil di mana sistem persamaan linear perlu dipecahkan, yang dapat menjadi masalah yang tidak terkondisikan. Dalam keadaan ini, metode windowing tidak akan pernah mengecewakan Anda.

Sebuah komentar tentang perbandingan Anda antara metode jendela dan desain kuadrat terkecil: Saya tidak berpikir bahwa perbandingan ini menunjukkan keunggulan umum dari metode kuadrat terkecil dibandingkan metode windowing. Pertama, Anda tampaknya melihat atenuasi stop band, yang bukan merupakan tujuan desain untuk kedua metode ini. Metode windowing tidak optimal dalam arti apa pun, dan desain kuadrat terkecil meminimalkan energi stop band, dan sama sekali tidak peduli tentang ukuran riak stop band. Apa yang dapat dilihat adalah bahwa tepi pita pass dari desain jendela lebih besar dari pada salah satu dari desain kuadrat terkecil, sedangkan tepi stop band lebih kecil. Akibatnya, lebar pita transisi filter yang dirancang oleh windowing lebih kecil yang akan menghasilkan riak pita stop yang lebih tinggi. Perbedaan lebar pita transisi mungkin kecil, tetapi properti filter sangat sensitif terhadap parameter ini. Tidak ada keraguan bahwa filter kuadrat terkecil mengungguli filter lain ketika datang untuk menghentikan energi pita, tetapi itu tidak mudah dilihat sebagai ukuran riak. Dan pertanyaannya tetap jika perbedaan itu benar-benar akan membuat perbedaan dalam aplikasi praktis.

Izinkan saya menunjukkan kepada Anda bahwa perbandingan seperti itu sering kali dapat dibuat untuk terlihat seperti yang orang inginkan. Pada gambar di bawah ini saya membandingkan filter low pass optimal kuadrat terkecil yang dirancang dengan fungsi Matlab / Oktaf firls.m(biru) dengan filter low pass yang dirancang dengan metode jendela menggunakan jendela Kaiser (merah).

masukkan deskripsi gambar di sini

Dari gambar tersebut, orang bahkan dapat menyimpulkan bahwa filter yang dirancang oleh windowing sedikit lebih baik daripada filter optimal kuadrat terkecil. Ini tentu saja tidak masuk akal karena kami bahkan tidak mendefinisikan "lebih baik", dan filter kuadrat terkecil harus memiliki kesalahan perkiraan kuadrat rata-rata yang lebih kecil. Namun, Anda tidak melihatnya secara langsung pada gambar. Bagaimanapun, ini hanya untuk mendukung klaim saya bahwa seseorang harus sangat berhati-hati dan jelas ketika melakukan perbandingan seperti itu.

Singkatnya, selain berguna untuk belajar bagi siswa DSP karena alasan didaktis semata, saya berpikir bahwa terlepas dari kemajuan teknologi sejak tahun 1970-an penggunaan metode windowing dapat dibenarkan dalam skenario praktis tertentu, dan saya tidak berpikir bahwa itu akan segera berubah.


Jawaban yang bagus Matt- Klarifikasi / pertanyaan pasangan: Mengenai kompleksitas, dapatkah Anda memberikan contoh yang sebenarnya? Saya bisa melihat ini menjadi masalah dengan implementasi, tetapi dalam menghasilkan koefisien saya tidak bisa memikirkan alasan saya akan melakukan desain pada platform yang lebih rendah (maka pertanyaan saya). Mengenai perbandingan, kuadrat-terkecil jelas lebih baik; untuk riak dan transisi yang sama, Anda mendapatkan atenuasi stop band yang lebih baik. Saya telah menambah lebar passband untuk mencocokkan keduanya; ujungnya sedikit lebih besar karena di situlah saya berhenti mencocokkan tetapi bisa mencocokkan lebih dekat untuk menyimpulkan.
Dan Boschen

2
@ DanBoschen: Tentu saja, dalam kebanyakan kasus desain dilakukan secara offline, dan kompleksitas tidak menjadi masalah. Namun, saya telah menemukan aplikasi di mana filter perlu dirancang ulang secara quasi-real time (yang merupakan aplikasi beamforming), jadi di sana Anda memang memiliki masalah kompleksitas.
Matt L.

1
Dan untuk penghematan aktual jumlah keran dengan desain optimal dibandingkan dengan desain jendela, hasil yang saya lihat seringkali mengecewakan. Seringkali hanya 1 atau 2 PDAM, yang bagi banyak implementasi tidak akan membuat banyak perbedaan.
Matt L.

1
OK, untuk desain offline dan jika stabilitas numerik ternyata tidak ada masalah (untuk desain spesifik; secara umum tetap menjadi masalah), windowing tidak akan berguna. Namun secara umum, kami tidak selalu dapat mengandalkan desain offline, dan yang lebih penting, kami tidak selalu dapat menghindari masalah numerik. Jadi saya pikir kata 'usang' masih agak terlalu kuat.
Matt L.

3
Sangat baik dikatakan. Yang perlu diingat adalah bahwa rekayasa adalah tentang menemukan implementasi yang cukup baik untuk memenuhi kebutuhan Anda. Metode jendela mudah diterapkan dan selalu berfungsi. Metode lain memiliki implementasi yang lebih rumit dan mungkin memiliki kasus yang sulit untuk dikerjakan. Saya telah bekerja dengan beberapa sistem yang perlu mendesain filter dengan cepat, dan metode window adalah cara terbaik untuk situasi tersebut.
Jason R

7

Filter Windowed Sinc dapat dibuat secara adaptif dengan cepat pada prosesor yang hampir tidak cukup kuat untuk menjalankan filter FIR yang terkait. Windinc Sinc filter dapat dihasilkan dalam waktu terbatas.

Pembuatan beberapa filter Sinc berjendela sederhana dapat sepenuhnya dijelaskan (dan diperiksa untuk malware, dll.) Dalam beberapa baris kode , dibandingkan penggunaan beberapa kotak alat yang tidak jelas.

Latar belakang matematika yang kurang diperlukan diperlukan untuk menjelaskan filter Sinc berjendela, dibandingkan dengan yang diperlukan untuk kode generator filter PMcC dari awal.

Riak yang sama dalam respons frekuensi filter PMcC dapat menyebabkan artefak dalam domain waktu yang berbeda (dan mungkin kurang diinginkan) dibandingkan artefak yang dihasilkan oleh filter windowed sederhana.


1
Ya poin bagus @ hotpaw2, riak passband mengarah ke interferensi simbol (trailing dan echo terkemuka). Terima kasih
Dan Boschen

2
Kami berbicara tentang Parks – McClellan sebelum dan sesudah gema di comp.dsp pada tahun 2003 . Alexey Lukin memposting contoh MATLAB minimal:, f=[0 0.49 0.51 1]; a=[1 1 0 0]; b=remez(300,f,a)yang juga berjalan di Octave. Penjelasannya adalah bahwa dengan filter yang sangat curam, riak-riak mungkin cukup teratur untuk menyerupai kosinus. Setara domain waktu dari domain frekuensi cosinus akan menjadi dua gema impulsif.
Olli Niemitalo

6

Saya akan tunjukkan di sini satu manfaat dari desain berjendela dan trik untuk mendapatkan manfaat yang sama dari Parks – McClellan.

Untuk filter half-band, quarter-band dll. Windowing mempertahankan nol domain waktu dari fungsi sinc yang diskalakan, yang merupakan filter low-pass ideal prototipikal. Nol berakhir di koefisien, mengurangi biaya komputasi filter. Untuk filter setengah-band, desain berjendela memberikan filter dengan setiap koefisien genap 0 kecuali untuk koefisien tengah (yang juga dianggap genap):

Sinc
Gambar 1. Fungsi Sinc yang diregangkan secara horizontal dengan faktor 2 adalah filter low-pass setengah-band prototipikal dengan gain 2, cocok untuk upampling dengan faktor 2.

Namun, Parks – McClellan / Remez dapat diakali untuk memberikan manfaat yang sama dengan mendesainnya menggunakan filter dengan jumlah genap genap dengan hanya band pass gain yang ditentukan. Koefisien yang diperoleh digunakan sebagai koefisien ganjil dari filter yang lebih panjang. Koefisien tengah filter yang lebih panjang disetel ke 1 dan koefisien bahkan lainnya ke 0. Filter ini memiliki gain 2 pada band pass dan riak simetris pada band pass dan stop. Dengan Python:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
c0 = signal.remez(14, [0, 3500.0/8000], [1])
c = np.zeros(c0.size*2-1)
c[0::2] = c0
c[c0.size-1] = 1
freq, response = signal.freqz(c)
plt.semilogy(freq/(2*np.pi), np.abs(response))
plt.show()
plt.plot(range(-c0.size+1, c0.size, 1), c, 'x')
plt.grid(True)
plt.show()

Gambar 2.
Gambar 2. Koefisien setengah-band filter dirancang secara tidak langsung menggunakan Python scipy.signal.remez.

Gambar 3.
Gambar 3. Plot respons frekuensi magnitudo dari filter setengah-band yang dirancang secara tidak langsung menggunakan scipy.signal.remez.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.