o que é suavizar em termos muito básicos

17

O que é suavização e como posso fazer isso?

Eu tenho uma matriz no Matlab que é o espectro de magnitude de um sinal de fala (a magnitude de 128 pontos da FFT). Como suavizo isso usando uma média móvel? Pelo que entendi, devo pegar o tamanho da janela de um certo número de elementos, ter média, e esse se torna o novo primeiro elemento. Em seguida, desloque a janela para a direita com um elemento, calcule a média que se torna o segundo elemento e assim por diante. É assim mesmo que funciona? Não tenho certeza de que, se fizer isso, no meu resultado final terei menos de 128 elementos. Então, como isso funciona e como ajuda a suavizar os pontos de dados? Ou existe outra maneira de suavizar os dados?

EDIT: link para a pergunta de acompanhamento

Comunidade
fonte
para um espectro você provavelmente vai querer juntos média (na dimensão do tempo) espectros múltiplos em vez de um em execução média ao longo do eixo de frequência de um único espectro
endolith
O @endolith é uma técnica válida. A média no domínio da frequência (às vezes chamado de Danielle Periodogram) é o mesmo que a janelagem no domínio do tempo. A média de vários periodogramas ("espectros") é uma tentativa de imitar a média do conjunto necessária para o Periodograma verdadeiro (isso é chamado de Periodograma de Welch). Além disso, como uma questão de semântica, eu argumentaria que "suavização" é uma filtragem passa-baixa não causal. Consulte Filtragem Kalman x suavização Kalman, filtragem Wiener x suavização Wiener, etc. Há uma distinção não trivial e depende da implementação.
12113 Bryan

Respostas:

23

A suavização pode ser feita de várias maneiras, mas em termos muito básicos e gerais, significa que você uniformiza um sinal, misturando seus elementos com os vizinhos. Você mancha / desfoca um pouco o sinal para se livrar do ruído. Por exemplo, uma técnica de suavização muito simples seria recalcular cada elemento de sinal f(t)para 0,8 do valor original, mais 0,1 de cada um de seus vizinhos:

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

Observe como os fatores de multiplicação, ou pesos, somam um. Portanto, se o sinal é bastante constante, a suavização não muda muito. Mas se o sinal contiver uma mudança brusca repentina, a contribuição de seus vizinhos ajudará a esclarecer um pouco esse ruído.

Os pesos usados ​​nesta função de recálculo podem ser chamados de kernel . Uma função gaussiana unidimensional ou qualquer outro kernel básico deve funcionar no seu caso.

Bom exemplo de um tipo específico de suavização:

Acima: sinal não suavizado
Abaixo: sinal suavizado

insira a descrição da imagem aqui

Exemplos de alguns kernels:

insira a descrição da imagem aqui

Junuxx
fonte
então essa é uma média móvel ponderada? Isso é chamado com um tamanho de janela igual a 3? E o primeiro e o último elemento? E como isso seria modificado se eu tivesse uma matriz de 128 elementos e desejasse usar uma janela de 16 ou 32 elementos?
@ user13267: Sim, você poderia dizer que um kernel de suavização é uma média móvel ponderada. Se você usa um kernel uniforme (veja a segunda imagem), é apenas uma média móvel simples. Você está certo sobre o tamanho da janela. Para lidar com as arestas, há três abordagens básicas: 1) zere seus dados, 2) repita o último valor, 3) espelhe o sinal. Em todos os casos, você cria alguns dados simulados para que seu kernel não caia no nada.
Junuxx
o preenchimento zero não conta como cair no nada? No final do processo de média móvel, meu novo conjunto de dados "em média" deve ter o mesmo número de dados que o original, não? se zerá-lo no início ou no final ou repetir os últimos dados, isso não influencia o valor médio nas bordas da matriz? E como o espelhamento do sinal ajudaria em termos de número de termos de dados? Existe algum tutorial simples para isso em qualquer lugar que mostre como o processo ocorre para, digamos, 32 pontos de dados e um tamanho de janela de 4 ou 5?
2
Se você deseja que seu conjunto de dados suavizado tenha o mesmo comprimento que o conjunto de dados original, é necessário "compensar" os dados nos pontos de extremidade. Qualquer escolha que você faça sobre como criar esses dados influencia a média de alguma maneira. Tratar os dados fora dos limites como um espelho do conjunto de dados real (ou seja, supondo que a amostra N + 1 seja a mesma que N-1, N + 2 = N-2, etc.) manterá as características do espectro de frequência do partes finais do sinal, ao passo que assumir uma repetição zero ou não zero fará com que pareça que todas as frequências estão rolando nas extremidades.
Russell Borogove 15/10/12
8

