Une question d'enveloppe ...

... mais pas de timbre.

Le problème exposé dans ce sujet a été résolu.

Hey !

Y aurait-il un déjà quelques Zesteurs ninjas du traitement de signal ? Car j'ai une question pour vous. Mon signal ressemble grosso modo à ce qui est représenté sur le schéma ci-dessous.

Signal à traiter

Je cherche à en récupérer l'enveloppe (que j'ai dessinée en bleu). Auriez-vous quelques suggestions à me faire ?

Quelques précisions :

  • L'espèce de bruit qui gigote dans tous les sens n'est pas mono-fréquentiel.
  • L'amplitude pic-à-pic n'est pas constante.

~2ohm

+1 -0

Salut,

un petit coup de transformée de Hilbert, peut être ? Si le résultat ne te convient pas, pourquoi ? Il faudrait surtout que tu nous donnes une définition plus précise de ce que tu entends par "enveloppe". Ton enveloppe ne passe pas par tous les points "max" et semble surtout se coller aux grandes longueurs d'ondes, mais à part ça, on n'en sait pas plus…

Le sens physique de ton signal ainsi que de son enveloppe pourrait potentiellement servir, aussi.

+0 -0

Hello tous, merci pour vos réponses !

@AAbu : j'ai déjà regardé dans cette direction. faire un détecteur de crête analogique à coup de composants électroniques, j'arrive à peu près à faire, mais je dois ici jouer avec un signal déjà numérisé. Par contre je n'avais pas vu la partie pour les signaux numériques. :D Je tenterais surement l'algorithme proposé. En fait je pensais trouver une méthode plus mathématiques comme …

