Berapa banyak tap yang dibutuhkan filter FIR?

20

Saya mencari untuk merancang satu set filter FIR untuk menerapkan filter low pass. Saya juga mencoba mengurangi latensi sinyal melalui filter sehingga saya bertanya-tanya berapa jumlah ketukan minimum yang dapat saya gunakan.

Saya tahu bahwa lebih banyak keran dapat menyebabkan cutoff frekuensi yang lebih tajam dan penolakan band yang lebih baik, dll. Namun apa yang saya minati lebih mendasar - jika saya ingin menerapkan filter low pass dengan cutoff di katakan apakah itu berarti saya membutuhkan setidaknya 100 ketukan untuk menipiskan sinyal frekuensi yang lebih rendah? Atau bisakah saya melarikan diri dengan lebih sedikit ketukan dan jika demikian apakah ada batas teoritis yang lebih rendah?fs100

Tommy
sumber

Jawaban:

24

Mengutip Sinyal Digital pemrosesan Sinyal klasik Bellanger - Teori dan Praktek , intinya bukanlah di mana frekuensi cut-off Anda, tetapi seberapa banyak redaman yang Anda butuhkan, berapa banyak riak pada sinyal yang ingin Anda pertahankan yang dapat Anda toleransi dan, yang paling penting, seberapa persempit transisi Anda dari pass-to stopband (lebar transisi) harus.

Saya berasumsi Anda ingin filter fase linier (meskipun Anda menentukan latensi minimum, saya tidak berpikir filter fase minimum adalah ide yang baik, secara umum, kecuali Anda tahu betul apa yang akan Anda lakukan dengan sinyal Anda setelah itu) . Dalam hal ini, urutan filter (yang merupakan jumlah keran) adalah

N23log10[110δ1δ2]fsΔf

dengan

fs the sampling rateΔf the transition width, ie. the difference between end of pass band and start of stop bandδ1 the ripple in passband, ie. "how much of the original amplitude can you afford to vary"δ2 the suppresion in the stop band.

Mari pasang beberapa angka! Anda menentukan frekuensi cut-off dari , jadi saya hanya akan melanjutkan dan mengklaim lebar transisi Anda tidak akan lebih dari setengahnya, jadi .fs100Δf=fs200

Berasal dari teknologi SDR / RF, penindasan 60 dB biasanya cukup lengkap - perangkat keras, tanpa biaya gila, tidak akan lebih baik dalam menjaga sinyal yang tidak diinginkan dari input Anda, jadi ya, jangan sia-siakan CPU untuk memiliki filter fantastis yang lebih baik dari apa yang dapat dilakukan oleh perangkat keras Anda. Karenanya, .δ2=60 dB=103

Katakanlah Anda dapat hidup dengan variasi amplitudo 0,1% dalam passband (jika Anda dapat hidup dengan lebih banyak, pertimbangkan juga membuat persyaratan penindasan menjadi kurang ketat). Itu .δ1=104

Jadi, pasang ini di:

NFilter Tommy23log10[110δ1δ2]fsΔf=23log10[11010-410-3]fsfs200=23log10[11010-7]200=23log10[110-6]200=23(log10106)200=236200=800 .

Jadi dengan 200 tap, Anda jauh, jika Anda menggunakan pass band yang sangat sempit di filter Anda seperti yang saya duga.

