Apa masalah dengan mendesain filter FIR menggunakan FFT?

15

Saya mencoba untuk mendapatkan pemahaman tentang hubungan antara filter FIR yang dirancang dari "prinsip pertama" menggunakan kernel filter dengan konvolusi, dan filter yang dirancang dalam salah satu dari dua cara menggunakan FFT (lihat di bawah).

Sejauh yang saya mengerti, respon impuls filter FIR adalah hal yang sama dengan kernel konvolusi filter. (Koreksi saya jika saya salah.)

Juga, dalam pemahaman saya, frekuensi komponen (yaitu transformasi Fourier) dari respon impuls filter FIR adalah hal yang sama dengan respon frekuensi filter. Dan, oleh karena itu, transformasi fourier terbalik akan memberi saya kembali respons impuls (Sekali lagi, koreksi saya jika saya salah).

Ini membawa saya ke dua kesimpulan (mengabaikan respons fase, atau mengasumsikan respons fase linier):

  1. Saya harus dapat merancang filter FIR dari respons frekuensi arbitrer dengan "menggambar" respons frekuensi yang saya inginkan, mengambil IFFT untuk mendapatkan respons impuls, dan menggunakannya sebagai kernel konvolusi saya.

  2. Sebagai alternatif, saya harus dapat membuat filter dengan mengambil FFT dari sinyal input, mengalikan dengan respons frekuensi sewenang-wenang yang saya inginkan dalam domain frekuensi, dan mengambil IFFT dari hasil untuk menghasilkan sinyal output.

Secara intuitif, rasanya seperti 1 & 2 setara, tapi saya tidak yakin apakah saya bisa membuktikannya.

Sepertinya orang (dan literatur DSP) berusaha keras untuk merancang kernel FIR dengan respons yang telah ditentukan, menggunakan algoritme yang rumit (untuk saya) seperti Chebyshev atau Remez (saya membuang beberapa nama yang telah saya baca, tanpa benar-benar memahaminya) .

  • Mengapa harus sejauh ini, ketika transformasi FFT / IFFT ada untuk setiap kemungkinan kernel FIR?
  • Mengapa tidak menggambar respon frekuensi tepat yang Anda inginkan, ambil IFFT, dan ada kernel FIR Anda (metode 1 di atas)?
bryhoyt
sumber
Bidang minat saya adalah audio digital / musik digital, jika itu relevan.
bryhoyt

Jawaban:

13

Salah satu alasan Anda melihat orang mendesain filter FIR, daripada mengambil pendekatan langsung (seperti 1 dan 2) adalah bahwa pendekatan langsung biasanya gagal memperhitungkan periodisitas dalam domain frekuensi, dan fakta bahwa konvolusi diimplementasikan menggunakan FFT adalah lilitan melingkar .

Apa artinya ini?

Misalkan Anda memiliki sinyal dan respons impuls filter (konvolusi kernel; Anda benar mereka sama) h = [ 1 , 1 ] .x=[1,2,3,4]h=[1,1]

Konvolusi adalah [ 1 , 3 , 5 , 7 , 4 ] , vektor 5-panjang. Jika Anda menggunakan FFT (dengan panjang yang salah, 4) maka jawaban yang Anda dapatkan adalah [ 3 , 5 , 7 , 5 ] . Alasan perbedaannya adalah bahwa hasil konvolusi linear dari keduanya adalah panjang 5, tetapi hasil konvolusi melingkar adalah berapa pun panjang FFT itu.y=xh[1,3,5,7,4][3,5,7,5]

Jika panjang FFT lebih besar dari atau sama dengan panjang hasil konvolusi linier, maka keduanya sama. Jika tidak, keduanya tidak sama (kecuali jika data entah bagaimana berkonspirasi untuk membuatnya jadi, misalnya jika satu sinyal nol).

Peter K.
sumber
Tentu, tetapi mengapa seseorang tidak bisa memastikan ukuran FFT / IFFT sepadan dengan panjang konvolusi akhir? Misalnya, panjang konvolusi adalah N + M - 1, jadi pastikan Anda 'menggambar' respons frekuensi di domain fourier, dengan panjang M-1. Mengapa itu tidak berhasil? Hal menarik btw. :)
TheGrapeBeyond
1
M.-1
2
Respons frekuensi panjang M-1 masih memiliki respons impuls panjang tak terbatas. Yang berarti ketika Anda IFFT untuk mendapatkan hasil yang difilter Anda, ujung dari respons impuls filter akan membungkus (beberapa kali) dan meningkatkan hasil domain waktu akhir Anda. Mungkin sedikit. Mungkin banyak.
hotpaw2
10

Salah satu masalah adalah berurusan dengan transformasi panjang tak terbatas yang membungkus ketika menggunakan FFT panjang terbatas. Transformasi Fourier dari respons frekuensi panjang terbatas adalah respons impuls panjang tak terbatas atau filter kernel. Kebanyakan orang ingin filter mereka selesai sebelum mereka mati atau kehabisan memori komputer, jadi perlu trik untuk menghasilkan filter FIR yang lebih pendek. Hanya membiarkan ujung respon impuls tak terbatas membungkus FFT, atau memotong pendek menjadi beberapa panjang generik, dapat menghasilkan filter FIR lebih rendah untuk spesifikasi frekuensi yang Anda inginkan dibandingkan dengan salah satu prototipe filter "klasik".

