Durée d'impulsion rectangulaire inconnue avec bruit gaussien blanc additif

8

Problème.

Il existe un signal discretf[i] (exemple ci-dessous).
Exemple de signal
On sait que f[i] a une forme d'impulsion rectangulaire avec un bruit gaussien blanc additif.

f[i]=s[i]+n[i] ,
s[i]=α(θ[ii1]θ[ii2])+c ,
i2>i1 ,
i1>N

Où est une fonction de pas de Heaviside, est un bruit gaussien blanc additif, est une hauteur d'impulsion rectangulaire, est un indice du premier échantillon d'impulsion rectangulaire, est un indice du dernier échantillon d'impulsion rectangulaire, est un niveau de signal constant, est un paramètre réglable.
θ[i]
n[i]
α
i1
i2
c
N

Tous les paramètres peuvent avoir une large plage de valeurs.
Il est nécessaire de trouver la valeur de(i2i1) (durée de l'impulsion rectangulaire dans les échantillons).

Solutions possibles.

Pour le moment, j'ai essayé deux façons de résoudre ce problème.

Filtre passe-bas avec seuil.

Comme première tentative, j'ai utilisé un schéma simple avec filtre passe-bas et seuil.
1. Appliquer un filtre passe-bas FIR avec une fréquence de coupure égale à . 2. Estimer la moyenne et la dispersion du bruit filtré des premiers échantillons du signal. 3. Fixez le seuil . 4. Estimez . 5. Estimez .0.05fsampling
mσ2N
t=m+3σ
i1=mini(f[i]>t)
i2=maxi(f[i]>t)

entrez la description de l'image ici

Avantages:
1. Cet algorithme est simple.
2. Il est facile d'écrire une implémentation rapide.

Inconvénients:
1. Il est difficile d'estimer la valeur efficace de la fréquence de coupure du filtre. D'une part, une valeur faible peut corrompre la forme d'impulsions courtes. D'un autre côté, une valeur élevée diminue l'effet de la filtration.
2. L'algorithme n'utilise pas toutes les informations que nous avons sur le signal.

Analyse de régression

Comme deuxième tentative, j'ai essayé d'approximer la séquence d'entrée d'échantillons avec la fonction .s[i]

s[i]=α(θ[ii1]θ[ii2])+c , , où est un petit paramètre.
θ[i]=11+eiββ

Pour l'approximation, j'ai utilisé la méthode des moindres carrés avec descente de gradient pour minimiser la fonction de coût.
1. Définissez les valeurs initiales pour , , , . 2. Effectuez une descente en pente. 3. Définissez le seuil . 4. Estimez . 5. Estimez .αci1i2

t=c+0.5α
i1=mini(f[i]>t)
i2=maxi(f[i]>t)

entrez la description de l'image ici

Avantages:
1. Cet algorithme donne des résultats avec une bonne précision.
2. Il fonctionne pour une large gamme de durées.

Inconvénients:
1. C'est très lent.

Question.

Après tout, je ne suis pas satisfait de la précision du premier algorithme et de la vitesse du second. comment résoudrais-tu ce problème?
Y a-t-il une solution classique que je n'ai pas trouvée?
Des idées, des liens, des commentaires seront très appréciés.
Je vous remercie.

Nikolai Popov
la source
Avez-vous également besoin de connaître la probabilité que seul le bruit gaussien aléatoire fasse que votre algorithme produise une "durée" d'impulsion, en particulier près de la largeur d'impulsion et de la hauteur min que vous autorisez? Ou l'impulsion est-elle connue a priori comme étant présente et dans les paramètres autorisés?
hotpaw2
@ hotpaw2 L'impulsion est a priori connue pour être présente et dans les paramètres autorisés. Si le signal ne contient pas l'impulsion, le comportement de l'algorithme peut être indéfini.
Nikolai Popov

Réponses:

5

Vous voulez une méthode qui supprime le bruit tout en préservant les bords. Cela ne peut pas être réalisé correctement par filtrage linéaire, comme vous l'avez remarqué vous-même. Je connais deux approches qui pourraient bien fonctionner pour votre problème. Le premier est le filtrage médian , où les échantillons à l'intérieur d'une fenêtre sont remplacés par leur médiane. Le graphique suivant montre le résultat du filtrage médian avec une fenêtre de 25 échantillons (en rouge):

entrez la description de l'image ici

L'autre approche, plus complexe, est le débruitage de variation totale , qui fonctionne très bien pour des signaux constants par morceaux. Il existe une très bonne description du débruitage de variation totale, y compris le code Matlab disponible: lien .

Matt L.
la source
Ce fut très utile. Et j'ai passé un bon moment à lire l'article et à jouer avec le débruitage de la télévision. Je vous remercie.
Nikolai Popov
1

Je sais que c'est très ancien , et @Matt L. a depuis longtemps donné une excellente et instructive réponse. Je ne savais pas que le débruitage de variation totale existait, alors j'ai appris quelque chose de très utile. En conséquence, j'ai voté à la fois la question et la réponse et je veux redonner un petit quelque chose, tel qu'il est, au site. L'idée de base est d'utiliser une version numérique simple de l'ancien RC LPF et de réduire considérablement la «constante de temps» lorsqu'une étape se produit. Ensuite, après l'étape, augmentez considérablement la «constante de temps». NB La «constante de temps» ne va pas vraiment être constante, comme on le verra plus loin.

La figure ci-dessous montre ma tentative de reproduire l'exemple générique d'impulsion rectangulaire bruyante de l'OP et comment fonctionne un filtre passe-bas de «dérive réciproque» (ci-après dénommé RD-LPF):

Dérivé réciproque LPF

Le RD-LPF est simplement , où et J'ai utilisé . L'impulsion rectangulaire propre avait une amplitude unitaire, commençait à t = 3 et la largeur d'impulsion était 3. Le bruit gaussien blanc additif avait et .y[i]=Ay[i1]+(1A)x[i]A=exp(K|y[i1]x[i]|)K=0.2μ=0σ=0.3

La figure suivante compare la sortie RD-LPF (trace rouge) avec (selon la réponse de Matt L.) la sortie d'un filtre médian mobile à 25 points (trace bleue):

RD-LPF contre Mov Med 25 pt

Je ne dis pas que j'utiliserais jamais le RD-LPF pour quelque chose de sérieux, mais j'étais curieux de voir s'il serait détruit dans cette petite comparaison. Ce n'est évidemment pas le cas.

Ed V
la source