ปัญหาในการออกแบบตัวกรอง FIR โดยใช้ FFT คืออะไร


15

ฉันพยายามทำความเข้าใจเกี่ยวกับความสัมพันธ์ระหว่างตัวกรอง FIR ที่ออกแบบมาจาก "หลักการแรก" โดยใช้เคอร์เนลตัวกรองที่มีการโน้มน้าวและตัวกรองที่ออกแบบในหนึ่งในสองวิธีที่ใช้ FFT (ดูด้านล่าง)

เท่าที่ฉันเข้าใจการตอบสนองแรงกระตุ้นของตัวกรอง FIR เป็นสิ่งเดียวกับเคอร์เนล convolution ของตัวกรอง (ช่วยแก้ให้ด้วยนะถ้าฉันผิด.)

นอกจากนี้ในความเข้าใจของฉันความถี่องค์ประกอบ (เช่นการแปลงฟูริเยร์) ของการตอบสนองแรงกระตุ้นของตัวกรอง FIR นั้นเป็นสิ่งเดียวกับการตอบสนองความถี่ของตัวกรอง และดังนั้นการแปลงฟูริเยร์แบบผกผันจะให้การตอบสนองแบบอิมพัลส์แก่ฉันอีกครั้ง (แก้ไขอีกครั้งถ้าฉันผิด)

สิ่งนี้ทำให้ฉันได้ข้อสรุปสองข้อ (ไม่สนใจการตอบสนองของเฟสหรือสมมติว่าตอบสนองเฟสเชิงเส้น):

  1. ฉันควรจะสามารถออกแบบตัวกรอง FIR ของการตอบสนองความถี่ตามอำเภอใจโดย "วาด" การตอบสนองความถี่ที่ฉันต้องการใช้ IFFT เพื่อรับการตอบสนองต่อแรงกระตุ้นและใช้สิ่งนั้นเป็นเคอร์เนล convolution ของฉัน

  2. อีกทางหนึ่งฉันควรจะสามารถสร้างตัวกรองโดยการใช้ FFT ของสัญญาณอินพุทคูณด้วยการตอบสนองความถี่โดยพลการที่ฉันต้องการในโดเมนความถี่และรับ IFFT ของผลลัพธ์เพื่อสร้างสัญญาณเอาต์พุต

โดยสังหรณ์ใจมันให้ความรู้สึกเหมือน 1 & 2 เทียบเท่า แต่ฉันไม่แน่ใจว่าฉันจะพิสูจน์ได้ไหม

ดูเหมือนว่าผู้คน (และวรรณกรรม DSP) มีความยาวมากในการออกแบบเมล็ด FIR พร้อมคำตอบที่กำหนดไว้ล่วงหน้าโดยใช้อัลกอริทึม (สำหรับฉัน) ที่ซับซ้อนเช่น Chebyshev หรือ Remez (ฉันกำลังโยนชื่อบางชื่อที่ฉันอ่านโดยไม่เข้าใจพวกเขาจริงๆ) .

  • ทำไมถึงมีความยาวเหล่านี้เมื่อมีการแปลง FFT / IFFT สำหรับทุกเคอร์เนล FIR ที่เป็นไปได้
  • ทำไมไม่เพียงแค่ดึงการตอบสนองความถี่ที่คุณต้องการรับ IFFT และมีเคอร์เนล FIR ของคุณ (วิธีที่ 1 ด้านบน)

สิ่งที่ฉันสนใจคือเพลงดิจิทัลเสียง / เพลงดิจิทัลในกรณีที่เกี่ยวข้อง
bryhoyt

คำตอบ:


13

เหตุผลหนึ่งที่คุณเห็นคนที่ออกแบบตัวกรอง FIR แทนที่จะใช้วิธีการโดยตรง (เช่นทั้ง 1 และ 2) คือวิธีการโดยตรงมักจะไม่คำนึงถึงระยะเวลาในโดเมนความถี่และความจริงที่ว่าการแปลงที่ใช้โดยFFT นั้นวงกลมบิด

สิ่งนี้หมายความว่า?

สมมติว่าคุณมีสัญญาณและแรงกระตุ้นการตอบสนองของตัวกรอง (บิดเคอร์เนล; คุณถูกต้องพวกเขาจะเหมือนกัน)1]x=[1,2,3,4]ชั่วโมง=[1,1]

convolutionคือ , เวกเตอร์ความยาว 5 ถ้าคุณใช้การ FFT (ความยาวผิด 4) แล้วคำตอบที่คุณได้รับคือ5] เหตุผลของความแตกต่างคือผลลัพธ์ของการบิดเชิงเส้นของทั้งสองนี้คือความยาว 5 แต่ผลลัพธ์ของการบิดแบบวงกลมนั้นเป็นสิ่งที่ความยาว FFT เป็นY=x* * * *ชั่วโมง[1,3,5,7,4][3,5,7,5]

