จะหาเคอร์เนล convolution ในโดเมนความถี่ได้อย่างไร


12

ฉันมีเวกเตอร์ข้อมูลปริภูมิสองตัว (แต่ละอันมีความยาวประมาณ 2,000 องค์ประกอบ) หนึ่งคือเวอร์ชันที่น่าเชื่อถือของอีกรุ่นหนึ่ง ฉันพยายามตรวจสอบเคอร์เนลที่จะทำให้เกิดการโน้มน้าวใจ ฉันรู้ว่าฉันสามารถทำได้โดยค้นหาการแปลงฟูริเยร์ผกผันของอัตราส่วนของการแปลงฟูริเยร์ของเวกเตอร์เอาท์พุทและอินพุต แน่นอนเมื่อฉันทำสิ่งนี้ฉันได้รับรูปร่างมากขึ้นหรือน้อยลงที่ฉันคาดหวัง อย่างไรก็ตามเคอร์เนลเวกเตอร์ของฉันมีมิติข้อมูลเดียวกันกับเวกเตอร์อินพุตสองตัวเมื่อในความเป็นจริงการบิดนั้นใช้เพียงหนึ่งในห้า (~ 300-400) ของคะแนน ความจริงที่ว่าฉันได้รูปร่างที่ถูกต้อง แต่จำนวนจุดผิดทำให้ฉันคิดว่าฉันไม่ได้ใช้ฟังก์ชั่น ifft และ fft ค่อนข้างถูกต้อง ดูเหมือนว่าถ้าฉันทำสิ่งที่ถูกต้องสิ่งนี้ควรเกิดขึ้นตามธรรมชาติ ตอนนี้ฉันกำลังทำอยู่

FTInput = fft(in); 
FtOutput = fft(out);
kernel = ifft(FtOutput./FTInput).

สิ่งนี้ถูกต้องและขึ้นอยู่กับฉันในการตีความเวกเตอร์เอาท์พุทอย่างถูกต้องหรือฉันมีงานที่เกินขนาด ฉันแน่ใจว่ามันหลังฉันไม่แน่ใจว่าอยู่ที่ไหน


2
ข้อมูลอินพุตของคุณเป็นศูนย์ทั้งสองด้านจนถึงความยาวของเคอร์เนล convolution หรือไม่? ควรเป็นอย่างอื่นมิเช่นนั้นข้อมูลของคุณอาจสูญหายซึ่งอาจเป็นสาเหตุของสิ่งประดิษฐ์เหล่านี้
leftaroundabout

คำตอบ:


5

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


มันใช้การได้ดีและฉันก็ค้นพบสิ่งใหม่ที่ฉันไม่รู้ว่ามีอยู่จริง
Bowler

@Phon ลิงค์เหล่านั้นทำงานอย่างไร นี่คือการลงทะเบียนสำหรับอะไรกันแน่?
Spacey

@Mohammad: สำหรับการเข้าถึงบทความและหนังสือการตรวจสอบทางเทคนิคของBrüel & Kjær สมัครฟรีและให้การเข้าถึงบทความดีๆมากมาย
ธ.ค.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.