Friday 19 May 2017

Movendo Média E Convolução



Usando o MATLAB, como posso encontrar a média móvel de 3 dias de uma coluna específica de uma matriz e acrescentar a média móvel àquela matriz? Estou tentando calcular a média móvel de 3 dias de baixo para cima da matriz. Eu forneci o meu código: Dada a seguinte matriz a e máscara: Tentei implementar o comando conv, mas estou recebendo um erro. Aqui está o comando conv que eu tenho tentado usar na segunda coluna da matriz a: A saída que desejo é dada na seguinte matriz: Se você tiver alguma sugestão, eu gostaria muito. Obrigado Para a coluna 2 da matriz a, estou computando a média móvel de 3 dias da seguinte maneira e colocando o resultado na coluna 4 da matriz a (I renomeado como a matriz 39 como 39desiredOutput39 apenas para ilustração). A média de 3 dias de 17, 14, 11 é 14 a média de 3 dias de 14, 11, 8 é 11 a média de 3 dias de 11, 8, 5 é 8 ea média de 3 dias de 8, 5, 2 é 5. Não há nenhum valor nas 2 linhas inferiores para a 4a coluna porque a computação para a média móvel de 3 dias começa na parte inferior. A saída 39valid39 não será mostrada até pelo menos 17, 14 e 11. Espero que isso faz sentido ndash Aaron Jun 12 13 em 1:28 Em geral, seria útil se você mostrar o erro. Neste caso você está fazendo duas coisas erradas: Primeiro, sua convolução precisa ser dividida por três (ou o comprimento da média móvel) Segundo, observe o tamanho de c. Você não pode apenas caber c em um. A maneira típica de obter uma média móvel seria usar o mesmo: mas isso não se parece com o que você quer. Em vez disso, você é forçado a usar um par de linhas: 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 do kernel sob o capô e estou esperando alguém pode ser capaz de esclarecer o comportamento para mim. Um post semelhante que ainda me tem um pouco confuso está aqui: Tenho diariamente rio e dados de fluxo de tempo para uma bacia hidrográfica em diferentes locais de origem. Assim, a matriz é assim, dim 1 (as linhas) representam cada site dim 2 (as colunas) representam a data dim 3 (as páginas) representam o tipo diferente de medida (altura do rio, fluxo, precipitação, etc.) É tentar usar CONVN para ter uma média móvel de 21 dias em cada local, para cada ponto de observação para cada variável. Como eu entendo, eu deveria ser capaz de usar um kernel como: Eu tentei brincar e criou outro kernel que também deve funcionar (eu acho) e definir ker2 como: Os resultados não coincidem e eu 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 assim lançando não deve ter nenhum efeito sobre a saída de convolução. O que você especificou é um kernel padrão de média móvel, e assim a convolução deve funcionar para encontrar a média móvel como você espera. Mas I39m um pouco confuso porque você disse que o doesn39t acima trabalho ndash rayryeng 31 de maio 15 at 20:17 Isso é completamente até você :). A pergunta que você tem é válida (sem trocadilhos) que as viagens de um monte de gente. Se você quer que ele fique, eu posso escrever uma resposta que resume o que nós falamos. Se você quiser retrair apagar a sua resposta, que não há nenhum problema em tudo. Deixe-me saber o que você quer fazer ndash rayryeng Julgamento a partir do contexto de sua pergunta, você tem uma matriz 3D e você quer encontrar a média móvel de cada linha de forma independente em todas as fatias 3D. O código acima deve funcionar (o primeiro caso). No entanto, o sinalizador válido retorna uma matriz cujo tamanho é válido em termos dos limites da convolução. Dê uma olhada no primeiro ponto do post que você ligou para mais detalhes. Especificamente, as primeiras 21 entradas para cada linha ficarão em falta devido ao sinalizador válido. Seu somente quando você começa à 22nd entrada de cada fileira faz o kernel da convolução fique completamente contido dentro de uma fileira da matriz e seu desse ponto onde você obtem resultados válidos (nenhuma chalaça pretendida). Se você gostaria de ver essas entradas nos limites, então você precisará usar o mesmo sinalizador se você quiser manter a mesma matriz de tamanho como a entrada ou o sinalizador completo (que é padrão), que lhe dá o tamanho da saída a partir de As bordas externas mais extremas, mas tenha em mente que a média móvel será feito com um monte de zeros e assim as primeiras 21 entradas wouldnt ser o que você espera de qualquer maneira. No entanto, se eu estou interpretando o que você está pedindo, então a bandeira válida é o que você quer, mas tenha em mente que você terá 21 entradas ausentes para acomodar os casos de borda. Tudo somado, seu código deve funcionar, mas tenha cuidado em como você interpreta os resultados. BTW, você tem um kernel simétrico, e assim lançando não deve ter nenhum efeito sobre a saída de convolução. O que você especificou é um kernel padrão de média móvel e, portanto, convolução deve trabalhar em encontrar a média móvel como você espera. A média móvel como um filtro A média móvel é frequentemente utilizado para alisar 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 é realmente um dos filtros mais comuns no processamento de sinal. Tratá-lo como um filtro permite compará-lo com, por exemplo, windowed-sinc filtros (ver os artigos sobre low-pass, high-pass, band-pass e band-reject filtros 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. Das quais as medidas de alisamento por média são um excelente exemplo. Filtros windowed-sinc, por outro lado, são fortes performers no domínio da freqüência. Com equalização no processamento de áudio como um exemplo típico. Há uma comparação mais detalhada de ambos os tipos de filtros no domínio do tempo versus desempenho de domínio de freqüência de filtros. Se você tiver dados para os quais o tempo e 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 um número de versões ponderadas da média móvel que são melhores nisso. A média móvel de comprimento (N) pode ser definida como escrita como é tipicamente implementada, com a amostra de saída corrente como a média das amostras (N) anteriores. Visto como um filtro, a média móvel executa uma convolução da seqüência de entrada (xn) com um pulso retangular de comprimento (N) e altura (1N) (para fazer a área do pulso e, portanto, o ganho do filtro , 1 ). Na prática, é melhor tomar (N) ímpar. Embora uma média móvel possa também ser calculada usando um número par de amostras, usar 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) Amostras é exactamente ((N-1) 2). A média móvel pode então ser alinhada exatamente com os dados originais deslocando-o por um número inteiro de amostras. Domínio Dado que a média móvel é uma convolução com um pulso retangular, a sua resposta de frequência é uma função sinc. Isso torna algo como 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. É esta resposta de freqüência de sinc que faz com que a média móvel seja um desempenho fraco no domínio da freqüência. No entanto, ele funciona muito bem no domínio do tempo. Portanto, é perfeito para suavizar os dados para remover o ruído, enquanto ao mesmo tempo ainda mantém uma rápida resposta passo (Figura 1). Para o típico Ruído Gaussiano Branco Aditivo (AWGN) que é freqüentemente assumido, a média (N) de amostras tem o efeito de aumentar a SNR por um fator de (sqrt N). Como o ruído para as amostras individuais não está correlacionado, não há razão para tratar cada amostra de forma diferente. Assim, a média móvel, que dá a cada amostra o mesmo peso, vai se livrar da quantidade máxima de ruído para uma dada nitidez resposta passo. Implementação Porque é um filtro FIR, a média móvel pode ser implementada através de convolução. Ele terá então a mesma eficiência (ou falta dela) como qualquer outro filtro FIR. No entanto, também pode ser implementado recursivamente, de uma forma muito eficiente. Segue-se diretamente a partir da definição de que esta fórmula é o resultado das expressões para (yn) e (yn1), ou seja, onde observamos que a mudança entre (yn1) e (yn) é que um termo extra (xn1N) aparece em O final, enquanto o termo (xn-N1N) é removido desde o início. Nas aplicações práticas, muitas vezes é possível deixar de fora a divisão por (N) para cada termo, compensando o ganho resultante de (N) em outro lugar. Esta implementação recursiva será muito mais rápida que a convolução. Cada novo valor de (y) pode ser calculado com apenas duas adições, em vez das (N) adições que seriam necessárias para uma implementação direta da definição. Uma coisa a olhar para fora com uma implementação recursiva é que os erros de arredondamento irá acumular. Isso pode ou não pode ser um problema para o aplicativo, mas também implica que essa implementação recursiva realmente funcionará melhor com uma implementação inteira do que com números de ponto flutuante. Isso é bastante incomum, uma vez que uma implementação de ponto flutuante é geralmente mais simples. A conclusão de tudo isso deve ser que você nunca deve subestimar a utilidade do simples filtro de média móvel em aplicações de processamento de sinal. Filter Design Tool Este artigo é complementado com uma ferramenta Filter Design. Experimente com diferentes valores para (N) e visualize os filtros resultantes. Experimente agora 29 de setembro de 2013 Média móvel por convolução O que é média móvel e para que é bom Como a média móvel é feita usando a convolução A média móvel é uma operação simples usada geralmente para suprimir o ruído de um sinal: definimos o valor de cada ponto Para a média dos valores em sua vizinhança. Por uma fórmula: Aqui x é a entrada ey é o sinal de saída, enquanto o tamanho da janela é w, suposto ser ímpar. A fórmula acima descreve uma operação simétrica: as amostras são tomadas de ambos os lados do ponto real. Abaixo está um exemplo da vida real. O ponto em que a janela é colocada realmente é vermelho. Valores fora de x são supostos ser zeros: Para brincar e ver os efeitos da média móvel, dê uma olhada nesta demonstração interativa. Como fazê-lo por convolução Como você pode ter reconhecido, o cálculo da média móvel simples é semelhante à convolução: em ambos os casos, uma janela é deslizada ao longo do sinal e os elementos na janela são resumidos. Então, dar-lhe uma tentativa de fazer a mesma coisa usando convolução. Use os seguintes parâmetros: A saída desejada é: Como primeira aproximação, vamos tentar o que obtemos ao converter o sinal x pelo k kernel seguinte: A saída é exatamente três vezes maior do que o esperado. Também pode ser visto que os valores de saída são o resumo dos três elementos na janela. É porque durante a convolução a janela é deslizada ao longo, todos os elementos nele são multiplicados por um e, em seguida, resumido: yk 1 cdot x 1 cdot x 1 cdot x Para obter os valores desejados de y. A saída deve ser dividida por 3: Por uma fórmula incluindo a divisão: Mas não seria ótimo para fazer a divisão durante convolução Aqui vem a idéia, reorganizando a equação: Então vamos usar o k kernel seguinte: Desta forma, vamos Obter a saída desejada: Em geral: se queremos fazer a média móvel por convolução tendo um tamanho de janela de w. Vamos usar o seguinte k kernel: Uma função simples fazendo a média móvel é: Um exemplo de uso é:

No comments:

Post a Comment