@dri1 … la transformée de Hilbert ! Qui malheureusement ne marche pas du tout ici. (J'ai essayé et puis bof …)

Si je cherche l'enveloppe, c'est pour pouvoir localiser plus précisément les sommets des massifs. (La partie oscillante qui ne tient pas en place m'embête bien dans cette quête.) Physiquement, ce signal est déjà une enveloppe ! Oui, oui, c'est l'enveloppe d'un paquet de AScans stackés les uns sur les autres. (AScan = signal échographique reçu dans une direction après émission d'une impulsion.) Mais cette enveloppe est toute irrégulière. Je cherche donc à faire de l'enveloppe-ception et à trouver l'enveloppe de l'enveloppe !

@Eskimon :D

~2ohm

+1 -0

Si je cherche l'enveloppe, c'est pour pouvoir localiser plus précisément les sommets des massifs.

Du coup, as tu vraiment besoin d'une "enveloppe" ? Je serais tenté de dire que tu as autant de faire une transformée de Fourier (ou harmonique sphérique si tu bosses sur une sphère) et de tronquer à un seuil voulu pour ne garder que les grandes longueurs d'ondes.

J'ai aussi tenté cette approche (de façon bourrine certe).

Tuer les hautes fréquences du spectre revient à multiplier la TF par une fonction porte d'une largeur liée à la fréquence de coupure. En temporel, cela revient à convoluer le signal par un sinus cardinal de largeur liée à l'inverse de la fréquence de coupure. J'ai essayé, il reste encore de nombreuses oscillations parasites.

Je continue de chercher.

PS. Je vais être loin du clavier ce we, mais je lirai vos réponses avec attention dès mon retour !

+0 -0

Tuer les hautes fréquences du spectre revient à multiplier la TF par une fonction porte d'une largeur liée à la fréquence de coupure. En temporel, cela revient à convoluer le signal par un sinus cardinal de largeur liée à l'inverse de la fréquence de coupure. J'ai essayé, il reste encore de nombreuses oscillations parasites.

Si tu fais simplement une FFT, que tu tronques, puis que tu reviens en temporel (enfin, en spatial dans ton cas, non ?), tu ne peux pas avoir d'oscillations de longueurs d'ondes plus petites que ton seuil. Le problème est peut être dans ce cas tout bêtement la définition du seuil.

Et il est où le problème du calcul d'une enveloppe convexe si tu as les valeurs numériques ?

Elle est pas tellement convexe, son enveloppe. On ne sait d'ailleurs toujours pas selon quel critère il passe par certaines crêtes et pas par d'autres, ni même si c'est important ou une simple erreur de tracé.

En parlant de ça, tu nous as dis que Hilbert et le filtrage n'allaient pas, mais pourquoi ? Quels sont les oscillations parasites que tu observes et que tu voudrais voir dégager ? Avoir une idée précise de ce que tu souhaites obtenir devrait nous aider à t'aider, je pense.

Ensuite, faut savoir que la méthode numérique proposée par Wikipédia, c'est l'équivalent d'un filtre passe-bas en temporel/spatial. Du coup, faire une FFT pour passer en fréquentiel et tronquer puis revenir ça ne va pas apporter grand chose a priori.

Le calcul doit être fait en ligne ou hors ligne ?

Sinon je propose détection des maximaux (minimas) locaux par une evulation des différence successives + interpolation (linéaire/cubique/polynomiale) entre les points obtenus

Ca revient p-e un calcul d'enveloppe convexe, j'en sais rien.

+0 -0

Elle est pas tellement convexe, son enveloppe. On ne sait d'ailleurs toujours pas selon quel critère il passe par certaines crêtes et pas par d'autres, ni même si c'est important ou une simple erreur de tracé.

@dri1

Le schéma de mon premier post est un schéma de principe. Mon objectif est vraiment de pouvoir localiser le sommet des massifs.

Pour cela, l'enveloppe du signal est récupérée pour trouver plus facilement les sommets. La seule contrainte que dois respecter l'enveloppe, c'est qu'elle me permette de trouver les sommets ! Autrement-dit, qu'elle passe ou pas par toutes les crêtes, cela n'a pas d'importance tant qu'on puisse positionner les sommets. (Oups, pardon pour la répétition.) Est ce que cela vous permet de mieux comprendre ce que je recherche ?

En parlant de ça, tu nous as dis que Hilbert et le filtrage n'allaient pas, mais pourquoi ? Quels sont les oscillations parasites que tu observes et que tu voudrais voir dégager ?

@dri1

D'après ce que j'ai découvert sur Hilbert, j'ai l’impression que cette méthode est particulièrement efficace sur les signaux modulés en amplitudes, non ? Le signal que je dois manipuler ne ressemble en rien à une porteuse modulée en amplitude : l'oscillation n'est pas régulière et ne se fait pas autour d'une valeur moyenne constante ; Hilbert y fonctionne très mal. Pour les machins parasites qui restent, j'essaye de faire une image demain.

@Aabu : c'est vrai !

@David : c'est un calcul fait hors-ligne. J'avais aussi pensé à ta solution. Avec du traitement de signal, il doit sûrement exister une stratégie plus directe que cette méthode un peu DIY :P Je la garde en plan Z.

+0 -0

… qu'est ce que tu appelles un sommet ? Quel est le critère pour dire qu'une bosse est juste du bruit, mais qu'une autre bosse sera un sommet ?

@dri1

Disons que dans mes conditions expérimentales, les sommets se distinguent facilement du bruit : $\frac{A_\text{signal}}{A_\text{bruit}}>20$.

(cf. courbes que j'ajouterai dès que possible)

+0 -0

Re,

Voici ce à quoi ressemble mon signal (en bleu) filtré à différentes fréquences de coupure. ($f$ est la fréquence moyenne des oscillations, le filtrage consiste à couper tout ce qui est au-dessus de $f_c$.)

On remarque que cette méthode donne des enveloppes qui suivent à peu près ma courbe, sauf là où ça m'intéresse, aux sommets des massifs ^^

$f_c = f/2$

$f_c = f/5$

$f_c = f/10$

+0 -0

J'aurais tendance à chercher une modélisation mathématique du problème pour estimer la valeur du filtre. Je pense qu'un première modélisation, naïve probablement, est de considérer un profil de sommet commun, disons : $S\in\mathbb{R}^\mathbb{R}$. Ensuite pour chaque sommet on va lui associer une position, une amplitude et une largeur, respectivement : $\left(x_n\right)_{n\in\mathbb{N}},\left(U_n\right)_{n\in\mathbb{N}},\left(\sigma_n\right)_{n\in\mathbb{N}}\in\mathbb{R}^\mathbb{N}$. Un bruit de mesure $\epsilon$ que l'on veut filtrer. Je modélise alors le signal par
$U=\sum_{n\in\mathbb{N}}\delta_{x_n}\ast\left(x\in\mathbb{R}\mapsto U_n S\left(\frac{x}{\sigma_n}\right)\right)+\epsilon$

Je passe alors dans l'espace réciproque :
$\forall\nu\in\mathbb{R},\widetilde{U}\left(\nu\right)=\sum_{n\in\mathbb{N}}e^{-\imath 2\pi x_n\nu}U_n\sigma_n\widetilde{S}\left(\sigma_n\nu\right)+\widetilde{\epsilon}\left(\nu\right)$
A partir de là, j'aurais tendance à prendre un fréquence de coupure de $2max\left\{\frac{1}{\sigma_n},n\in\mathbb{N}\right\}$.

La question est donc, est-ce que tu peux estimer la largeur minimal des sommets que tu veux détecter ? Si tu peux, alors filtre à l'inverse de cette valeur, je pense que c'est plus cohérent que de filtrer à un sous multiple de la fréquence moyenne.

Pour aller plus loin on pourrait essayer de modéliser $\epsilon$.

+0 -0

Hello Freedom,

Modélisation naïve acceptée :)

Graphiquement, je pense qu'on peut dire que $\text{min}\left\lbrace\sigma_n, n \in \mathbb{N}\right\rbrace \approx 200 \;\text{ua}$. ($\text{ua}$ parce que l’abscisse est en unité arbitraire :P)

Ainsi, ton modèle me suggère de prendre $f_c = 2\cdot\text{max}\left\lbrace \frac{1}{\sigma_n}, n \in \mathbb{N}\right\rbrace \approx \frac{1}{100} \;\text{ua}^{-1}$.

Graphiquement, je peux te dire que $f \approx \frac{1}{10} \;\text{ua}^{-1}$.

Ainsi, ce que tu me suggères reviens à prendre $f_c = \frac{f}{10}$ ! C'est le 3e graphe de mon précédent post. (Ahaha, j'avais pris des valeurs presque pas trop au pifomètre quand même ! :-° ) Qu'en penses-tu ?

En soit, c'est vrai que l'enveloppe obtenue tend à ressembler à ce qu'il me faudrait pour positionner les sommets des massifs. Malheureusement, elle a comme un offset, mais il y a surtout un autre gros problème : le méchant trou au sommet du grand pic ! Je pense que c'est causé par les variations fortes de l'amplitude des oscillations. En coupant de plus en plus les hautes fréquences, on finit par obtenir une courbe qui suit la valeur moyenne du signal d'origine … Et cette valeur moyenne suit "le milieu" des oscillations.

Mais … c'est donc un passe-bande qu'il me faudrait !?

Disons, un passe-bande qui coupe les HF au-dessus d'une fréquence de coupure comme celle que tu as définie, et qui coupe les fréquences quasi-nulles ? En fait, je n'y crois pas trop car la fréquence caractéristique de variation de l'amplitude des oscillation apparaît très proche de la fréquence caractéristique de l'enveloppe …

Aparté @Aabu : du coup, j'ai l'impression que l'algorithme de détection de crêtes proposé par Wikipedia n'est pas strictement équivalent à un filtre passe-bas.

+0 -0

J'ai fini par trouver quelque chose qui me convient !

Le "filtrage" se fait en 2 étapes.

Étape 1 : on commence par utiliser l'algorithme de wikipedia qui simule un détecteur de crête. Il y a une astuce. Appliqué simplement, on remarque qu'il suit très bien l'enveloppe du signal lorsque celle-ci est croissante. Par contre, lorsqu'elle décroit, il relaxe trop lentement ; c'est simplement parce qu'il ne peut pas descendre plus vite que le taux que l'on a fixé à chaque itération. Il faut donc l'appliquer 2 fois, une fois dans le temps des $t$ croissants et une autre fois dans le sens des $t$ décroissants. Cela donne deux enveloppes $e_+$ et $e_-$ à combiner pour obtenir une première enveloppe grossière $e$.

Typiquement, $e(t) = \text{min}\left(e_+(t),\, e_-(t)\right)$.

Schéma de principe de l'étape 1

Étape 2 : on filtre $e$ avec un passe-bas pour atténuer les irrégularités dues aux relaxations. Prendre comme fréquence de coupure $f_c$ une fréquence inférieur à la fréquence des relaxations $f_r$.

Étape 3 : regarder fièrement son travail. Ça marche !

Voilà ce que ça donne sur mon signal avec différentes fréquences de coupure pour le filtre passe-bas. (bleu : signal, rouge : $e$, cyan : enveloppe finale, j'ai ajouté un offset pour mieux les distinguer)

$fc = f_r/2$

$fc = f_r/5$

$fc = f_r/10$

Cela dit, je suis surpris qu'il n'existe pas de méthode plus officielle. Même si ça marche bien, j'ai quand même l'impression de faire du bricolage :P

Merci à vous tous pour votre aide !

~2ohm

+2 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte