ข้อดีของการกรองแบบ MATLAB คืออะไร


30

MATLAB's filtfiltทำการกรองไปข้างหน้า - หลังเช่นตัวกรองกลับสัญญาณกรองอีกครั้งแล้วกลับอีกครั้ง เห็นได้ชัดว่าสิ่งนี้ทำเพื่อลดความล่าช้าเฟส? ข้อดี / ข้อเสียของการใช้ตัวกรองดังกล่าวคืออะไร (ฉันคิดว่ามันจะส่งผลให้ลำดับตัวกรองเพิ่มขึ้นอย่างมีประสิทธิภาพ)

มันจะดีกว่าที่จะใช้filtfiltเสมอแทนfilter(เช่นการกรองไปข้างหน้าเท่านั้น)? มีแอปพลิเคชั่นที่จำเป็นต้องใช้และไม่ควรใช้หรือไม่


อย่าใช้การกรองแบบ zero-phase สำหรับเสียงเพราะจะทำให้เกิด "เสียงเรียกเข้าล่วงหน้า" ซึ่งฟังดูแปลก ๆ การกรองขั้นต่ำนั้นเป็นธรรมชาติมากขึ้น ccrma.stanford.edu/~jos/filters/Linear_Phase_Really_Ideal.html
endolith

คำตอบ:


34

คุณสามารถดูได้ในโดเมนความถี่ หากเป็นลำดับการป้อนข้อมูลและเป็นการตอบสนองต่อแรงกระตุ้นของตัวกรองผลลัพธ์ของการส่งผ่านตัวกรองแรกคือx[n]h[n]

X(ejω)H(ejω)

ด้วยและการแปลงฟูริเยร์ของและตามลำดับ การกลับเวลาสอดคล้องกับการแทนที่โดยในโดเมนความถี่ดังนั้นหลังจากเรากลับรายการเวลาX(ejω)H(ejω)x[n]h[n]ωω

X(ejω)H(ejω)

ตัวกรองที่สองผ่านสอดคล้องกับการคูณอีกครั้งด้วย :H(ejω)

X(ejω)H(ejω)H(ejω)

ซึ่งหลังจากเวลาผกผันในที่สุดก็ให้สเปกตรัมของสัญญาณเอาต์พุต

(1)Y(ejω)=X(ejω)H(ejω)H(ejω)=X(ejω)|H(ejω)|2

เพราะค่าสัมประสิทธิ์กรองมูลค่าจริงเรามีomega}) สมการ (1) แสดงให้เห็นว่าคลื่นความถี่เอาต์พุตนั้นได้มาจากการกรองด้วยตัวกรองที่มีการตอบสนองความถี่ซึ่งมีมูลค่าจริงหมดจดนั่นคือเฟสของมันคือศูนย์และดังนั้นจึงมี ไม่มีการบิดเบือนเฟสH(ejω)=H(ejω)|H(ejω)|2

นี่คือทฤษฎี ในการประมวลผลแบบเรียลไทม์แน่นอนว่ามีความล่าช้าค่อนข้างมากเนื่องจากการกลับเวลาใช้งานได้ก็ต่อเมื่อคุณอนุญาตเวลาแฝงที่สอดคล้องกับความยาวของบล็อกอินพุต แต่นี่ไม่ได้เปลี่ยนความจริงที่ว่าไม่มีการบิดเบือนเฟสมันเป็นเพียงความล่าช้าเพิ่มเติมของข้อมูลที่ส่งออก สำหรับการกรอง FIR วิธีการนี้ไม่มีประโยชน์อย่างยิ่งเพราะคุณอาจกำหนดตัวกรองใหม่และได้ผลลัพธ์เดียวกันกับตัวกรองทั่วไป เป็นที่น่าสนใจที่จะใช้วิธีนี้กับตัวกรอง IIR เพราะพวกเขาไม่สามารถมีเฟสเป็นศูนย์ (หรือเฟสเชิงเส้นนั่นคือการหน่วงเวลาที่บริสุทธิ์)h^[n]=h[n]h[n]

ในผลรวม:

  • หากคุณมีหรือต้องการตัวกรอง IIR และคุณต้องการความผิดเพี้ยนของเฟสเป็นศูนย์และความล่าช้าในการประมวลผลจะไม่มีปัญหาวิธีนี้มีประโยชน์

  • หากการประมวลผลล่าช้าเป็นปัญหาคุณไม่ควรใช้

  • หากคุณมีตัวกรอง FIR คุณสามารถคำนวณการตอบสนองตัวกรอง FIR ใหม่ซึ่งเทียบเท่ากับการใช้วิธีนี้ได้อย่างง่ายดาย โปรดทราบว่าด้วยตัวกรอง FIR เฟสเชิงเส้นตรงสามารถรับรู้ได้เสมอ


ฉันสร้างแท็กชื่อmaximum-aposteriori-estimationแล้ว คุณกรุณาเปลี่ยนชื่อมันเป็นmaximum-a-posteriori-estimation? โดยไม่ได้ตั้งใจฉันลืมหลัง- aขอขอบคุณ.
Royi

15

ฉันพบว่าวิดีโอนี้มีประโยชน์มากมาก (อธิบายเพิ่มเติมเกี่ยวกับคำตอบของ Matt)

นี่คือแนวคิดสำคัญบางส่วนจากวิดีโอ:

  • Zero-phase จะไม่ทำให้เกิดการบิดเบือนเฟส แต่จะส่งผลให้เกิดตัวกรองที่ไม่ใช่สาเหตุ ซึ่งหมายความว่าหากข้อมูลถูกกรองขณะรวบรวมข้อมูลจะไม่เป็นตัวเลือก (ใช้ได้กับข้อมูลที่เก็บไว้เท่านั้นซึ่งเราสามารถโพสต์กระบวนการ)ป้อนคำอธิบายรูปภาพที่นี่
  • เมื่อคุณใช้ตัวกรองที่ไม่ใช่สาเหตุ transients จะเบลอไปข้างหน้าและข้างหลัง (เช่นถ้าเราต้องการระลอกคลื่น 2dB ความจริงที่ว่าเราจะทำการเดินหน้าและถอยหลังโดยใช้ตัวกรองหมายความว่าเราต้องการให้แต่ละ สิ่งเหล่านี้มี 1dB)ป้อนคำอธิบายรูปภาพที่นี่
  • ใช้คุณสมบัติการกลับเวลาของการแปลงฟูริเยร์แบบไม่ต่อเนื่อง ป้อนคำอธิบายรูปภาพที่นี่
  • การตอบสนองความถี่ที่มีประสิทธิภาพที่เกิดจาก FILTFILT คือขนาดของมันในทิศทางเดียวยกกำลังสอง คุณรับสัญญาณอินพุตของคุณx[n]กรองกลับผลลัพธ์กรองอีกครั้งและย้อนกลับอีกครั้ง (ขั้นตอนการกลับเวลาต้องมีข้อมูลทั้งหมดให้พร้อมใช้งาน)ป้อนคำอธิบายรูปภาพที่นี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.