• Aucun résultat trouvé

8.5 Stabilisation de la phase

9.1.2 Description des algorithmes

Soit, comme à la sectionB.1, un vecteur de données de taille N, représenté par l’élément de vecteur xiet contenant les données expérimentales à traiter. Chaque valeur de l’index i

Ncorrespond à un échantillon mesuré, il agit donc comme

le degré de liberté temporel au même titre que t dans le cas théorique continu. Ainsi, ils seront reliés par t

=

i/fe, où fe est la fréquence d’échantillonnage de la carte d’acquisition.

On cherche ici à calculer l’autocovariance telle que modélisée à l’équation (7.43), c’est-à-dire qu’on ne garde que le décalage temporel — représenté par le décalage d’index k — comme degré de liberté temporel ; on prétend que le signal est stationnaire au sens large. Cette modélisation correspond exactement à l’autocovariance dans le cas des signaux stationnaires au sens large, mais permet tout de même de définir la densité spectrale pour tout signal, sans égard à la stationnarité3. On profite aussi de la parité de l’autocovariance Sˆ(

T)

=

(T),

1. Sans valeurs négatives ; nécessairement de moyenne non nulle pour un signal non nul. 2. Pouvant tout de même être de moyenne non nulle à cause des imperfections expérimentales, bien que l’on mesure des fluctuations.

voir (7.46), pour ne calculer que les délais positifs et ainsi dinimuer le temps de calcul.

En pratique, il n’est pas pertinent de mesurer toutes les valeurs possibles de

k entre 0 et N

1 ; on se limite à un k maximal correspondant à la résolution

voulu dans le domaine temporel [54,55]. Typiquement, les valeurs de k plus grandes que 1/fmin, soit l’échelle de temps associée à la fréquence la plus faible

contenue dans la bande passante de la mesure, sont ignorées. Elles apportent en fait très peu d’information pertinente et peuvent même venir brouiller les résultats en incluant des réflexions parasites du signal mesuré. Comme il est trivial d’éliminer des valeurs de k après la mesure, on préconise d’en mesurer un peu plus que le strict minimum, mais on se limitera tout de même à un nombre de valeurs de k très petit comparativement à N.

Une différence majeure entre le cas continu et celui discret est l’effet de bord à la fin du vecteur de données. En effet, les traces expérimentales sont de longueur

N finie4, ce qui fait que — pour un délai k donné — il y aura k échantillons

manquants en fin de trace lors du calcul des termes xixi+k; spécifiquement les termes xNjxNj+k avec 1

j

k. La description qui suit tient compte de cette particularité.

Soit donc la version autocovariance discrète de (7.43), l’élément de vecteur

ak

=

N1

k Nk−1

i=0 (xi

µ0 ,k)(xi+k

µk,0), (9.1) avec µn ,m

=

1 N

n

m Nm1

i=n xi (9.2) pour n , m

N et 0

m

+

n

<

N, (9.3)

la moyenne partielle effectuée sur N

n

m des N échantillons de la mesure.

On utilise cette variété de la moyenne de manière à ce que chacun des termes soustraits dans l’une ou l’autre des parenthèses de (9.1) fasse intervernir le même

sous-ensemble d’échantillons. Autrement dit, puisque xi dans (9.1) prendra les valeurs d’index 0 à N

k

1 lors de la somme, on lui soustrait µ0 ,k qui est la

moyenne sur ceux-ci5. Cela est plus visible si on explicite les µn ,mutilisés dans

(9.1), soit µ0 ,k

=

1 N

k Nk−1

i=0 xi (9.4) et µk,0

=

N1

k N−1

i=k xi

=

N1

k Nk−1

i=0 xi+k. (9.5)

Cette approche permet d’éviter la seconde des curieuses propriétés décrites dans [101] pour l’estimation de l’autocovariance d’un processus statistique dont la moyenne est inconnue — propriété apparente lorsque µ0 ,k

<

µ0 ,0

<

µk,0. En particulier, il serait alors possible que l’autocovariance estimée pour une fonction croissante monotone soit négative, contrairement à ce qui est attendu sachant que akcorrespond, à une normalisation près, au coefficient de corrélation linéaire

