การวัดการหน่วงเวลาของสัญญาณเสียง


9

ก่อนที่ทุกคนจะตะโกนใส่ฉันฉันก็ตระหนักว่าคำถามนี้ถูกถามมาหลายครั้งแล้ว ฉันรับรองว่าฉันได้อ่านคำถามและคำตอบที่มีอยู่แล้ว แต่ฉันยังสับสนเกี่ยวกับปัญหา

ฉันมีแหล่งกำเนิดเสียงที่เล่นเพลง (A) ในสภาพแวดล้อมที่ปิด ฉันมีไมโครโฟนที่ฉันใช้บันทึก A. ฉันเหลือไฟล์ wav สองไฟล์ซึ่งมีลักษณะและความยาวเท่ากัน (จำนวนตัวอย่าง)

เป้าหมายของฉันคือคำนวณเวลาที่ใช้ในการเข้าถึงไมโครโฟน

ฉันพยายามคำนวณโดยใช้ความสัมพันธ์ข้าม (numpy):

# Delay estimation
corr = numpy.convolve(original_audio, recorded_audio, 'full')
delay = int(len(corr)/2) - numpy.argmax(corr)
distance = delay / sample_rate * 343 # sample_rate == 22050, m/s = speed of sound
print("Distance full: %.2f cm" % (distance * 100))

ฉันได้รับค่าอย่างต่อเนื่องในช่วง 300,000 ซม. ระยะห่างระหว่างลำโพงและไมโครโฟนประมาณ 2 ฟุต

ทั้งหมดนี้เป็นเรื่องใหม่สำหรับฉันดังนั้นฉันแน่ใจว่าฉันขาดอะไรบางอย่างที่ชัดเจน

ขอบคุณล่วงหน้า.


3
คุณแน่ใจว่าคุณไม่ควรจะใช้numpy.correlateแทนnumpy.convolve? ในการประมาณความล่าช้าคุณต้องการเชื่อมโยงสัญญาณของคุณไม่ใช่เชื่อมโยงสัญญาณเหล่านั้น คุณจะจบลงด้วยความล่าช้าที่มากขึ้นโดยการชักจูง
Peter K.

PeterK น่าจะถูกต้อง โปรดทราบว่าคุณสามารถใช้สหสัมพันธ์ผ่านการโน้มน้าวด้วยการย้อนเวลาและผันหนึ่งอินพุตก่อน วิธีนี้ช่วยให้คุณสามารถใช้อัลกอริทึมแบบรวดเร็ว (เช่นการทับซ้อนกัน - บันทึก) สำหรับความสัมพันธ์
Jason R

คำตอบ:


8

คุณแน่ใจว่าคุณไม่ควรจะใช้numpy.correlateแทนnumpy.convolve? ในการประมาณความล่าช้าคุณต้องการเชื่อมโยงสัญญาณของคุณไม่ใช่เชื่อมโยงสัญญาณเหล่านั้น คุณจะจบลงด้วยความล่าช้าที่มากขึ้นโดยการชักจูง

ลองทำอะไรที่เรียบง่าย:

x = [1, 0, 0, 0, 0 ];
y = [0, 0, 0, 0, 1 ];
conv = numpy.convolve(x,y); 
conv
array([0, 0, 0, 0, 1, 0, 0, 0, 0])
corr = numpy.correlate(x,y,"full");
corr
array([1, 0, 0, 0, 0, 0, 0, 0, 0])

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