หากความยาว FFT มากกว่าหรือเท่ากับความยาวของผลลัพธ์ของการบิดเชิงเส้นดังนั้นทั้งสองจะเท่ากัน มิฉะนั้นทั้งสองจะไม่เหมือนกัน (เว้นแต่ว่าข้อมูลจะสมคบกันในการทำเช่นนั้นเช่นถ้าสัญญาณใดสัญญาณหนึ่งเป็นศูนย์)


แน่นอน แต่ทำไมบางคนถึงไม่ทำล่ะก็ให้แน่ใจว่าขนาด FFT / IFFT สมน้ำสมเนื้อกับความยาวสัมพัทธ์ขั้นสุดท้าย? ตัวอย่างเช่นความยาวของการบิดคือ N + M - 1 ดังนั้นให้แน่ใจว่าคุณ 'ดึง' การตอบสนองความถี่ในโดเมนฟูริเยร์ด้วยความยาว M-1 ทำไมถึงใช้งานไม่ได้ สิ่งที่น่าสนใจ :)
TheGrapeBeyond

1
M-1

2
การตอบสนองความถี่ของความยาว M-1 ยังคงมีการตอบสนองต่อแรงกระตุ้นแบบไม่มีที่สิ้นสุด ซึ่งหมายความว่าเมื่อคุณ IFFT รับผลลัพธ์ที่กรองแล้วส่วนท้ายของการตอบสนองต่อแรงกระตุ้นของตัวกรองจะพันรอบ (หลาย ๆ ครั้ง) และเลื่อนขึ้นเป็นผลลัพธ์โดเมนเวลาสุดท้ายของคุณ อาจจะเล็กน้อย อาจจะมาก
hotpaw2

10

ปัญหาหนึ่งคือการจัดการกับการแปลงความยาวไม่สิ้นสุดที่ล้อมรอบเมื่อใช้ FFT ที่มีความยาว จำกัด การแปลงฟูริเยร์ของการตอบสนองความถี่ความยาวอัน จำกัด เป็นการตอบสนองแบบอิมพัลส์ความยาวแบบไม่ จำกัด คนส่วนใหญ่ต้องการให้ตัวกรองของพวกเขาเสร็จสิ้นก่อนที่พวกเขาจะตายหรือหมดหน่วยความจำคอมพิวเตอร์ดังนั้นต้องใช้เทคนิคในการสร้างตัวกรอง FIR ที่สั้นกว่า เพียงปล่อยให้หางของการตอบสนองต่อแรงกระตุ้นแบบไม่มีที่สิ้นสุดห่อรอบ FFT หรือตัดให้สั้นลงไปจนถึงความยาวทั่วไปอาจสร้างตัวกรอง FIR ที่ต่ำกว่าสำหรับสเป็คความถี่ที่คุณต้องการเปรียบเทียบกับหนึ่งในต้นแบบตัวกรอง "คลาสสิค"

ปัญหาอีกประการหนึ่งก็คือการตอบสนองความถี่แบบ "ดึง" แบบสุ่มบ่อยครั้งมีการตอบสนองที่แย่มาก (wild overshoots) ระหว่างจุดที่วาดที่ความละเอียดแน่นอนใด ๆ แปลงเป็นตัวกรอง FIR และดังขึ้นอย่างบ้าคลั่ง ต้นแบบตัวกรองแบบดั้งเดิมได้รับการออกแบบให้มีฟังก์ชั่นตอบสนองความถี่ที่ราบรื่นระหว่างจุดตัวอย่าง

(2) ของคุณเรียกว่าการสนทนาอย่างรวดเร็วและใช้โดยทั่วไปหาก FFT ยาวกว่าความยาวของหน้าต่างข้อมูลรวมกับเคอร์เนลตัวกรองที่รวมกันและการเพิ่ม / บันทึกทับซ้อนที่เหมาะสมจะใช้ในการดูแลการเริ่มต้น / สิ้นสุดของแต่ละส่วนของการสนทนา หรือหน้าต่าง (เนื่องจาก FFT มักจะบล็อกยาว)


6

Re 1): ใช่คุณสามารถออกแบบตัวกรอง FIR โดย "วาด" การตอบสนองความถี่ (ทั้งขนาดและเฟสอย่างไรก็ตามสิ่งนี้มีแนวโน้มที่จะไม่มีประสิทธิภาพมาก: ความยาวของการตอบสนองต่อแรงกระตุ้น (และลำดับตัวกรอง) เป็นเพียง กำหนดโดยความยาว FFT ของคุณหากคุณเลือก 128 จุด FFT คุณจะได้รับ 128 ก๊อกสำหรับการตอบสนองแรงกระตุ้นและถ้าคุณเลือก 4096 จุด FFT คุณจะได้รับก๊อกกรอง 4096

Re 2): ใช่คุณสามารถกรองโดยการคูณในโดเมนความถี่และนั่นเป็นวิธีเดียวที่จะทำได้อย่างมีประสิทธิภาพสำหรับการตอบสนองต่อแรงกระตุ้นขนาดใหญ่ อย่างไรก็ตามดังที่ Peter K ชี้ให้เห็นการคูณในโดเมนความถี่นั้นสอดคล้องกับการวนแบบวงกลม วิธีที่พบมากที่สุดในการใช้การแปลงเชิงเส้นคืออัลกอริทึม "การทับซ้อนเพิ่ม" หรือ "การทับซ้อนการบันทึก" (googled ได้อย่างง่ายดาย)


