Duração do pulso retangular desconhecido com ruído gaussiano branco aditivo

8

Problema.

Há um sinal discretof[i] (exemplo abaixo).
Exemplo de sinal
Sabe-se que tem uma forma de pulso retangular com ruído gaussiano branco aditivo.f[i]

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

Onde é uma função passo Heaviside, é um ruído gaussiano branco aditivo, é uma altura de pulso retangular, é um índice da primeira amostra de pulso retangular, é um índice da última amostra de pulso retangular, é um nível constante de sinal, é um parâmetro ajustável.
θ[i]
n[i]
α
i1
i2
c
N

Todos os parâmetros podem ter uma grande variedade de valores.
É necessário encontrar o valor de(i2i1) (duração do pulso retangular nas amostras).

Soluções possíveis.

No momento, tentei duas maneiras de resolver esse problema.

Filtro passa-baixo com limite.

Como primeira tentativa, usei um esquema simples com filtro e limite de passa-baixo.
1. Aplique o filtro passa-baixo FIR com frequência de corte igual a . 2. Estime a média e a dispersão do ruído filtrado das primeiras amostras do sinal. 3. Defina o limite . 4. Estime . 5. Calcule .0.05fsampling
mσ2N
t=m+3σ
i1=mini(f[i]>t)
i2=maxi(f[i]>t)

insira a descrição da imagem aqui

Prós:
1. Este algoritmo é simples.
2. É fácil escrever uma implementação rápida.

Contras:
1. É difícil estimar o valor eficiente da frequência de corte do filtro. Por um lado, o valor baixo pode corromper a forma de pulsos curtos. Por outro lado, grande valor diminui o efeito da filtração.
2. O algoritmo não está usando todas as informações, temos sobre o sinal.

Análise de regressão

Como segunda tentativa, tentei aproximar a sequência de entrada de amostras com a função .s[i]

s[i]=α(θ[ii1]θ[ii2])+c , , em que é um pequeno parâmetro.
θ[i]=11+eiββ

Para aproximação, usei o método dos mínimos quadrados com descida gradiente para minimizar a função de custo.
1. Defina os valores iniciais para , , , . 2. Realize a descida do gradiente. 3. Defina o limite . 4. Estime . 5. Calcule .αci1i2

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

insira a descrição da imagem aqui

Prós:
1. Este algoritmo fornece resultados com boa precisão.
2. Funciona para uma ampla gama de durações.

Contras:
1. É muito lento.

Questão.

Afinal, não estou satisfeito com a precisão do primeiro algoritmo e com a velocidade do segundo. Como resolveria este problema?
Existe alguma solução clássica que não consegui encontrar?
Idéias, links, qualquer feedback será muito apreciado.
Obrigado.

Nikolai Popov
fonte
Você também precisa saber a probabilidade de que apenas o ruído gaussiano aleatório faça com que seu algoritmo produza uma "duração" de pulso, especialmente perto da largura mínima do pulso e da altura mínima permitida? Ou o pulso a priori é conhecido por estar presente e dentro dos parâmetros permitidos?
precisa saber é o seguinte
@ hotpaw2 O pulso é a priori conhecido por estar presente e dentro dos parâmetros permitidos. Se o sinal não contiver o pulso, o comportamento do algoritmo pode ser indefinido.
Nikolai Popov

Respostas:

5

Você deseja um método que remova o ruído enquanto preserva as bordas. Isso não pode ser alcançado bem com a filtragem linear, como você percebeu. Conheço duas abordagens que podem funcionar bem para o seu problema. O primeiro é a filtragem mediana , onde as amostras dentro de uma janela são substituídas pela mediana. O gráfico a seguir mostra o resultado da filtragem mediana com um comprimento de janela de 25 amostras (em vermelho):

insira a descrição da imagem aqui

A outra abordagem, mais complexa, é o denoising de variação total , que funciona muito bem para sinais constantes por partes. Há uma descrição muito boa do denoising de variação total, incluindo o código Matlab disponível: link .

Matt L.
fonte
Foi muito útil. E eu me diverti lendo o artigo e brincando com o denoising da TV. Obrigado.
Nikolai Popov
1

Eu sei que isso é muito antigo , e @Matt L. já deu uma resposta excelente e informativa. Eu não tinha ideia de que existia a variação total da variação, então aprendi algo bastante útil. Consequentemente, votei tanto na pergunta quanto na resposta e quero dar uma coisinha, como é, de volta ao site. A idéia básica é usar uma versão digital simples do antigo RC LPF e reduzir bastante a 'constante de tempo' quando ocorrer uma etapa. Depois, após a etapa, aumente bastante a 'constante de tempo'. NB A 'constante de tempo' não será realmente constante, como será visto abaixo.

A figura abaixo mostra minha tentativa de replicar o exemplo de pulso retangular barulhento genérico do OP e como um filtro passa-baixo 'derivado recíproco' (doravante denominado RD-LPF) executa:

LPF derivado recíproco

O RD-LPF é simplesmente , onde e Eu usei . O pulso retangular limpo tinha amplitude unitária, iniciada em t = 3 e largura do pulso era 3. O ruído gaussiano aditivo branco tinha e .y[i]=Ay[i1]+(1A)x[i]A=exp(K|y[i1]x[i]|)K=0.2μ=0σ=0.3

A figura a seguir compara a saída RD-LPF (rastreio vermelho) com (como na resposta de Matt L.) uma saída do filtro mediano em movimento de 25 pontos (rastreio azul):

RD-LPF vs. Mov Med 25 pt

Não estou dizendo que jamais usaria o RD-LPF para algo sério, mas fiquei curioso para ver se ele seria destruído nessa pequena comparação. Evidentemente, esse não é o caso.

Ed V
fonte