r de Pearson6 entre xi et xi

+k [102]. Notons aussi que la somme de (9.1) est tronquée pour éviter les effets de bords discutés ci-haut.

Cependant, la motivation principale pour l’utilisation de cette définition de l’autocovariance est la possibilité de la réexprimer de manière élégante sous une forme similaire à la variance⟨⟨X2⟩⟩

=

⟨X2

⟨X⟩2, soit

ak

=

Nk−1

i=0 xixi+k N

k

µ0 ,k µk,0. (9.6)

Ce résultat se décompose alors très bien en termes appropriés au traitement numérique, c’est-à-dire ak

=

Nr

k k

(M

βk N

k ) · ( M

γk N

k ) , (9.7)

5. De même pour xi+k, balayant les valeurs d’index k à N1, et de moyenne µk,0.

avec rk

=

Nk−1

i=0 xixi+k et M

=

N1

i=0 xi, (9.8) ainsi qu’avec βk

=

N−1

i=Nk xi et γk

=

k−1

i=0 xi. (9.9)

Ici, rk et M sont essentiellement des versions non-normalisées de l’autocorréla- tion et de la moyenne, alors que βk et γk sont des corrections de bords. Notons que cette formulation motive aussi le choix de N

kpour la normalisation, bien

que l’utilisation de N soit souvent préconisée par les statisticiens [103, §6.2]. Cette formulation est avantageuse pour le calcul numérique à plusieurs égards. Premièrement, puisque les xi sont représentés en mémoire par des entiers, les quantités définies en (9.8) et (9.9) seront toujours elles-mêmes en- tières, ce qui permet d’accumuler les sommes sans craindre d’engendrer des erreurs d’arrondi numérique [104 ;105, §4]. De plus, ces quantités sont aussi très facilement parallélisables, les sommes pouvant être scindées en plusieurs sous-sommes calculées parallèlement pour être recombinées à la fin du calcul. En plus, il est possible de calculer ces valeurs en traversant une seule fois les données de manière linéaire, et ce même pour plusieurs valeurs de k à la fois. Minimiser de la sorte la dispersion des accès à la mémoire est une bonne pra- tique pour optimiser la performance de calcul. De plus, il est possible d’accélérer grandement le calcul des rk en tirant profit du théorème de Wiener–Khintchine, qui stipule que l’autocorrélation est la transformée de Fourier inverse de la densité spectrale de puissance — voir la section7.2.3pour plus de détails — pour réexprimer

rk

=

F−1[RRRRRF[xi]jRRRRR2]k , (9.10) avec F et F−1 les versions discrètes de la transformée de Fourier

F

et de sont

appelées transformées de Fourier rapides7[106108]. Notons que la transformée

de Fourier rapide, contrairement à sa version continue, donne naturellement lieu à des convolutions circulaires plutôt qu’à celles linéaires désirées ici. Pour obtenir des convolutions linéaires, et donc le bon résultat, il faut doubler la taille des données en leur ajoutant des valeurs nulles8 avant de les utiliser dans (9.10)

[109, §8.7.2]. Concrètement, il suffit de redéfinir xi tel que 0

i

M

1 avec

xiN

=

0 et M

2N lors de l’implémentation de l’algorithme.

Bien que cette formulation soit adaptée au calcul numérique, une attention particulière doit être portée aux divisions de (9.7) ainsi qu’à la soustraction entre ses deux termes principaux ; des opérations qui doivent être effectuées par arithmétique en virgule flottante. En effet, rk, M et N ont tous le potentiel d’être

énormes, et les opérations à virgule flottante impliquant des nombres d’ordres

de grandeur très différents — ou de très grands nombres tout court — ont le potentiel de causer une perte de précision importante [105, §2 et §4]. Lors de l’accumulation des rk et de M, il faut aussi tenir en compte la possibilité d’un dépassement d’entier.

Les deux sous-sections qui suivent présentent l’interface du code et les détails plus techniques liés à l’optimisation de la performance et de la précision du calcul de (9.7).