3

ฉันไม่แน่ใจว่าฉันเข้าใจทุกอย่างที่พูดไว้ที่นี่ แต่ฉันต้องการที่จะทำให้กรณีสำหรับวิธีการแปลงฟูริเยร์

ครั้งแรกมันเป็นวิธีที่ยืดหยุ่นและตรงไปตรงมาอย่างไม่น่าเชื่อในการออกแบบตัวกรอง FIR อย่างที่คุณพูดสิ่งที่ต้องทำคือการกำหนดขนาดและการตอบสนองของเฟส อย่างไรก็ตามดังที่ได้กล่าวไว้คุณจะต้องระมัดระวังในการกำหนดคำตอบ การตอบสนองตามอำเภอใจอาจต้องใช้จำนวนมากของก๊อกเพื่อดำเนินการและให้การตอบสนองโดเมนเวลาที่น่ากลัว ดังนั้นระวังว่าคุณกำหนดมันอย่างไร

ประการที่สองเป็นกรณีที่วิธี Parks McClellan อย่างแท้จริงสามารถสร้างตัวกรองที่ดีกว่าวิธีฟูเรียร์สำหรับข้อกำหนดเฉพาะบางอย่าง แต่มันไม่ง่ายในการควบคุมจำนวนแทปและยังกำหนดขนาดเฟสและการตอบสนองขั้นตอนด้วย วิธี.

ตัวอย่างเช่นสมมติว่าคุณต้องการออกแบบตัวกรอง FIR ที่มีลักษณะคล้ายกับ 10 Bessel IIR Bessel แต่คุณต้องการ จำกัด วงช่วงการเปลี่ยนภาพให้แคบลงนิดหน่อย จากนั้นวิธีฟูเรียร์ทำให้ปัญหานี้ง่ายขึ้นในการแก้ปัญหาด้วยประมาณ 22 ก๊อกขึ้นอยู่กับว่าช่วงการเปลี่ยนผ่านนั้นแคบเพียงใด

หากคุณต้องการดูว่าวิธีการฟูริเยร์มีความสามารถอย่างไรลองใช้โปรแกรม FIR นี้ http://www.iowahills.com/5FIRFiltersPage.html (ฟรี) ตัวอย่างเช่นสามารถออกแบบ IIR ที่เทียบเท่ากับตัวกรอง Gauss, Bessel, Butterworth และ Inverse Chebyshev โดยทั่วไปแล้วจะช่วยให้คุณปรับการตอบสนองของตัวกรองได้เกือบทุกอย่างซึ่งเป็นจุดแข็งของวิธีฟูเรียร์ ด้านลงตัวกรองอาจไม่เหมาะสำหรับข้อกำหนดเฉพาะบางอย่าง


นั่นดูน่าสนใจ ฉันจะต้องลองใช้ซอฟต์แวร์เพื่อให้เข้าใจถึงสิ่งที่กำลังเกิดขึ้นจริง - เว็บเพจดูเหมือนจะไม่อธิบายวิธีการของมันอย่างละเอียดมากเกินไป จากสิ่งที่ฉันสามารถบอกได้ แต่ดูเหมือนว่าจะเป็นลูกผสมที่คุณสามารถควบคุมการตอบสนองความถี่ของตัวกรองต้นแบบที่สร้างขึ้นในแบบดั้งเดิมมากขึ้น ถูกต้องหรือไม่ ฉันคิดว่าสิ่งที่คุณพูดนั้นถูกต้อง - คุณต้องระวังวิธีที่คุณกำหนดคำตอบหรือคุณจะได้รับก๊อกจำนวนมาก AFAIU นี่เป็นปัญหาใหญ่ที่เกิดขึ้นกับการออกแบบตัวกรองโดยเฉพาะพร้อมการตอบสนองความถี่
bryhoyt

1

AFAIK สิ่งนี้เรียกว่า "วิธีการกรองไร้เดียงสา" คุณสามารถมีอิทธิพลต่อเนื้อหาสเปกตรัมในบางจุดในพื้นที่ความถี่ แต่คุณไม่ได้ทำอะไรที่มีประโยชน์สำหรับเนื้อหาความถี่ระหว่างจุดเหล่านั้น หากคุณออกแบบตัวกรอง FIR ที่เหมาะสมคุณจะต้องคำนึงถึงประเด็นนั้นด้วยเช่นกันระหว่างคะแนนหลักและตัวกรองนั้นดีกว่าตัวแรก

ขอแสดงความนับถือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.