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
N≈ 23log10[ 110 δ1δ2]fsΔ f
dengan
fsΔ fδ1δ2 tingkat sampling lebar transisi, yaitu. perbedaan antara ujung pass band dan start stop band riak di passband, yaitu. "berapa banyak dari amplitudo asli yang Anda mampu untuk bervariasi" penindasan di 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 = 10- 3
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= 10- 4
Jadi, pasang ini di:
NFilter Tommy≈ 23log10[ 110 δ1δ2]fsΔ f= 23log10[ 110 ⋅ 10- 4⋅ 10- 3]fsfs200= 23log10[ 110 ⋅ 10- 7]200= 23log10[ 110- 6]200= 23( log10106)200= 23⋅ 6 ⋅ 200= 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):
- 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.96kSs≪konyol141NONAs
- 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).