Avant que quelqu'un ne me crie dessus, je me rends pleinement compte que cette question a été posée à plusieurs reprises. Je vous assure que j'ai lu les questions et réponses existantes mais je suis toujours confus sur une partie du problème.
J'ai une source sonore qui joue de la musique (A) dans un environnement fermé. J'ai un micro que j'utilise pour enregistrer A. Je me retrouve avec deux fichiers wav qui partagent les mêmes caractéristiques et la même longueur (nombre d'échantillons).
Mon objectif est de calculer le temps qu'il a fallu à A pour atteindre le micro.
J'essaie d'effectuer le calcul en utilisant la corrélation croisée (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))
J'obtiens constamment des valeurs dans la plage de 300 000 cm. La distance entre le haut-parleur et le micro est d'environ 2 pieds.
Tout cela est assez nouveau pour moi, donc je suis sûr que je manque quelque chose d'évident.
Merci d'avance.
la source
numpy.correlate
place denumpy.convolve
? Pour estimer le retard, vous voulez intercorréler vos signaux, pas les convoluer. Vous vous retrouverez peut-être avec un retard beaucoup plus important en convoluant.Réponses:
Êtes-vous sûr de ne pas utiliser à la
numpy.correlate
place denumpy.convolve
? Pour estimer le retard, vous voulez intercorréler vos signaux, pas les convoluer. Vous vous retrouverez peut-être avec un retard beaucoup plus important en convoluant.Essayer quelque chose de simple:
la source