Durata dell'impulso rettangolare sconosciuto con rumore gaussiano bianco additivo


8

Problema.

C'è un segnale discreto f[i](esempio sotto).
Esempio di segnale
È noto che ha una forma di impulso rettangolare con rumore gaussiano bianco additivo.f[i]

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

Dove è una funzione step di Heaviside, è un rumore gaussiano bianco additivo, è un'altezza di impulso rettangolare, è un indice del primo campione di impulso rettangolare, è un indice dell'ultimo campione di impulso rettangolare, è il livello costante del segnale, è un parametro regolabile.
θ[i]
n[i]
α
i1
i2
c
N

Tutti i parametri possono avere un ampio intervallo di valori.
È necessario trovare il valore di(i2i1) (durata dell'impulso rettangolare nei campioni).

Possibili soluzioni.

Al momento, ho provato due modi per risolvere questo problema.

Filtro passa basso con soglia.

Come primo tentativo, ho usato uno schema semplice con filtro passa basso e soglia.
1. Applicare il filtro passa basso FIR con frequenza di taglio pari a . 2. Stimare la media dispersione del rumore filtrato dai primi campioni del segnale. 3. Impostare la soglia . 4. Stima . 5. Stima .0.05fsampling
mσ2N
t=m+3σ
i1=mini(f[i]>t)
i2=maxi(f[i]>t)

inserisci qui la descrizione dell'immagine

Pro:
1. Questo algoritmo è semplice.
2. È facile scrivere un'implementazione veloce.

Contro:
1. È difficile stimare il valore efficiente della frequenza di taglio del filtro. Da un lato un valore basso può corrompere la forma di impulsi brevi. D'altro canto, un valore elevato riduce l'effetto della filtrazione.
2. L'algoritmo non utilizza tutte le informazioni che abbiamo sul segnale.

Analisi di regressione

Come secondo tentativo, ho provato ad approssimare la sequenza di input dei campioni con la funzione .s[i]

s[i]=α(θ[ii1]θ[ii2])+c , , dove è un piccolo parametro.
θ[i]=11+eiββ

Per approssimazione ho usato il metodo dei minimi quadrati con discesa gradiente per minimizzare la funzione di costo.
1. Impostare i valori iniziali per , , , . 2. Eseguire la discesa gradiente. 3. Impostare la soglia . 4. Stima . 5. Stima .αci1i2

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

inserisci qui la descrizione dell'immagine

Pro:
1. Questo algoritmo fornisce risultati con buona precisione.
2. Funziona per una vasta gamma di durate.

Contro:
1. È molto lento.

Domanda.

Dopotutto, non sono soddisfatto della precisione del primo algoritmo e della velocità del secondo. Come risolveresti questo problema?
C'è qualche soluzione classica che non sono riuscito a trovare?
Idee, collegamenti, qualsiasi feedback saranno molto apprezzati.
Grazie.


Devi anche conoscere la probabilità che solo il rumore gaussiano casuale causi al tuo algoritmo di produrre una "durata" dell'impulso, in particolare vicino alla larghezza minima dell'impulso e all'altezza minima consentita? O l'impulso a priori è noto per essere presente e all'interno dei parametri consentiti?
hotpaw2,

@ hotpaw2 L'impulso è a priori noto per essere presente e all'interno dei parametri consentiti. Se il segnale non contiene l'impulso, il comportamento dell'algoritmo potrebbe non essere definito.
Nikolai Popov il

Risposte:


5

Volete un metodo che rimuova il rumore preservando i bordi. Questo non può essere ottenuto bene con un filtro lineare, come hai notato te stesso. Conosco due approcci che potrebbero funzionare bene per il tuo problema. Il primo è il filtro mediano , in cui i campioni all'interno di una finestra sono sostituiti dalla loro mediana. Il diagramma seguente mostra il risultato del filtro mediano con una lunghezza della finestra di 25 campioni (in rosso):

inserisci qui la descrizione dell'immagine

L'altro approccio più complesso è il Denoising a variazione totale , che funziona molto bene per segnali costanti a tratti. È disponibile un'ottima descrizione del denoising delle variazioni totali, incluso il codice Matlab: link .


È stato molto utile E mi sono divertito a leggere l'articolo e giocare con il denoising della TV. Grazie.
Nikolai Popov,

1

So che è molto vecchio e @Matt L. da tempo ha dato una risposta eccellente e istruttiva. Non avevo idea che esistesse il denoising della variazione totale, quindi ho imparato qualcosa di molto utile. Di conseguenza, ho votato sia la domanda che la risposta e voglio restituire un po 'qualcosa, come è, al sito. L'idea di base è quella di utilizzare una semplice versione digitale del vecchio LPF RC e ridurre notevolmente la "costante di tempo" quando si verifica un passaggio. Quindi, dopo il passaggio, aumenta notevolmente la "costante di tempo". NB La "costante di tempo" non sarà realmente costante, come si vedrà di seguito.

La figura seguente mostra il mio tentativo di replicare l'esempio di impulsi rettangolari rumorosi generici dell'OP e il modo in cui un filtro passa basso "derivata reciproca" (di seguito indicato RD-LPF) esegue:

Derivato reciproco LPF

RD-LPF è semplicemente , dove e Ho usato . L'impulso rettangolare pulito aveva ampiezza unitaria, iniziata con t = 3 e la larghezza dell'impulso era 3. Il rumore gaussiano bianco additivo aveva e .y[i]=Ay[i1]+(1A)x[i]A=exp(K|y[i1]x[i]|)K=0.2μ=0σ=0.3

La figura seguente confronta l'uscita RD-LPF (traccia rossa) con (secondo la risposta di Matt L.) un'uscita del filtro mediano mobile di 25 punti (traccia blu):

RD-LPF vs. Mov Med 25 pt

Non sto dicendo che avrei mai usato l'RD-LPF per qualcosa di grave, ma ero curioso di vedere se sarebbe stato distrutto in questo piccolo confronto. Evidentemente, non è così.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.