ความสัมพันธ์ข้ามและการโน้มน้าวมีความสัมพันธ์กันอย่างใกล้ชิด ในระยะสั้นเพื่อทำสังวัตนากับ FFT คุณ
- zero-pad สัญญาณอินพุต (เพิ่มศูนย์ไปยังจุดสิ้นสุดเพื่อให้อย่างน้อยครึ่งหนึ่งของคลื่นเป็น "ช่องว่าง")
- ใช้ FFT ของสัญญาณทั้งสอง
- คูณผลลัพธ์เข้าด้วยกัน (การคูณองค์ประกอบที่ชาญฉลาด)
- ทำ FFT ผกผัน
conv(a, b) = ifft(fft(a_and_zeros) * fft(b_and_zeros))
คุณต้องทำการ zero-padding เนื่องจากวิธีการ FFT เป็นความสัมพันธ์ข้ามแบบวงกลมซึ่งหมายความว่าสัญญาณถูกล้อมรอบที่ปลาย ดังนั้นคุณจึงเพิ่มศูนย์พอที่จะกำจัดการทับซ้อนเพื่อจำลองสัญญาณที่ไม่มีศูนย์
ในการรับcross-correlationแทนที่จะเป็น convolution คุณต้องย้อนกลับสัญญาณใดสัญญาณหนึ่งก่อนที่จะทำ FFT หรือใช้การรวมกันที่ซับซ้อนของสัญญาณใดสัญญาณหนึ่งหลังจาก FFT:
corr(a, b) = ifft(fft(a_and_zeros) * fft(b_and_zeros[reversed]))
corr(a, b) = ifft(fft(a_and_zeros) * conj(fft(b_and_zeros)))
ไม่ว่าฮาร์ดแวร์หรือซอฟต์แวร์ของคุณจะเป็นอะไรก็ตาม สำหรับ autocorrelation (cross-correlation ของสัญญาณด้วยตัวมันเอง) มันจะเป็นการดีกว่าถ้าคุณทำการผันคำกริยาที่ซับซ้อนเพราะคุณจะต้องคำนวณ FFT เพียงครั้งเดียว
หากสัญญาณเป็นจริงคุณสามารถใช้ FFT จริง (RFFT / IRFFT) และประหยัดเวลาการคำนวณครึ่งหนึ่งของคุณโดยการคำนวณเพียงครึ่งหนึ่งของสเปกตรัม
นอกจากนี้คุณสามารถประหยัดเวลาในการคำนวณได้ด้วยการขยายขนาดให้ใหญ่ขึ้นซึ่ง FFT นั้นได้รับการปรับให้เหมาะสมที่สุด (เช่นหมายเลข5-smoothสำหรับ FFTPACK, หมายเลข~ 13-smooth สำหรับ FFTWหรือกำลังของ 2 สำหรับการใช้ฮาร์ดแวร์อย่างง่าย)
นี่คือตัวอย่างใน Python ที่มีความสัมพันธ์แบบ FFT เทียบกับความสัมพันธ์แบบ brute-force: https://stackoverflow.com/a/1768140/125507
สิ่งนี้จะทำให้คุณมีฟังก์ชันข้ามสหสัมพันธ์ซึ่งเป็นการวัดความคล้ายคลึงกันเทียบกับออฟเซ็ต เพื่อให้ได้ค่าออฟเซตที่คลื่น "เรียงกัน" กันจะมีจุดสูงสุดในฟังก์ชันสหสัมพันธ์:
ค่า x ของจุดสูงสุดคือ offset ซึ่งอาจเป็นลบหรือบวก
ฉันเพิ่งเห็นสิ่งนี้เคยพบการชดเชยระหว่างสองคลื่น คุณสามารถรับค่าประมาณของการชดเชยที่แม่นยำยิ่งขึ้น (ดีกว่าความละเอียดของตัวอย่างของคุณ) โดยใช้การประมาณพาราโบลา / กำลังสองบนจุดสูงสุด
ในการรับค่าความคล้ายคลึงกันระหว่าง -1 และ 1 (ค่าลบที่ระบุว่าสัญญาณใดสัญญาณหนึ่งลดลงตามการเพิ่มขึ้นอื่น ๆ ) คุณจะต้องปรับขนาดแอมพลิจูดตามความยาวของอินพุตความยาวของ FFT การใช้ FFT เฉพาะของคุณ การปรับขนาด ฯลฯ ความสัมพันธ์อัตโนมัติของคลื่นด้วยตัวเองจะให้คุณค่าของการจับคู่ที่เป็นไปได้สูงสุด
โปรดทราบว่าจะใช้งานได้กับคลื่นที่มีรูปร่างเหมือนกัน หากพวกเขาถูกสุ่มตัวอย่างบนฮาร์ดแวร์ที่แตกต่างกันหรือมีสัญญาณรบกวนบางส่วน แต่อย่างอื่นยังคงมีรูปร่างเดียวกันการเปรียบเทียบนี้จะใช้งานได้ แต่ถ้ารูปร่างคลื่นมีการเปลี่ยนแปลงโดยการกรองหรือการเปลี่ยนเฟสพวกเขาอาจฟังดูเหมือนกัน แต่ชนะ ไม่สัมพันธ์เช่นกัน