ऑडियो संकेतों के समय में देरी को मापने


9

इससे पहले कि कोई मुझ पर चिल्लाता है मुझे पूरी तरह से पता है कि यह सवाल कई बार पूछा गया है। मैं आपको विश्वास दिलाता हूं कि मैंने मौजूदा प्रश्नों और उत्तरों के माध्यम से पढ़ा है लेकिन मैं अभी भी समस्या के भाग को लेकर उलझन में हूं।

मेरे पास एक ध्वनि स्रोत है जो एक बंद वातावरण में संगीत (ए) निभाता है। मेरे पास एक माइक है जिसे मैं रिकॉर्ड करने के लिए उपयोग कर रहा हूं। मैं दो wav फ़ाइलों के साथ छोड़ दिया गया हूं जो समान विशेषताओं और लंबाई (नमूनों की संख्या) साझा करते हैं।

मेरा लक्ष्य माइक तक पहुंचने के लिए ए के लिए लगने वाले समय की गणना है।

मैं क्रॉस-सहसंबंध (संख्यात्मक) का उपयोग करके गणना करने की कोशिश कर रहा हूं:

# 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? देरी का अनुमान लगाने के लिए, आप अपने संकेतों को क्रॉस-सहसंबंधित करना चाहते हैं, न कि उन्हें हल करना। आप संभवतः समापन के द्वारा बहुत अधिक विलंब के साथ समाप्त होंगे।
पीटर के.एच.

पीटरके की संभावना सही है। ध्यान दें कि आप समय-समय पर उलटफेर के जरिए सहसंबंध को लागू कर सकते हैं और पहले किसी एक इनपुट को जोड़ सकते हैं। यह आपको सहसंबंध के लिए तेजी से सजा एल्गोरिदम (जैसे ओवरलैप-सेव) का उपयोग करने की अनुमति दे सकता है।
जेसन आर

जवाबों:


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
यह वही है जिसकी मुझे तलाश थी। एक अन्य उदाहरण जो मैंने देखा था, जिसमें दोषसिद्धि का इस्तेमाल किया गया था और यह मेरे लिए नहीं था कि प्रत्यक्ष सहसंबंध सही विकल्प होगा। धन्यवाद।
केमैनएस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.