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?
matlab
image-processing
Comunidade
fonte
fonte
Respostas:
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: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
Exemplos de alguns kernels:
fonte
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
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).
fonte
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/
fonte
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).
fonte