ฉันควรพิจารณาปัจจัยใดบ้างเมื่อเลือกการทำให้เกิดตัวกรอง IIR


16

ตัวกรอง IIR อาจถูกนำมาใช้เป็นรูปแบบโดยตรง 1 หรือ 2 แต่คุณจะตัดสินใจว่าจะใช้รูปแบบใด ข้อดีและข้อเสียของแต่ละข้อคืออะไร?


นอกจากนี้วิธีที่ดีที่สุดในการปรับใช้ GPU คืออะไร
Royi

2
@Drazick, GPU เป็นเกมที่แตกต่างกันโดยสิ้นเชิง ต้องการ quesiton อื่น
Trevor Boyd Smith

คำตอบ:


9

แรกของทุกบิตจากวิกิพีเดียผมแบบตรงและ IIการดำเนินงาน

แบบฟอร์มโดยตรงฉันต้องการหน่วยความจำเพิ่มขึ้น แต่เป็นกลยุทธ์ที่ค่อนข้างง่ายกว่าและมีโอกาสน้อยกว่าที่จะมีปัญหาการปัดเศษและการสั่นพ้อง

Direct form II ต้องการหน่วยความจำน้อยกว่า แต่มีศักยภาพสำหรับการโต้ตอบที่ผิดปกติจำนวนที่มากขึ้นและข้อผิดพลาดรอบเพิ่มเติม สิ่งเหล่านี้สามารถลดลงได้โดยการเรียงลำดับตัวกรองขนาดเล็กลงโดยเฉพาะอย่างยิ่งตัวกรองลำดับที่สอง


2
ในกรณีใดกรณีหนึ่งคุณควรเรียงลำดับส่วนที่สอง
Oliver Charlesworth

1
ดังนั้นในระยะสั้นมันเป็นข้อผิดพลาดของหน่วยความจำ vs round-off trade-off หรือไม่?
anasimtiaz

2
คำตอบที่อ่อนแอมาก IMO เทคนิคมันตอบคำถาม ... แต่เพียง "เทคนิค" ฉันต้องการที่จะเห็นรหัสต้นฉบับในภาษา ฉันรู้วิธีใช้ตัวกรอง FIR ที่ง่าย ลองดูซอร์สโค้ด IIR
Trevor Boyd Smith

2
นอกจากนี้ในแง่ของการดำเนินการทางคณิตศาสตร์ที่ดำเนินการต่อตัวอย่างซึ่งเป็นการดำเนินการที่ดีกว่าฉันหรือ II?
anasimtiaz

1
ฉันรู้วิธีการกรอง FIR ฉันรู้ว่าแบบฟอร์ม I / II / III / IV โดยตรงคืออะไร สิ่งที่ฉันไม่มีประสบการณ์ทำคือ IIR: การออกแบบหรือการนำไปใช้ ความคิดเห็นดั้งเดิมของฉันไม่สร้างสรรค์มาก ฉันควรจะพูดว่า "ฉันเข้าใจสิ่งที่เป็นรูปแบบโดยตรง I-IV คุณช่วยพูดคุยเพิ่มเติมเกี่ยวกับวิธีที่คุณออกแบบ / ติดตั้งตัวกรอง IIR ได้หรือไม่"
เทรเวอร์บอยด์สมิ ธ

