ฟังก์ชั่นหน้าต่าง FFT ที่ดีคืออะไรที่จะปฏิเสธ DC


9

ฉันใช้ FFT เพื่อวิเคราะห์สิ่งที่เป็นซองจดหมายพลังงานของสัญญาณ (ดูที่นี่สำหรับข้อมูลเกี่ยวกับโครงการที่มี) และเนื่องจากตัวเลขพลังงานเป็นบวกเสมอเพื่อกำจัดองค์ประกอบ DC ที่ฉันต้องการใช้หน้าต่าง ฟังก์ชันที่มีค่าเป็นบวกและลบ 50/50, เทียบกับฟังก์ชั่นค่าบวกปกติทั้งหมด

ฉันใช้ฟังก์ชั่น" flat top " ลบa0อคติแล้วแปลงจาก cosines เป็น sines แต่ฉันไม่แน่ใจว่ามันดีที่สุด (หรือแม้แต่มีความหมาย)

ข้อเสนอแนะใด ๆ


9
เพียงแค่ลบค่าเฉลี่ยก่อนที่จะ windowing?
endolith

คำตอบ:


2

อนุพันธ์อันดับที่ 1 ของฟังก์ชันหน้าต่างแบบต่อเนื่องที่พบบ่อยที่สุด (ฟอนฮัน ฯลฯ ) จะปฏิเสธ DC แต่จะยังคงมีการตอบสนองความถี่ที่มีขนาดใกล้เคียงกับฟังก์ชันหน้าต่างดั้งเดิม ดังนั้นคุณยังคงสามารถใช้เกณฑ์ "ความดี" ดั้งเดิมของคุณสำหรับการเลือกหน้าต่างได้หากไม่เกี่ยวข้องกับเฟส


2
แม้ว่าการตอบกลับนี้ส่วนใหญ่จะถูกต้อง แต่ก็มีความคิดเห็นมากกว่าดังนั้นการขยายตัวในนั้นจะมีประโยชน์มาก
Phonon

อย่างไรก็ตามมันจะตอบคำถามของฉันในระดับหนึ่ง
Daniel R Hicks

1
มีเหตุผลในการทำเช่นนี้แทนที่จะเพียงแค่ลบค่าเฉลี่ยก่อนที่จะ windowing?
nibot

หากคำตอบของ JasonR ถูกต้องความคิดของการปฏิเสธ DC ผ่านฟังก์ชั่นหน้าต่าง (และยังคงได้รับการประเมินสเปกตรัมที่ดี) จะไม่ทำงาน
nibot

