วิธีการเลือกความละเอียดความถี่และขนาดหน้าต่างใน FFT?


9

ฉันกำลังทำการวิเคราะห์สเปกตรัมของสัญญาณที่เปลี่ยนแปลงเวลาด้วยความถี่เปลี่ยนจาก 200Hz เป็น 10kHz ฉันใช้ FFT เพื่อวิเคราะห์องค์ประกอบความถี่ในสัญญาณ คำถามของฉันคือ:

  1. จะตัดสินใจเกี่ยวกับความละเอียดของความถี่และความกว้างของหน้าต่างสำหรับสัญญาณได้อย่างไร?
  2. ฟังก์ชั่นหน้าต่างประเภทใดที่เหมาะกับสัญญาณที่เปลี่ยนแปลงเวลา
  3. ขนาดที่เหมาะสมสำหรับ FFT คืออะไร

อัตราการสุ่มตัวอย่างของสัญญาณคือ 44.1kHz


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

มันไม่ได้กระโดดมันยังคงเป็นสัญญาณที่แตกต่างกันคล้ายกับสัญญาณ Chirp แอมพลิจูดของแต่ละความถี่อาจเปลี่ยนแบบสุ่ม
nitin

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

@ScottSeidman คุณอ่านใจของฉัน
Vasiliy

1
@ trav1s เราทุกคนสอนต่างกัน หากนักเรียนของฉันมาหาฉันพร้อมกับคำถามนี้ด้วยวิธีนี้ฉันจะพยายามส่งข้อความกลับบ้านที่เขาได้รับพร้อมกับความคิดเห็นโดยละเอียดของฉันข้างต้น - "วิศวกรควรเข้าใจว่าทำไมเขาหรือเธอถึงทำ ก่อนที่จะเริ่มดำเนินการ " มีทรัพยากรนับพันที่เราสามารถหาสมการที่อธิบายความละเอียดความถี่เป็นฟังก์ชันของ N ได้และรู้สึกว่าผู้ถามมีอยู่ แต่ข้อความนั้นไม่ได้เชื่อมโยงกับพวกเขา! หวังว่าผู้ผลิตจะทำให้ผู้ถามทราบว่าเขากำลังถือคำตอบอยู่แล้ว
Scott Seidman

คำตอบ:


4

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

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

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


โปรดทราบว่าในขณะที่การเรียกใช้การประเมินผล FFT บนบล็อกตามลำดับนั้นเป็นไปได้ง่าย แต่ก็เป็นไปได้ที่จะเรียกใช้การประเมิน FFT ที่ซ้อนกันของบล็อกข้อมูลเช่นเริ่มต้น FFT 1024 จุดทุก 256 ตัวอย่าง - ให้ความคมชัดเวลาค่อนข้างดี ค่าใช้จ่ายในการคำนวณยังมากขึ้น
Chris Stratton

0

ดังนั้นอย่างแรกสิ่งแรกความถี่สุ่มตัวอย่างต้องมีอย่างน้อยสองเท่าของความถี่สูงสุดของสัญญาณซึ่งก็คือ (44.1kHz> 2x10kHz) ถัดไปหากความยาวของหน้าต่างในโดเมนเวลาคือ T ความละเอียดความถี่ด้วย FFT เท่ากับ 1 / T การแก้ปัญหาในโดเมนความถี่ที่ใช้ FFT นั้นไม่เกี่ยวข้องกับความถี่การสุ่มตัวอย่างในโดเมนเวลา แต่ดังที่กล่าวไว้ในคำตอบก่อนหน้านี้หน้าต่างโดเมนเวลาไม่สามารถมีขนาดใหญ่เกินไปเพราะคุณจะสูญเสียข้อมูลเกี่ยวกับสัญญาณปลอมที่ปรากฏขึ้นชั่วขณะ ดังนั้นจะต้องมีการประนีประนอมระหว่างความละเอียดความถี่และการตรวจจับสัญญาณปลอม สุดท้าย FFT ไม่ใช่วิธีเดียวที่จะรับสัญญาณจากโดเมนเวลาไปยังโดเมนความถี่ หากคุณกำลังมองหาความละเอียดสูงในโดเมนความถี่ที่มีตัวอย่างจำนวน จำกัด ในโดเมนเวลาคุณสามารถใช้เทคนิคการประมาณสเปกตรัมความละเอียดสูงเช่น MUSIC และ ESPIRIT นอกจากนี้ยังใช้สำหรับการประมาณทิศทางของการมาถึง (DOA) ซึ่งค่อนข้างคล้ายกับปัญหาการประมาณสเปกตรัม


อืมไม่ ... อ่าน nyquist อีกครั้ง หากคุณต้องการสร้างความถี่ที่เชื่อถือได้คุณจะต้องใช้ 5-10x ในทำนองเดียวกันหน้าต่างที่กว้างขึ้นช่วยให้การสร้างความถี่ต่ำสุดที่น่าสนใจไปที่ฮาร์โมนิคย่อย สัญญาณปลอมจะไม่สามารถดูได้อย่างน่าเชื่อถือใน FFT ต่อไปเนื่องจากชีพจร dirac อาจมีเนื้อหาความถี่สูงหน้าที่ของมันคือ "สุ่ม" เฉพาะองค์ประกอบที่เชื่อถือได้ / เป็นระยะจะแสดงด้วยแอมพลิจูดที่มีนัยสำคัญ
JonRB

ช่วงความถี่ของสัญญาณที่น่าสนใจคือจาก 200Hz ถึง 10kHz ... ดังนั้นความถี่การสุ่มอย่างน้อย 4.41 เท่าของความถี่สัญญาณ ... ถ้าเราดูที่ปลายล่างของสเปกตรัมความถี่การสุ่มคือ 220.5 เท่า ... เราอาจต้องรู้ว่าความถี่นั้นกระจายกันทางสถิติได้อย่างไร ... ฉันคิดว่าความถี่การสุ่มตัวอย่างไม่ใช่ปัญหาที่นี่!
Yasir Ahmed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.