9

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

  1. หน่วยความจำ: Direct Form II และ Transposed Form II ใช้หน่วยความจำสถานะน้อยกว่าเล็กน้อยจากนั้น Direct Form I และ Transposed Form I แต่ในการดำเนินการตามลำดับส่วนที่สองที่เรียงซ้อนกัน
  2. MIPS:ในแง่ของจำนวนทวีคูณและส่วนเพิ่มเติมการใช้งานทั้งสี่นั้นเหมือนกัน อย่างไรก็ตามขึ้นอยู่กับชุดคำสั่งของโปรเซสเซอร์เฉพาะอาจมีความแตกต่างอย่างมีนัยสำคัญในประสิทธิภาพการใช้งาน ดังนั้น "มันขึ้นอยู่กับ"
  3. คุณสมบัติของจุดคงที่:สิ่งนี้สร้างความแตกต่างอย่างมาก ในขั้นต้นคุณต้องแน่ใจว่าตัวแปรสถานะของคุณไม่ล้นดังนั้นคุณต้องวิเคราะห์ฟังก์ชันการถ่ายโอนระหว่างใน / เอาท์พุทและตัวแปรสถานะ แบบฟอร์มตรงที่นี่ I และ Transposed Form II เป็นผู้ชนะที่ชัดเจน ตัวแปรสถานะถูกผูกไว้กับ + 106dB หรือที่นั่นเทียบกับอินพุทและเอาท์พุท ในรูปแบบที่สองโดยตรงเช่นฟังก์ชั่นการถ่ายโอนจากอินพุตไปยังรัฐจะได้รับจากเสาเท่านั้น ฉันได้เห็นตัวอย่างในโลกแห่งความเป็นจริงซึ่งสิ่งนี้สามารถได้กำไรเกิน 100 dB นี่ไม่ใช่ค่าสัมบูรณ์สำหรับการใช้งานจุดคงที่
  4. เสียงรบกวน:ในแง่ของการตัดและปัดเศษข้อผิดพลาดการใช้งานทั้งหมดจะเหมือนกัน ปัญหาฟังก์ชั่นการถ่ายโอนตัวแปรสถานะที่กล่าวถึงใน 3) ยังมีผลกับสิ่งนี้ในการขยายและฉันได้เห็นปัญหาเสียงรบกวนด้วยตัวกรอง Direct Form II แม้ว่าจะใช้จุดลอยตัว 32 บิต

ดังนั้นโดยสรุป Transposed Form II บ่อยกว่าตัวเลือกที่ดีที่สุด ในบางสถานการณ์ที่มีจุดคงที่โดยเฉพาะอย่างยิ่งหากมีปัญหาเรื่องเสียงรบกวนที่สำคัญรูปแบบตรงฉันดีกว่าเนื่องจากสามารถเพิ่มได้ง่ายขึ้นกับสิ่งต่าง ๆ เช่นข้อผิดพลาดการสร้างสเปกตรัม ฯลฯ


นี่เป็นคำตอบที่ครอบคลุมและดียิ่งขึ้นกว่านี้มาก!
Lorem Ipsum

2
ฉันคิดออกวันนี้ - ด้วยวิธีที่ยากกว่านี้มาก - เพราะเหตุใด Direct Form I จึงเป็นทางเลือกที่ดีกว่าสำหรับการสมัครของฉัน ขอบคุณสำหรับคำตอบที่ดีจริงๆ!
anasimtiaz

1

เว้นแต่ว่าคุณจะทำงานกับระบบที่ขาดแคลนทรัพยากรหรือมีความต้องการสูงมันไม่สำคัญว่าในทางปฏิบัติไม่ว่าคุณจะเลือกแบบฟอร์ม I หรือ II โดยตรง ตัวอย่างเช่นหากคุณกำลังทำสิ่งต่าง ๆ บนพีซีหรือสมาร์ทโฟนมันไม่สำคัญเลย โดยส่วนตัวแล้วฉันชอบแบบฟอร์ม I

ปัญหาที่แท้จริงคือปกติ MIPS และถ้าคุณวางแผนที่จะทำสิ่งที่นำไปใช้งานแบบตายตัวจะมีความซับซ้อนมากขึ้น ตัวอย่างเช่นใน ARM ตัวกรอง IIR ของคุณจะใช้ MIPS มากกว่านี้หากค่าสัมประสิทธิ์และสถานะตัวกรองเป็น 32- บิต 32 บิตในสถานะและสัมประสิทธิ์เป็นข้อกำหนดหากคุณจำเป็นต้องใช้เช่นตัวกรอง low-pass ที่มีความถี่ตัดต่ำมาก ในกรณีเหล่านี้คุณสามารถใช้ตัวกรองชนิดอื่นเช่นตัวกรองแบบตัวแปรรัฐ


