Eu sei que isso depende do sinal, mas quando enfrentar um novo sinal barulhento, qual é o seu truque para tentar diminuir um sinal enquanto mantém transições nítidas (por exemplo, qualquer tipo de média simples, ou seja, convolução com um gaussiano, está fora). Muitas vezes me vejo enfrentando essa pergunta e não sinto que sei o que devo tentar (além de splines, mas eles podem derrubar seriamente o tipo certo de transição acentuada também).
PS Como uma observação, se você conhece alguns métodos bons para usar wavelets, deixe-me saber o que é. Parece que eles têm muito potencial nessa área, mas, embora existam alguns trabalhos nos anos 90 com citações suficientes para sugerir que o método do trabalho tenha sido bem-sucedido, não consigo encontrar nada sobre quais métodos acabaram vencendo como candidatos de topo em os anos seguintes. Certamente, alguns métodos acabaram sendo geralmente "as primeiras coisas a tentar" desde então.
Você pode considerar a difusão anisotrópica. Existem muitos métodos baseados nessa técnica. De um modo geral, é para imagens. É um método de denoising adaptável que visa suavizar partes que não são da borda da imagem e preservar as bordas.
Além disso, para minimizar a variação total, você pode usar este tutorial . Os autores também fornecem o código MATLAB. Eles reconhecem o problema como um problema anterior da análise; é de alguma forma semelhante ao uso de um mapeamento linear (como representações de tempo e frequência). Mas, eles usam uma matriz de diferença em vez de uma transformação.
fonte
Chaohuang tem uma boa resposta, mas também acrescentarei que outro método que você pode usar seria através da Transformada de Wavelet de Haar, seguida de encolhimento coeficiente de wavelet e uma Transformação de Haar inversa de volta ao domínio do tempo.
A transformação wavelet de Haar decompõe seu sinal em coeficientes de funções quadradas e diferenciais, embora em escalas diferentes. A idéia aqui é que você 'force' a nova representação de sinal quadrado para melhor corresponder ao seu sinal original e, portanto, uma que melhor represente onde estão suas bordas.
Quando você executa uma contração coeficiente, tudo o que significa é que você está definindo coeficientes específicos da função transformada de Haar para zero. (Existem outros métodos mais envolvidos, mas esse é o mais simples). Os coeficientes de wavelets transformados em Haar são pontuações associadas a diferentes funções quadradas / diferenças em diferentes escalas. O RHS do sinal transformado de Haar representa bases quadradas / diferenciais na escala mais baixa e, portanto, pode ser interpretado na 'frequência mais alta'. A maior parte da energia do ruído ficará aqui, VS a maior parte da energia do sinal que estaria no LHS. É essas coeficientes de bases que são anuladas e o resultado então inverso transformado de volta ao domínio do tempo.
Em anexo está um exemplo de um senoide corrompido por um ruído AWGN pesado. O objetivo é descobrir onde estão os 'início' e 'parada' do pulso. A filtragem tradicional manchará as bordas de alta frequência (e altamente localizadas no tempo), pois, no fundo, a filtragem é uma técnica L-2. Por outro lado, o seguinte processo iterativo denoise e preserva as arestas:
(Eu pensei que alguém poderia anexar filmes aqui, mas parece que não consigo. Você pode baixar o filme que eu fiz do processo aqui ). (Clique com o botão direito e 'salvar link como').
Eu escrevi o processo 'à mão' no MATLAB, e é assim:
Você pode ver claramente como os coeficientes estão sendo reduzidos e a Transformação Inversa Haar resultante dela.
Uma desvantagem desse método, no entanto, é que as arestas precisam estar dentro ou ao redor das bases quadradas / diferenciais em uma determinada escala. Caso contrário, a transformação é forçada a pular para o próximo nível superior e, portanto, perde-se um posicionamento exato para a aresta. Existem métodos de resolução múltipla usados para combater isso, mas eles estão mais envolvidos.
fonte
Um método simples que geralmente funciona é aplicar um filtro mediano.
fonte