Além da boa resposta da Junuxx, gostaria de deixar algumas notas.

  • A suavização está relacionada à filtragem (infelizmente, um artigo vago da Wikipedia ) - você deve escolher o mais suave com base nas propriedades.

  • Um dos meus favoritos é o filtro mediano . Este é um exemplo de um filtro não linear. Possui algumas propriedades interessantes, preserva "bordas" e é bastante robusta sob grandes ruídos.

  • Se você tem um modelo, como seu sinal se comporta como um filtro Kalman vale a pena dar uma olhada. Sua suavização é na verdade uma estimativa de máxima verossimilhança bayesiana do sinal com base em observações.


fonte
4

A suavização implica o uso de informações de amostras vizinhas para alterar o relacionamento entre amostras vizinhas. Para vetores finitos, nas extremidades, não há informações vizinhas de um lado. Suas opções são: não suavizar / filtrar as extremidades, aceitar um vetor suavizado resultante mais curto, criar dados e suavizar com isso (depende da precisão / utilidade de quaisquer previsões fora das extremidades) ou talvez usar diferentes núcleos de suavização assimétricos em as extremidades (que acabam diminuindo o conteúdo da informação no sinal).

hotpaw2
fonte
3

Você pode encontrar o código completo do matlab para suavizar o filtro de média móvel para diferentes comprimentos de torneiras. www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/

humor
fonte
1

Outros mencionaram como você faz a suavização. Gostaria de mencionar por que a suavização funciona.

Se você amostrar adequadamente seu sinal, ele variará relativamente pouco de uma amostra para a próxima (amostra = pontos no tempo, pixels etc.), e espera-se que ela tenha uma aparência geral suave. Em outras palavras, seu sinal contém poucas frequências altas, ou seja, componentes de sinal que variam a uma taxa semelhante à sua taxa de amostragem.

No entanto, as medidas geralmente são corrompidas pelo ruído. Em uma primeira aproximação, geralmente consideramos que o ruído segue uma distribuição gaussiana com zero médio e um certo desvio padrão que é simplesmente adicionado no topo do sinal.

Para reduzir o ruído em nosso sinal, geralmente fazemos as seguintes quatro suposições: o ruído é aleatório, não está correlacionado entre as amostras, tem uma média de zero e o sinal é suficientemente super amostrado. Com essas premissas, podemos usar um filtro de média móvel.

Considere, por exemplo, três amostras consecutivas. Como o sinal é altamente superamostrado, o sinal subjacente pode ser considerado alterado linearmente, o que significa que a média do sinal nas três amostras seria igual ao sinal verdadeiro na amostra do meio. Por outro lado, o ruído tem média zero e não está correlacionado, o que significa que sua média deve tender a zero. Assim, podemos aplicar um filtro de média móvel de três amostras, onde substituímos cada amostra pela média entre ela e seus dois vizinhos adjacentes.

Obviamente, quanto maior a janela, mais o ruído será medido em zero, mas menor será a nossa suposição de linearidade do sinal verdadeiro. Portanto, temos que fazer uma troca. Uma maneira de tentar obter o melhor dos dois mundos é usar uma média ponderada, onde damos amostras mais distantes, pesos menores, para que calculemos a média dos efeitos de ruído de faixas maiores, sem pesarmos muito o sinal verdadeiro, onde ele se desvia da linearidade. suposição.

Como você deve colocar os pesos depende do ruído, do sinal e da eficiência computacional e, é claro, da troca entre livrar-se do ruído e interromper o sinal.

Observe que houve muito trabalho nos últimos anos para nos permitir relaxar algumas das quatro suposições, por exemplo, projetando esquemas de suavização com janelas de filtro variáveis ​​(difusão anisotrópica) ou esquemas que realmente não usam janelas (meios não locais).

Jonas
fonte