Moving Average As Convolution
Estou procurando um pouco de orientação sobre como usar CONVN para calcular médias móveis em uma dimensão em uma matriz 3d. Estou ficando um pouco preso no lançamento da semente sob o capô e espero que alguém possa esclarecer o comportamento para mim. Uma publicação semelhante que ainda me confunde um pouco está aqui: eu tenho dados diários de fluxo de rio e clima para uma bacia hidrográfica em diferentes locais de origem. Assim, a matriz é tão clara, as 1 (as linhas) representam cada local dim 2 (as colunas) representam a data dim 3 (as páginas) representam o tipo de medida diferente (altura do rio, fluxo, precipitação, etc.) O objetivo É tentar usar CONVN para ter uma média móvel de 21 dias em cada site, para cada ponto de observação para cada variável. Como eu entendo, eu deveria poder usar um kernel como: Eu tentei jogar e crie outro kernel que também deveria funcionar (eu acho) e definir o ker2 como: Os resultados não coincidem e estou me perguntando se eu tenho o Dimensões incorretas aqui para o kernel. Qualquer orientação é muito apreciada. BTW, você tem um kernel simétrico e, portanto, o deslize não deve ter efeito na saída da convolução. O que você especificou é um kernel de média móvel padrão, e assim convolução deve funcionar na busca da média móvel como você espera. Mas eu estou um pouco confuso porque você disse que o acima não funciona ndash rayryeng 31 de maio 15 às 20:17 Isso é completamente para você :). A questão que você tem é válida (sem trocadilhos) que atrapalhe muitas pessoas. Se você quer ficar, eu posso escrever uma resposta que resume o que falamos. Se você deseja retrair, exclua sua resposta, isso não tem nenhum problema. Deixe-me saber o que você quer fazer ndash rayryeng 31 de maio 15 às 20:39 A julgar pelo contexto de sua pergunta, você possui uma matriz 3D e quer encontrar a média móvel de cada linha independentemente em todas as fatias 3D. O código acima deve funcionar (o primeiro caso). No entanto, a bandeira válida retorna uma matriz cujo tamanho é válido em termos dos limites da convolução. Dê uma olhada no primeiro ponto da publicação que você ligou para mais detalhes. Especificamente, as 21 primeiras entradas para cada linha estarão faltando devido à bandeira válida. É somente quando você chega à 22ª entrada de cada linha que o kernel de convolução se torna completamente contido dentro de uma linha da matriz e é a partir desse ponto onde você obtém resultados válidos (sem trocadilhos). Se você gostaria de ver essas entradas nos limites, então você precisará usar a mesma bandeira se quiser manter a mesma matriz de tamanho que a entrada ou o sinalizador completo (o que é padrão) que lhe dá o tamanho da saída a partir de As bordas exteriores mais extremas, mas tenha em mente que a média móvel será feita com um monte de zero e, portanto, as 21 primeiras entradas não seriam o que você espera de qualquer maneira. No entanto, se estou interpretando o que você está perguntando, a bandeira válida é o que deseja, mas tenha em mente que você terá 21 entradas faltando para acomodar os casos de borda. Em suma, seu código deve funcionar, mas tenha cuidado com a interpretação dos resultados. BTW, você tem um kernel simétrico e, portanto, o deslize não deve ter efeito na saída da convolução. O que você especificou é um kernel de média móvel padrão, e assim convolução deve funcionar na busca da média móvel como você esperava. Média em movimento como um filtro A média móvel é freqüentemente usada para suavizar os dados na presença de ruído. A média móvel simples nem sempre é reconhecida como o filtro de Resposta de Impulso Finito (FIR) que é, enquanto na verdade é um dos filtros mais comuns no processamento de sinal. Tratá-lo como um filtro, permitindo compará-lo com, por exemplo, filtros com janelas-sinc (veja os artigos sobre os filtros passa-baixa, passagem alta e banda passada e banda-rejeição para exemplos desses). A principal diferença com esses filtros é que a média móvel é adequada para sinais para os quais a informação útil está contida no domínio do tempo. Dos quais suavizar medições por meio da média é um excelente exemplo. Os filtros Windowed-sinc, por outro lado, são performantes no domínio da frequência. Com equalização no processamento de áudio como um exemplo típico. Existe uma comparação mais detalhada de ambos os tipos de filtros no Time Domain vs. Frequency Domain Performance of Filters. Se você tem dados para os quais tanto o tempo como o domínio de freqüência são importantes, então você pode querer dar uma olhada em Variações na Média Móvel. Que apresenta uma série de versões ponderadas da média móvel que são melhores nisso. A média móvel do comprimento (N) pode ser definida como escrita como normalmente é implementada, com a amostra de saída atual como a média das amostras anteriores (N). Visto como um filtro, a média móvel realiza uma convolução da sequência de entrada (xn) com um impulso retangular de comprimento (N) e altura (1N) (para tornar a área do pulso e, portanto, o ganho do filtro , 1 ). Na prática, é melhor tomar (N) ímpar. Embora uma média móvel também possa ser calculada usando um número par de amostras, usando um valor ímpar para (N) tem a vantagem de que o atraso do filtro será um número inteiro de amostras, uma vez que o atraso de um filtro com (N) As amostras são exatamente ((N-1) 2). A média móvel pode então ser alinhada exatamente com os dados originais, deslocando-a por um número inteiro de amostras. Domínio do tempo Uma vez que a média móvel é uma convolução com um pulso retangular, sua resposta de freqüência é uma função sinc. Isso torna algo parecido com o dual do filtro windowed-sinc, uma vez que é uma convolução com um pulso sinc que resulta em uma resposta de freqüência retangular. Essa é essa resposta de freqüência de voz que torna a média móvel um desempenho pobre no domínio da freqüência. No entanto, ele funciona muito bem no domínio do tempo. Portanto, é perfeito suavizar os dados para remover o ruído e, ao mesmo tempo, manter uma resposta de passo rápido (Figura 1). Para o típico Black Gaussian Noise (AWGN) que é frequentemente assumido, as amostras de média (N) têm o efeito de aumentar o SNR por um fator de (sqrt N). Uma vez que o ruído para as amostras individuais não está correlacionado, não há motivo para tratar cada amostra de forma diferente. Assim, a média móvel, que dá a cada amostra o mesmo peso, eliminará a quantidade máxima de ruído para uma nitidez de resposta de passo dada. Implementação Por ser um filtro FIR, a média móvel pode ser implementada através da convolução. Em seguida, terá a mesma eficiência (ou falta dela) como qualquer outro filtro FIR. No entanto, também pode ser implementado de forma recursiva, de uma maneira muito eficiente. Ele segue diretamente da definição de que esta fórmula é o resultado das expressões para (yn) e (yn1), ou seja, onde percebemos que a mudança entre (yn1) e (yn) é que um termo extra (xn1N) aparece em O fim, enquanto o termo (xn-N1N) é removido desde o início. Em aplicações práticas, muitas vezes é possível excluir a divisão por (N) para cada termo, compensando o ganho resultante de (N) em outro local. Esta implementação recursiva será muito mais rápida do que a convolução. Cada novo valor de (y) pode ser calculado com apenas duas adições, em vez das adições (N) que seriam necessárias para uma implementação direta da definição. Uma coisa a procurar com uma implementação recursiva é que os erros de arredondamento se acumulam. Isso pode ou não ser um problema para a sua aplicação, mas também implica que esta implementação recursiva funcionará melhor com uma implementação inteira do que com números de ponto flutuante. Isso é bastante incomum, uma vez que uma implementação em ponto flutuante geralmente é mais simples. A conclusão de tudo isso deve ser que você nunca deve subestimar a utilidade do filtro de média móvel simples em aplicações de processamento de sinal. Ferramenta de design de filtro Este artigo é complementado com uma ferramenta de design de filtro. Experimente valores diferentes para (N) e visualize os filtros resultantes. Experimente agora O Guia de cientistas e engenheiros para processamento de sinal digital Por Steven W. Smith, Ph. D. Como o nome indica, o filtro de média móvel opera pela média de um número de pontos do sinal de entrada para produzir cada ponto no sinal de saída. Na forma da equação, esta é escrita: onde é o sinal de entrada, é o sinal de saída e M é o número de pontos na média. Por exemplo, em um filtro de média móvel de 5 pontos, o ponto 80 no sinal de saída é dado por: Como alternativa, o grupo de pontos do sinal de entrada pode ser escolhido simetricamente em torno do ponto de saída: Isso corresponde à alteração da soma na Eq . 15-1 de: j 0 a M -1, para: j - (M -1) 2 para (M -1) 2. Por exemplo, em um filtro de média móvel de 10 pontos, o índice, j. Pode correr de 0 a 11 (média de um lado) ou -5 a 5 (média simétrica). A média simétrica requer que M seja um número ímpar. A programação é ligeiramente mais fácil com os pontos em apenas um lado no entanto, isso produz uma mudança relativa entre os sinais de entrada e de saída. Você deve reconhecer que o filtro de média móvel é uma convolução usando um kernel de filtro muito simples. Por exemplo, um filtro de 5 pontos possui o kernel de filtro: 82300, 0, 15, 15, 15, 15, 15, 0, 08230. Ou seja, o filtro médio móvel é uma convolução do sinal de entrada com um impulso retangular com um Área de um. A Tabela 15-1 mostra um programa para implementar o filtro de média móvel.
Comments
Post a Comment