หลักการพื้นฐานการออกแบบตัวกรองดิจิตอล (IIR / FIR)


15

แม้ว่าฉันจะมีประสบการณ์ที่แข็งแกร่งในการออกแบบเอนจิ้นเสียง แต่ฉันก็ค่อนข้างใหม่สำหรับขอบเขตของ Digital Filter Design โดยเฉพาะตัวกรอง IIR และ FIR กล่าวอีกนัยหนึ่งฉันพยายามเรียนรู้ให้มากที่สุดเท่าที่จะทำได้เกี่ยวกับวิธีการออกแบบตัวกรองและหาสมการความแตกต่าง ฉันเริ่มจากพื้นฐานดังนั้นโปรดอดทนกับฉันอย่างที่ฉันพูดฉันพยายามเรียนรู้

นี่คือคำถามของฉัน:

ว่าฉันต้องการออกแบบตัวกรอง low-pass ด้วย cutoff เฉพาะ - พูด 300 Hz อะไรจะเป็นวิธีที่ดีที่สุดในการได้มาซึ่งฟังก์ชั่นการถ่ายโอนทางคณิตศาสตร์และจากนั้นจะได้รับสมการความแตกต่างโดยเฉพาะเพื่อใช้ตัวกรองในแบบฟอร์มโดยตรงและแบบฟอร์มตรง II (หรือ DF-1 เท่านั้นตอนนี้ ... )

ฉันมีความเข้าใจเกี่ยวกับฟังก์ชั่นการถ่ายโอนและวิธีการที่พวกเขาเกี่ยวข้องกับสมการที่แตกต่างจากวัสดุที่ยอดเยี่ยมบางอย่างบนเว็บ แต่น่าเสียดายที่มันบางส่วนสันนิษฐานว่าเป็นความรู้ก่อนหน้าเล็กน้อยดังนั้นมันจึงสับสนกว่า ดังนั้นฉันเดาว่าฉันต้องการตัวอย่างทีละขั้นตอนมากขึ้นซึ่งจะช่วยให้ฉันเชื่อมต่อจุดต่างๆ

โดยพื้นฐานแล้วฉันกำลังมองหาความช่วยเหลือเกี่ยวกับการแยกย่อยของกระบวนการเริ่มต้นจากการเลือกความถี่ cutoff ขึ้นไปเพื่อหาสมการผลต่าง

ความช่วยเหลือใด ๆ จะได้รับการชื่นชมมาก ฉันคุ้นเคยกับแนวคิดมากมาย - การตอบสนองแบบแรงกระตุ้น, DFT, คณิตศาสตร์ที่อยู่เบื้องหลังฉันเดาว่าฉันต้องการความช่วยเหลืออะไรเพิ่มเติมคือแนวคิดของการแปลง z และการใช้ขั้ว / ศูนย์เพื่อออกแบบฟังก์ชันถ่ายโอนของตัวกรองแล้ว ความถี่ของ cutoff เป็นอย่างไร เล่นทั้งหมดนี้เพื่อรับสมการความแตกต่างในที่สุด

เนื่องจากฉันมักจะเรียนรู้ที่ดีที่สุดจากตัวอย่างฉันคิดว่าฉันถามที่นี่ ขอบคุณมากสำหรับทุกคนที่พบเวลาที่จะช่วยฉันออก


2
มีวิธีการออกแบบตัวกรองมากมาย ต่อไปนี้เป็นคำศัพท์สองสามคำเพื่อให้คุณเริ่มต้น: วิธีการออกแบบหน้าต่างการออกแบบตัวกรองสี่เหลี่ยมน้อยที่สุดและการออกแบบตัวกรอง Equiripple (โดยปกติจะใช้อัลกอริทึม Parks-McClellan) เหล่านี้ส่วนใหญ่ถูก จำกัด การออกแบบตัวกรอง FIR วิธีทั่วไปในการออกแบบตัวกรอง IIR คือการทำแผนที่ต้นแบบแอนะล็อก (เช่นตัวกรอง Butterworth) กับการประมาณตัวกรองดิจิทัลที่สอดคล้องกัน สิ่งนี้สามารถทำได้โดยใช้วิธีการแปลง bilinear หรือวิธีการแปรปรวนแรงกระตุ้น
Jason R