Perhatikan bahwa ini tidak memiliki menjadi masalah - pertama-tama, 800-keran Filter adalah menakutkan, tapi terus terang, hanya pada pandangan pertama:

  • Seperti yang saya uji dalam jawaban ini di StackOverflow : CPU saat ini cepat , jika Anda menggunakan implementasi FIR yang dioptimalkan oleh CPU seseorang. Sebagai contoh, saya menggunakan implementasi FFT-FIR dari GNU Radio dengan persis spesifikasi garis besar filter di atas. Saya mendapat kinerja 141 juta sampel per detik - itu mungkin atau mungkin tidak cukup untuk Anda. Jadi, inilah kasus uji khusus pertanyaan kami (yang membutuhkan waktu beberapa detik untuk saya hasilkan):Penyaringan FFT FIR berbasis GNU Radiohasil tingkat: diterimaavg = 1.40982e + 08
  • Decimation: Jika Anda hanya akan menyimpan sebagian kecil dari bandwidth input, output dari filter Anda akan secara drastis dilampauikan. Memperkenalkan penipisan berarti bahwa filter Anda tidak memberi Anda setiap sampel keluaran, tetapi setiap hanya satu - yang biasanya akan menyebabkan banyak dan banyak aliasing, tetapi karena Anda menghapus semua sinyal yang bisa alias, Anda dapat hemat melakukannya. Implementasi filter pintar (decimator polifase) dapat mengurangi upaya komputasi oleh M, dengan cara ini. Dalam kasus Anda, Anda dapat dengan mudah memusnahkan dengan , dan kemudian, komputer Anda hanya perlu menghitungM.M.M.=50120050=24perkalian / akumulasi per sampel input - jauh lebih mudah. Filter di GNU Radio umumnya memiliki kemampuan itu. Dan dengan cara ini, bahkan dari FFT FIR (yang tidak cocok untuk implementasi decimator polyphasing), saya dapat menekan faktor 2 lainnya dalam kinerja. Tidak bisa berbuat lebih banyak. Itu cukup dekat dengan bandwidth RAM, menurut pengalaman saya, di sistem saya. Untuk
  • Latensi: Jangan pedulikan itu. Sungguh, jangan, kecuali Anda perlu. Anda melakukan ini dengan laju sampling audio yang khas? Ingat, disebutkan di atas. Jadi waktu yang dihabiskan menghitung output filter hanya akan relevan untuk streaming sinyal langsung MS / s. Untuk DSP dengan data offline: well, tambahkan penundaan untuk sinyal apa pun yang Anda miliki secara paralel ke filter Anda untuk mengimbanginya. (Jika filter Anda adalah fase linier, penundaannya akan menjadi setengah panjang filter.) Ini mungkin relevan dalam implementasi perangkat keras filter FIR.96kSskonyol141NONAs
  • Implementasi perangkat keras: Jadi, mungkin CPU dan OS PC atau perangkat tertanam Anda benar-benar tidak memungkinkan Anda untuk memenuhi kendala latensi Anda, dan karenanya Anda mencari FIR yang diimplementasikan oleh FPGA. Hal pertama yang Anda perhatikan adalah bahwa untuk perangkat keras, ada paradigma desain yang berbeda - a "Saya menekan semuanya kecuali1100dari input rate saya "filter membutuhkan lebar bit besar untuk nomor titik tetap yang akan Anda tangani di Hardware (seperti yang ditentang ke angka floating point pada CPU). Jadi itulah alasan pertama mengapa Anda biasanya membagi filter menjadi beberapa , bertingkat, lebih kecil, menipiskan filter FIR Alasan lain adalah bahwa Anda dapat, dengan setiap "langkah" kaskade, membiarkan pengganda Anda (biasanya, "irisan DSP") berjalan pada tingkat yang lebih rendah, dan karenanya, gandakan mereka (jumlah irisan DSP biasanya sangat terbatas), menggunakan satu pengali untuk beberapa ketukan.Namun alasan lain adalah bahwa terutama filter setengah-band, yaitu lowpass yang menekan setengah band input dan memberikan setengah tingkat input, sangat efisien diimplementasikan dalam perangkat keras (karena mereka memiliki setengah keran menjadi nol, sesuatu yang sulit untuk dieksploitasi dalam implementasi CPU / SIMD).
Marcus Müller
sumber
3
Danau DSP melakukan 256.000 tap filter FIR secara real time di pertengahan hingga awal 1990-an. 1200 ketukan? Phfffft! ;-)
Peter K.
2
@PeterK. Itulah semangat! Rasa hormat yang dalam terhadap FIR 256kT - akurasi numerik yang telah mereka bangun dengan pasti sama menakjubkannya dengan ukuran desain semata. Menjadi terlalu muda untuk menikmati teknologi sendiri, awal 90-an pasti waktu yang menarik. Berbicara dengan seorang insinyur beberapa waktu lalu yang melakukan DFT IC pada masa itu; kebutuhan akan ASIC DSP khusus-aplikasi tampaknya cukup tinggi karena orang menyadari apa yang mungkin berdasarkan DSP dengan platform komputasi untuk benar-benar menangani aliran data yang dihasilkan, tetapi tidak ada akselerator "multi-tujuan" di sekitarnya (tidak seperti saat ini).
Marcus Müller
@ PeterK., Yeah tapi mereka aussi selalu menarik kaki kita.
robert bristow-johnson
@ robertbristow-johnson oy matey, lelucon orang dalam apa yang terjadi di sini: D?
Marcus Müller
2
@ MarcusMüller, meskipun tampaknya ada sebuah popularitas meningkat dari Asics kembali kemudian dibandingkan dengan sekarang (dan saya pikir itu karena semua orang yang spec ASIC / desainer maka sekarang hanya menggunakan FPGA) ada yang "multi-tujuan" DSP kembali pada awal 90-an. bahwa LakeDSP thingie dibuat dari 6 DSP56001.
robert bristow-johnson
14