1

นอกเหนือจากความแตกต่างทางเทคนิคเช่นความแม่นยำเชิงตัวเลขแล้วยังมีปัญหาเรื่องเสถียรภาพ เมื่อตัวกรองดิจิตอลมีคู่ขั้ว / ศูนย์อยู่ใกล้กันการตอบสนองความถี่อาจไม่เสถียรในสถานที่ต่าง ๆ (มักจะเข้าใกล้ Nyquist หรือใกล้ศูนย์)

เมื่อใช้ตัวกรอง IIR สำหรับแอพพลิเคชั่นดนตรีตัวเลือกการรับรู้สามารถมีผลกระทบอย่างลึกซึ้งต่อความมั่นคงของตัวกรองเมื่อพารามิเตอร์ตัวกรองถูกปรับเปลี่ยนแบบเรียลไทม์ (ตัวอย่างเช่นการเปลี่ยนแปลงความถี่ตัดในตัวกรองความถี่ต่ำ)

ฉันมีแอปพลิเคชั่นโอเพนซอร์ซที่ให้คุณฟังความแตกต่างในขณะที่พารามิเตอร์ที่แปรผันตามเวลาเช่นความถี่ cutoff หรืออัตราขยายสูงสุดของการรับรู้แต่ละแบบต่อไปนี้:

  • แบบฟอร์มโดยตรง 1
  • แบบฟอร์มโดยตรง II
  • แบบฟอร์มโอนตรง 1
  • แบบฟอร์มส่งตรง II
  • แบบฟอร์ม Lattice
  • ตัวแปรรัฐ

โครงการอยู่ที่นี่:

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

ภาพหน้าจอ


1
คุณโพสต์นี้หลายครั้งแล้วและฉันอยากบังคับใช้นโยบายสแปมเว้นแต่ว่าคำตอบของคุณเหมาะสมกับคำถามจริงๆ ไม่มีโพสต์เหล่านี้ตอบคำถามโดยตรงและยังส่งเสริมผลิตภัณฑ์ แก้ไขเพื่อตอบคำถามโดยตรงไม่เช่นนั้นจะถูกลบออก
Phonon

0

นอกเหนือจากความคิดเห็นข้างต้นเกี่ยวกับหน่วยความจำ MIPS เสียงรบกวนและความเสถียร มีอีกปัจจัยที่มองข้ามโดยทั่วไป ปัจจัยนี้คือความสามารถในการรีเซ็ต ซึ่งเกิดขึ้นเป็นสิ่งสำคัญในสถานการณ์ส่วนใหญ่ของฉัน

ด้วยการนำ Direct Form II มาใช้จะไม่มีสถานะสำหรับเอาต์พุตล่าช้าดังนั้นหากคุณ "รีเซ็ต" ตัวกรอง Direct Form II เพื่อพูดว่า "5" เอาต์พุตเริ่มต้นจะไม่เป็น 5 ฉันคิดว่านี่ค่อนข้างเคาน์เตอร์ - ใช้งานง่ายซึ่งทำให้เกิดความยุ่งยากอย่างมากเมื่อใช้ Simulink ด้วยเหตุนี้ฉันจึงมักจะใช้การใช้แบบฟอร์มโดยตรงที่ฉันใช้ น่าเสียดายที่ Simulink รองรับเฉพาะ Direct Form I หากคุณมีกล่องเครื่องมือ DSP และถึงกระนั้นก็ยังไม่อนุญาตให้คุณตั้งค่าเงื่อนไขเริ่มต้นจากสัญญาณอินพุต

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