Masalah lain adalah bahwa respons frekuensi "ditarik" acak sangat sering memiliki respons mengerikan (overshoot liar) antara titik-titik yang ditarik pada resolusi berhingga apa pun. Konversikan ke filter FIR, dan berdering seperti orang gila. Prototipe filter klasik dirancang untuk memiliki fungsi respons frekuensi yang mulus di antara titik sampel.

(2) Anda disebut konvolusi cepat, dan biasa digunakan jika FFT lebih panjang dari panjang jendela data plus gabungan filter kernel, dan add / save tumpang tindih yang tepat digunakan untuk menjaga awal / akhir setiap segmen konvolusi atau jendela (karena panjang FFT biasanya kuning).

hotpaw2
sumber
6

Re 1): Ya, Anda dapat merancang filter FIR dengan "menggambar" respons frekuensi (baik dalam besarnya dan fase. Namun, ini cenderung sangat tidak efisien: panjang respons impuls (dan urutan filter) hanyalah pra -ditentukan oleh panjang FFT Anda.Jika Anda memilih FFT 128 poin Anda mendapatkan 128 keran untuk respon impuls dan jika Anda memilih 4096 titik FFT Anda mendapatkan 4096 keran filter.

Re 2): Ya, Anda dapat memfilter dengan perkalian dalam domain frekuensi dan itu memang satu-satunya cara untuk melakukannya secara efisien untuk respons impuls yang besar. Namun, seperti yang ditunjukkan Peter K, perkalian dalam domain frekuensi sesuai dengan konvolusi melingkar. Cara paling umum untuk mengimplementasikan konvolusi linear adalah algoritma "tumpang tindih tambah" atau "tumpang tindih simpanan" (mudah di-googled).

Hilmar
sumber
3

Saya tidak yakin saya mengerti semua yang dikatakan di sini, tapi saya ingin membuat kasus untuk metode Fourier Transform.

Pertama, ini adalah cara yang sangat fleksibel dan mudah untuk merancang filter FIR. Seperti yang Anda katakan, semua yang perlu dilakukan adalah menentukan besarnya dan fase tanggapan. Namun, seperti yang dikatakan, Anda harus sedikit berhati-hati dalam menentukan respons. Respons sewenang-wenang mungkin memerlukan sejumlah besar ketukan untuk diimplementasikan dan memberikan respons domain waktu yang mengerikan. Jadi berhati-hatilah bagaimana Anda mendefinisikannya.

Kedua, memang benar bahwa metode Parks McClellan misalnya, dapat menghasilkan filter yang lebih baik daripada metode Fourier untuk beberapa persyaratan tertentu, tetapi tidak mudah untuk mengontrol jumlah keran dan juga menentukan besarnya, fase, dan respons langkah dengan itu. metode.

Misalnya, Anda ingin merancang filter FIR dengan karakteristik yang mirip dengan Bessel 10 kutub IIR, tetapi Anda ingin sedikit mempersempit pita transisi (dengan mengorbankan langkah respons overshoot). Kemudian metode Fourier menjadikan ini masalah yang mudah untuk dipecahkan dengan sekitar 22 ketukan, tergantung pada seberapa banyak pita transisi dipersempit.

Jika Anda ingin melihat kemampuan metode Fourier, coba program FIR ini http://www.iowahills.com/5FIRFiltersPage.html (gratis). Misalnya, ia dapat mendesain setara IIR dengan filter Gauss, Bessel, Butterworth, dan Inverse Chebyshev. Secara umum, ini memungkinkan Anda untuk menyesuaikan respons filter terhadap hampir semua hal, yang merupakan titik kuat metode Fourier. Di sisi bawah, filter mungkin tidak optimal untuk beberapa persyaratan tertentu.

user5108_Dan
sumber
Itu memang terlihat menarik. Saya harus mencoba perangkat lunak untuk benar-benar memahami apa yang terjadi - halaman web sepertinya tidak terlalu menjelaskan metodenya dengan terlalu detail. Dari apa yang saya tahu, sepertinya sejenis hibrida di mana Anda memanipulasi respons frekuensi prototipe filter yang dihasilkan dengan cara yang lebih tradisional. Apakah itu benar? Saya pikir apa yang Anda katakan itu benar - Anda harus berhati-hati dalam menentukan respons, atau Anda akan mendapatkan banyak ketukan. AFAIU, ini adalah masalah besar dengan mendesain filter secara eksklusif dengan respons frekuensi.
bryhoyt
1

AFAIK ini disebut "pendekatan penyaringan naif". Anda dapat memengaruhi konten spektral pada titik-titik tertentu dalam ruang frekuensi, tetapi Anda tidak melakukan sesuatu yang berguna untuk konten frekuensi di antara titik-titik itu. Jika Anda merancang filter FIR yang tepat, Anda benar-benar memperhitungkan juga poin di antara poin-poin utama dan filter tersebut jauh lebih baik daripada yang pertama ..

Salam, Bul.

pengguna2064070
sumber