ฉันจะใช้ FFT ของข้อมูลที่มีระยะห่างไม่เท่ากันได้อย่างไร


55

ฟูริเยร์ได้อย่างรวดเร็วเปลี่ยนขั้นตอนวิธีการคำนวณการสลายตัวฟูริเยร์ภายใต้สมมติฐานว่าจุดปัจจัยการผลิตมีระยะห่างเท่า ๆ กันในโดเมนเวลา, T เกิดอะไรขึ้นถ้าพวกเขาไม่ได้? มีอัลกอริทึมอื่นที่ฉันสามารถใช้หรือบางวิธีที่ฉันสามารถแก้ไข FFT เพื่อบัญชีสำหรับอัตราการสุ่มตัวอย่างตัวแปรที่มีประสิทธิภาพคืออะไร?tk=kT

หากวิธีการแก้ปัญหาขึ้นอยู่กับวิธีการกระจายตัวอย่างมีสองสถานการณ์ที่ฉันสนใจมากที่สุด:

  • อัตราการสุ่มตัวอย่างคงที่ด้วยกระวนกระวายใจ: โดยที่δ t kเป็นตัวแปรกระจายแบบสุ่ม สมมติว่าปลอดภัยที่จะพูด| δ t k | < T / 2tk=kT+δtkδtk|δtk|<T/2
  • ตัวอย่างลดลงจากอัตราการสุ่มตัวอย่างคงที่: โดยที่n kZktk=nkTnkZk

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

คำตอบ:


40

CddC

ฉันขอแนะนำให้อ่านการเร่งการแปลงฟูเรียร์แบบ nonuniform โดย Greengard และ Lee

O(NdlogN)

จุดสำคัญคือเทคนิคทั้งหมดข้างต้นเป็นการประมาณค่าที่สามารถทำให้ถูกต้องตามอำเภอใจโดยไม่มีค่าใช้จ่ายในการดำเนินการนานขึ้นในขณะที่อัลกอริทึม FFT มาตรฐานนั้นแน่นอน


9

ในการประมวลผลสัญญาณการใช้นามแฝงจะถูกหลีกเลี่ยงโดยการส่งสัญญาณผ่านตัวกรองสัญญาณความถี่ต่ำก่อนสุ่มตัวอย่าง Jack Poulson อธิบายเทคนิคหนึ่งสำหรับ FFT ที่ไม่เหมือนกันโดยใช้ Gaussians ที่ถูกตัดทอนเป็นฟิลเตอร์กรองความถี่ต่ำ คุณลักษณะที่ไม่สะดวกอย่างหนึ่งของ Gaussians ที่ถูกตัดทอนคือแม้ว่าหลังจากที่คุณได้ตัดสินใจเลือกระยะห่างกริดสำหรับ FFT (= อัตราการสุ่มตัวอย่างในการประมวลผลสัญญาณ) คุณยังคงมีพารามิเตอร์อิสระสองตัว: ความกว้างของ Gaussian และรัศมีการตัดทอน

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


6

หากคุณมีความสนใจในซอฟต์แวร์ที่ฉันสามารถขอแนะนำห้องสมุด NFFT (ใน C ด้วยอินเตอร์เฟซที่จะ MATLAB) ซึ่งสามารถพบได้ที่นี่ โปรดทราบว่ายังมีห้องสมุด pfft การคำนวณ FFT ขนานและแม้กระทั่งห้องสมุด PNFFT ขนานไม่ใช่ equispaces-FFTs โดยนักพัฒนาเดียวกัน


1
เท่าที่ฉันรู้ PNFFT เป็นห้องสมุดที่เร็วที่สุดสำหรับ FFT แบบ 3 มิติที่ไม่เหมือนกัน
Jack Poulson

ดูเหมือนว่าลิงก์สำหรับ PNFFT จะใช้งานไม่ได้
โหลด

2

นอกจากคำตอบที่ยอมรับแล้ว นี่คือลิงค์ไปสู่การใช้งานโอเพ่นซอร์สของวิธีการของ Greengard และ Lee: https://finufft.readthedocs.io/en/latest/ มันมี wrappers ไปที่ C, fortran, MATLAB, ระดับแปดเสียงและหลาม ฉันเชื่อว่า FINUFFT เขียนด้วยภาษา C ++

มันได้รับการบำรุงรักษาและใช้งานที่ NYU Courant institute, SFU, Flatiron institute (ชัด), มหาวิทยาลัย Texas Austin และ Florida State University อย่างน้อยนี่คือสิ่งที่ฉันรู้

ฉันเป็นคนรุ่นเก่าเพราะฉันขี้เกียจ ดู: https://cims.nyu.edu/cmcl/nufft/nufft.html


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