Skip to content

Direction d'arrivée (DOA)

Deux microphones distants de d enregistrent la même source en champ lointain. Le front d'onde atteint le premier micro, puis parcourt dsinθ avant le second : le signal y arrive avec un retard τ=dsinθ/c, où c343 m/s. Estimer τ, c'est estimer la direction d'arrivée (direction of arrival, DOA), le principe de la localisation binaurale, des antennes acoustiques et des sonars. Les signaux reçus se modélisent par

x1[n]=s[n]+w1[n],x2[n]=s[nτ]+w2[n],

s est le signal source et w1,w2 deux bruits Gaussiens indépendants de variance σ2.

1. Lien avec le cours

Le projet déroule la démarche complète du chapitre 2 : un estimateur construit en minimisant une loss, une optimisation sur grille, et une performance jugée par la variance estimée par Monte-Carlo.

2. Structure du code

Le cadre commun des projets d'estimation s'applique : le modèle d'abord, une classe au gabarit de scipy.stats, puis la loss, une fonction séparée, et enfin les algorithmes qui la minimisent.

python
class TwoMicrophones:
    """Two-microphone array: x1 = s + w1, x2 = delayed s + w2."""

    def __init__(self, d=0.15, fs=8000, c=343.0):
        self.d, self.fs, self.c = d, fs, c

    def delay(self, theta):
        """Delay in samples for a source at angle theta (radians)."""
        ...

    def rvs(self, s, theta, snr_db, rng):
        """Simulate one recording (x1, x2)."""
        ...


def loss(tau, x1, x2):
    """Least squares misfit between x2 and x1 delayed by tau samples."""
    ...

Tests imposés. Sans bruit, la loss est minimale exactement au retard vrai, et l'estimation retrouve l'angle à la précision de la grille ; et le cas limite delay(0), une source en face, donne un retard nul.

3. Travail demandé

  1. La géométrie. Démontrer sinθ=cτ/d à partir du front d'onde plan. Avec d=15 cm et une fréquence d'échantillonnage fs=8 kHz, que vaut le retard en échantillons pour θ=30° ? Quel est le domaine des retards physiquement possibles ?
  2. Le simulateur. Écrire une fonction qui fabrique (x1,x2) pour un signal source donné (un extrait de parole ou un bruit filtré), un angle et un SNR. Se limiter aux retards entiers en échantillons. Tester le simulateur sur les cas où la réponse est connue, θ=0, SNR infini.
  3. L'estimateur. Montrer que la minimisation de la loss des moindres carrés J(τ)=n(x2[n]x1[nτ])2 revient à maximiser la corrélation croisée r12(τ)=nx1[n]x2[n+τ]. Implémenter la recherche sur la grille des retards physiquement possibles, puis raffiner le pic par interpolation parabolique sur trois points.
  4. La performance. Pour chaque SNR de 10 à +20 dB, estimer par Monte-Carlo (500 tirages) la variance de τ^. Tracer la courbe en échelle logarithmique : identifier le régime où la variance décroît régulièrement, et le seuil de décrochage en dessous duquel l'estimateur choisit des pics aberrants.
  5. L'angle et son incertitude. Convertir τ^ en θ^=arcsin(cτ^/d), et propager l'incertitude par différentiation : σθ^cdcosθ^στ^. Livrer l'angle sous la forme θ^±σθ^. Que devient la précision quand la source est sur le côté, θ±90° ? Le vérifier par simulation.

4. Livrables

Le notebook reproductible des modalités communes, avec la démonstration de l'étape 3 rédigée, la courbe variance/SNR commentée, et un tableau final θ vrai / θ^±σθ^ pour trois angles.