คำตอบ:


20

การออกแบบตัวกรองดิจิตอลเป็นหัวข้อที่ใหญ่และเป็นผู้ใหญ่มากและดังที่คุณได้กล่าวถึงในคำถามของคุณมีวัสดุจำนวนมาก สิ่งที่ฉันต้องการลองที่นี่คือให้คุณเริ่มต้นและทำให้เนื้อหาที่มีอยู่สามารถเข้าถึงได้มากขึ้น แทนที่จะเป็นตัวกรองดิจิตัลฉันควรพูดถึงตัวกรองแบบไม่ต่อเนื่องเพราะฉันจะไม่พิจารณาค่าสัมประสิทธิ์และการหาปริมาณของสัญญาณที่นี่ คุณรู้เรื่องตัวกรอง FIR และ IIR อยู่แล้วและคุณก็รู้โครงสร้างตัวกรองบางอย่างเช่น DF I และ II อย่างไรก็ตามให้ฉันเริ่มต้นด้วยพื้นฐานบางอย่าง:

สามารถอธิบายตัวกรองเชิงเส้นเวลาไม่แปรปรวนเชิงเส้น (LTI) แบบไม่ซ้ำโดยสมการผลต่างต่อไปนี้

(1)y(n)=h0x(n)+h1x(n1)++hN1x(nN+1)=k=0N1hkx(nk)

โดยที่คือลำดับเอาต์พุต, x ( n )คือลำดับอินพุต, nคือดัชนีเวลา, h kคือสัมประสิทธิ์ตัวกรอง, และNคือความยาวตัวกรอง (จำนวนก๊อก) ตัวกรองก๊อกชั่วโมงkนอกจากนี้ยังกระตุ้นการตอบสนองของตัวกรองเพราะถ้าสัญญาณอินพุตเป็นแรงกระตุ้นคือx ( n ) = δ ( n )แล้วY ( n ) = H ny(n)x(n)nhkNhkx(n)=δ(n)y(n)=hn(หากหน่วยความจำของตัวกรองได้รับการเริ่มต้นด้วยศูนย์) สมการ (1) อธิบายระบบการตอบสนองต่อแรงกระตุ้นไฟไนต์เอลิเมนต์แบบไม่ จำกัด เวลาเชิงเส้น (FIR) ผลรวมทางด้านขวามือของ (1) คือผลรวมของรูปแบบการแปลงคือสัญญาณที่ได้จากการแปลงสัญญาณอินพุตด้วยการตอบสนองแบบอิมพัลส์ สิ่งนี้เป็นจริงเสมอ แต่สำหรับตัวกรอง IIR เราไม่สามารถคำนวณผลรวม convolutions ได้อย่างชัดเจนเนื่องจากการตอบสนองต่อแรงกระตุ้นนั้นมีความยาวไม่สิ้นสุดนั่นคือมีค่าสัมประสิทธิ์มากมายอนันต์hk. ข้อได้เปรียบที่สำคัญอย่างหนึ่งของตัวกรอง FIR ก็คือพวกมันจะมีความเสถียรเสมอเช่นสำหรับลำดับอินพุตที่มีขอบเขต ข้อดีอีกประการคือตัวกรอง FIR สามารถรับรู้ได้เสมอกับเฟสเชิงเส้นนั่นคือพวกมันจะไม่เพิ่มการบิดเบือนเฟสใด ๆ นอกเหนือจากการหน่วงเวลาที่บริสุทธิ์ นอกจากนี้ปัญหาการออกแบบมักจะง่ายกว่าที่เราจะเห็นในภายหลัง

ตัวกรอง LTI แบบเรียกซ้ำมีการอธิบายโดยสมการแตกต่างดังต่อไปนี้:

(2)y(n)=b0x(n)+b1x(n1)++bMx(nM)a1y(n1)aNy(nN)