Untuk perkiraan cepat dan sangat praktis, saya suka aturan praktis dari fred harris:

NtSebuahhals=SEBUAHtten22BT

dimana:

Atten adalah redaman yang diinginkan dalam dB,

BTBT=FstHaihal-FhalSebuahssFs

FstHaihalFhalSebuahss

Fs

Ini keluar sangat dekat dengan apa yang akan Anda dapatkan untuk filter fase linier dengan riak passband 0,1 dB. Saya sering menggunakan aturan praktis ini untuk mendapatkan ide potongan pertama dari jumlah keran yang dibutuhkan, dan kemudian memodifikasi melalui iterasi dalam proses desain filter.

Yang juga perlu diperhatikan: aturan praktis ini memberikan wawasan besar tentang apa yang benar-benar mendorong jumlah keran: hentikan redaman band dan kecuraman pita transisi (dan riak passband, tetapi biasanya- setidaknya untuk filter yang harus saya rancang untuk aplikasi comm nirkabel - persyaratan redaman akan mendominasi lebih dari riak). Jadi pertanyaan Anda dalam menyatakan cutoff di Fs / 100 hilang seberapa cepat Anda perlu beralih ke stop band.

FsFhalSebuahssFstHaihal

NtSebuahhals=60222/100=137

Bermain-main dengan angka-angka ini juga dapat menunjukkan pentingnya pemrosesan reduksi dengan menggunakan pendekatan penipisan.

Dan Boschen
sumber
7

Menambah jawaban yang diterima, beberapa referensi tambahan. Saya tidak akan menulis rumus yang bisa dilibatkan. Rumus-rumus itu sebagian besar menghasilkan aturan praktis atau perkiraan untuk memulai. Anda dapat mengutak-atik angka-angka ini untuk desain Anda yang sebenarnya.

Salah satu asal dari desain Bellanger adalah: Pada kompleksitas komputasi dalam filter digital, 1981, Proc. Eur. Conf. Desain Teori Sirkuit, M. Bellanger. Sangat sulit diperoleh, tetapi itu bisa dilakukan . Menariknya, itu juga menentukan formula untuk mengevaluasi jumlah bit per koefisien, yang harus dipertimbangkan dalam implementasi hingga-aritmatika. Versi yang lebih mudah diakses dalam bahasa Prancis adalah: Evaluasi de la complexité des filteres numériques , 1982.

Beberapa formula lain dikumpulkan dalam desain filter respon impuls terbatas , Buku Pegangan untuk pemrosesan sinyal digital, 1993, T. Samamaki.

Baru-baru ini, Anda dapat membaca Estimasi akurat panjang filter minimum untuk filter digital FIR optimal , 2000, K. Ichige et al.

Terakhir, desain kertas yang efisien dari filter FIR dengan pesanan filter minimum menggunakan optimasi norma-l0 , 2014 mengklaim desain di mana pesanan secara bertahap berkurang.

Laurent Duval
sumber
4

memperkecil maks(|H(ω)|)untuk semua ω di stopband
tunduk pada1δ|H(ω)|δ untuk semua ω di passband

Masalah praktis utama yang dapat saya pikirkan adalah jumlah sampel frekuensi yang digunakan saat melakukan optimasi, karena perilaku sampel antar frekuensi dapat menyebabkan efek yang tidak diinginkan. Seberapa baik kecocokan bisa menjadi, tentu saja tergantung pada jumlah keran. Saya kira Anda bisa mengatakan bahwa jumlah minimum keran adalah ketika masalahnya menjadi tidak mungkin. Jadi salah satu solusinya adalah menyelesaikan masalah kelayakan.

Arnfinn
sumber