@nibot: สาเหตุที่เป็นไปได้อาจเป็นไปไม่ได้ว่าการบวกการลบไม่สามารถทำได้ (ไม่สามารถใช้ได้ใน
ไพพ์

7

หากคุณกังวลเกี่ยวกับการวิเคราะห์สเปกตรัมบนสัญญาณที่มีส่วนประกอบ DC ขนาดใหญ่และคุณต้องการที่จะยับยั้ง DC peak นั่นคือฟังก์ชั่นหน้าต่างไม่ใช่สิ่งที่คุณต้องการ ตามคำตอบอื่น ๆ ที่ระบุไว้ตัวกรองสัญญาณเสียงสูง (หรือเมื่อดูต่างกันตัวกรองรอยที่มีรอยที่ความถี่ศูนย์) เป็นวิธีแก้ปัญหาที่เหมาะสม

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

X[k]=n=0N1x[n]ej2πnkN

การแปลความหมายหนึ่งของวิธีการทำงานของ DFT เป็นธนาคารของตัวกรองที่ความถี่เท่า ๆ กันระยะห่างระหว่างและ{2} สร้างยอดรวมใหม่ดังต่อไปนี้:Nfs2fs2

X[k]=n=0N1xk[n]

ที่อยู่:

xk[n]=x[n]ej2πnkN

ดังนั้น -th DFT เอาท์พุทถูกสร้างขึ้นโดยรับสัญญาณอินพุตและคูณมันด้วยเลขชี้กำลังเชิงซ้อนที่ความถี่เพื่อให้ได้สัญญาณ downconverted . สัญญาณส่งผลสรุปแล้วกว่าหน้าต่าง -sample ให้ผลผลิตผลผลิต DFT[k] นี่คือตัวกรองค่าเฉลี่ยเคลื่อนที่ที่มีประสิทธิภาพ (บางครั้งเรียกว่าตัวกรองแบบ boxcar) ซึ่งสามารถอธิบายการตอบสนองต่อแรงกระตุ้นได้ดังนี้:kx[n]2πkNxk[n]NX[k]

b[n]={1, x=0,1,,N10, otherwise

การตอบสนองขนาดของตัวกรอง boxcar สามารถพบได้โดยการแปลงฟูริเยร์แบบไม่ต่อเนื่อง (DTFT)ของการตอบสนองต่อแรงกระตุ้น

|H(f)|=|sin(Nπffs)sin(πffs)|

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

ตอนนี้ให้พิจารณาว่าสิ่งต่าง ๆ เปลี่ยนแปลงไปอย่างไรถ้าคุณใช้ฟังก์ชั่นหน้าต่างกับสัญญาณอินพุตก่อนดำเนินการ DFT:x[n]

X[k]=n=0N1w[n]x[n]ej2πnkN=n=0N1w[n]xk[n]

เมื่อฟังก์ชั่นหน้าต่างเข้าที่แล้ว downconvertedจะผ่านตัวกรอง FIR ได้อย่างมีประสิทธิภาพพร้อมกับการตอบสนองต่อแรงกระตุ้นที่อธิบายโดยฟังก์ชันหน้าต่าง ดังนั้นการตอบสนองต่อขนาดเอาต์พุตของ DFT คือ:xk[n]

|H(f)|=|W(f)|

ที่ DTFT ของฟังก์ชั่นหน้าต่าง[N] ตอนนี้โปรดทราบว่าถ้าคุณเลือกฟังก์ชั่นหน้าต่างที่มีศูนย์ที่ DC และใช้ฟังก์ชันนี้เพื่อให้ได้ก่อนใน DFT คุณจะทำให้เกิดผลที่ไม่ได้ตั้งใจจากการทำให้เป็นโมฆะไม่เฉพาะ DC ในสเปกตรัมที่เกิดขึ้น ของเอาต์พุต DFT ทุกตัว นี่อาจไม่ใช่สิ่งที่คุณต้องการW(f)w[n]x[n]

ดังนั้นหากคุณเพียงต้องการที่จะยกเลิกส่วนประกอบ DC ของสัญญาณให้ลบออกผ่านการประมวลผลล่วงหน้าประเภทอื่น ๆ ไม่ใช่การเปิดหน้าต่างโดเมนเวลา คุณสามารถใช้ตัวกรองเชิงเส้นไฮดรอลิกที่มีความถี่คัตออฟต่ำมากหรือลบค่าเฉลี่ยที่ประมาณจากสัญญาณก่อนตัวอย่างเช่น การเลือกระหว่างวิธีการเหล่านี้ควรขึ้นอยู่กับข้อ จำกัด อื่น ๆ ที่ระบบของคุณมี


3

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


การใช้ตัวกรองความถี่สูงไม่ได้เป็นตัวเลือกหากไม่มีสัญญาณในรูปแบบแอนะล็อก แต่ฉันเชื่อว่าคุณ (& endolith) ถูกต้องที่การลบค่าเฉลี่ยควรทำงานโดยเฉพาะอย่างยิ่งหากมีการใช้หน้าต่างที่ดึงจุดสิ้นสุดเป็นศูนย์ (และฟิลเตอร์กรองความถี่สูงจะต้องมีการตัดทอนที่ต่ำลงเนื่องจากฉันกำลังวิเคราะห์สัญญาณลดลงเหลือเพียง 0.01 Hz)
Daniel R Hicks

2
ทำไมคุณคิดว่าคุณต้องใช้สัญญาณอะนาล็อกเพื่อใช้ตัวกรองสัญญาณเสียงสูง แน่นอนเป็นไปได้ที่จะสร้าง HPF ดิจิทัล
Jason R

@ JasonR - ฉันจะยอมรับว่าฉันไม่รู้ในเรื่องนี้ (หลักสูตรสัญญาณของฉันเมื่อ 40 ปีที่แล้วค่อนข้างมากก่อน FFT และคณะ) แต่ดูเหมือนว่าฉันจะสร้างตัวกรองดิจิตอลสูงผ่านฉัน ก่อนอื่นต้องทำการแปลงฟูริเยร์ของสัญญาณ
Daniel R Hicks

1
นั่นไม่ใช่กรณีทั้งหมด คุณสามารถสร้างตัวกรอง highpass เช่นเดียวกับ lowpass, bandpass และอื่น ๆ ในความเป็นจริงมีเทคนิคสำหรับการทำต้นแบบตัวกรอง lowpass และเปลี่ยนเป็น highpass filter ที่มีการตอบสนองแบบอะนาล็อก ซอฟต์แวร์ส่วนใหญ่สำหรับการออกแบบตัวกรอง (เช่น MATLAB) สามารถใช้เพื่อสร้างตัวกรองทุกประเภท
Jason R

1
ฉันไม่แน่ใจว่าคุณได้รับความประทับใจว่าการใช้งานตัวกรอง highpass นั้นต้องการความแตกต่างอย่างไร การแยกความแตกต่างเป็นการใช้งาน highpass แต่ไม่เหมาะสำหรับการใช้งานตัวกรอง highpass (เนื่องจากการตอบสนองความถี่ของมันคือทางลาดทำให้มันขยายความถี่สูงขึ้นเมื่อมีสัญญาณรบกวนอยู่บ่อยครั้ง) บทความวิกิพีเดียเกี่ยวกับการกรอง highpass จะเริ่มต้นที่ดี
Jason R
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.