สมการ (2) แสดงว่าเอาต์พุตไม่เพียง แต่ประกอบด้วยน้ำหนักตัวอย่างและอินพุตล่าช้าเท่านั้น แต่ยังรวมถึงน้ำหนักผลลัพธ์ตัวอย่างที่ผ่านมาด้วย โดยทั่วไปการตอบสนองต่อแรงกระตุ้นของระบบดังกล่าวมีความยาวไม่ จำกัด เช่นระบบที่เกี่ยวข้องคือระบบ IIR อย่างไรก็ตามมีกรณีพิเศษของตัวกรองซ้ำที่มีการตอบสนองต่อแรงกระตุ้น จำกัด โปรดทราบว่าการกระตุ้นการตอบสนองไม่ได้รับอีกต่อไปโดยทั้งค่าสัมประสิทธิ์หรือkเช่นในกรณีของฟิลเตอร์เฟอร์ ข้อดีอย่างหนึ่งของตัวกรอง IIR ก็คือตัวกรองแบบชันที่มีการลดทอนสัญญาณ Stopband สูงสามารถรับรู้ได้ว่ามีค่าสัมประสิทธิ์ (และความล่าช้า) น้อยกว่าในกรณี FIR นั่นคือมีประสิทธิภาพในการคำนวณมากกว่า แต่หนึ่งต้องระมัดระวังกับทางเลือกของค่าสัมประสิทธิ์ที่kbkakak เนื่องจากตัวกรอง IIR ไม่เสถียรนั่นคือลำดับของเอาต์พุตสามารถถูก จำกัด ได้แม้ว่าจะมีลำดับอินพุตที่ถูกล้อมรอบก็ตาม

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

(3)H(อีJθ)=Σk=0ยังไม่มีข้อความ-1ชั่วโมงkอี-Jkθ

θ

θ=2πs

s

(4)H(อีJθ)=Σk=0Mkอี-Jθ1+Σk=1ยังไม่มีข้อความakอี-Jθ

ak=0k=1,...,ยังไม่มีข้อความ

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

สำหรับตัวกรองมาตรฐานอย่างง่ายเช่นตัวกรอง lowpass, highpass, bandpass หรือ bandstop (และตัวกรองอื่น ๆ ) และคุณยังสามารถวิเคราะห์การคำนวณการตอบสนองต่อแรงกระตุ้นได้อย่างแม่นยำโดยทำการแปลงฟูเรียร์ผกผันของการตอบสนองที่ต้องการ:

ชั่วโมงk=12π-ππH(อีJθ)อีJkθdθ

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

แน่นอนว่ามีวิธีการออกแบบตัวกรอง FIR อื่น ๆ อีกมากมาย วิธีการเชิงตัวเลขที่สำคัญอย่างหนึ่งคืออัลกอริธึมการแลกเปลี่ยน Parks-McClellan ที่มีชื่อเสียงซึ่งออกแบบตัวกรองที่ดีที่สุดด้วยค่าคงที่ passband และ stopband มันเป็นวิธีการประมาณเชิงตัวเลขและมีการใช้งานซอฟต์แวร์จำนวนมากเช่นใน Matlab และ Octave

ssZ

แน่นอนว่ามีวิธีการที่น่าสนใจและมีประโยชน์มากมายขึ้นอยู่กับประเภทของคุณสมบัติที่คุณมี แต่ฉันหวังว่าสิ่งนี้จะช่วยให้คุณเริ่มต้นได้ หนังสือที่ดี (และฟรี) ที่ครอบคลุมวิธีการออกแบบตัวกรองขั้นพื้นฐาน (และอีกมากมาย) คือการประมวลผลสัญญาณไปยังการประมวลผลโดย Orfanidis คุณสามารถค้นหาตัวอย่างการออกแบบได้ที่นี่ หนังสือคลาสสิกที่ยอดเยี่ยมอีกเล่มหนึ่งคือการออกแบบตัวกรองดิจิตอลโดย Parks and Burrus


ว้าวแมตต์ขอบคุณมากสำหรับคำตอบที่ละเอียดและรอบคอบ ฉันจะเจาะลึกลงไปและขอบคุณเวลาของคุณอย่างแท้จริง ขอบคุณ!
bitwise

มีตำราที่ดีสำหรับการออกแบบตัวกรองเวฟเล็ตหรือไม่? ผมอยากรู้เกี่ยวกับหัวข้อดังกล่าวdsp.stackexchange.com/questions/29090/... ขอบคุณ!
LCFactorization

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