Saturday, 4 November 2017

Rolling Moving Average Matlab


A melhor maneira de fazer isso (na minha opinião) seria usar um buffer circular para armazenar suas imagens. Em um buffer circular ou anel, o elemento de dados mais antigo na matriz é substituído pelo elemento mais novo inserido na matriz. Os conceitos básicos de fazer tal estrutura são descritos no pequeno vídeo Mathworks Implementando um buffer circular simples. Para cada iteração de seu loop principal que lida com uma única imagem, basta carregar uma nova imagem no buffer circular e, em seguida, usar MATLAB s construído na função média para levar a média de forma eficiente. Se você precisar aplicar uma função de janela aos dados, faça uma cópia temporária dos quadros multiplicada pela função da janela e tome a média da cópia em cada iteração do loop. Respondeu 6 de agosto de 12 às 10:11, calcula um tipo de média móvel para cada uma das 10 bandas em todas as suas imagens. Esta linha calcula uma média móvel do valor médio sobre suas imagens: para ambos, você deseja adicionar uma estrutura de buffer que tenha apenas as últimas 10 imagens. Para simplificar, você também pode apenas manter tudo na memória. Aqui está um exemplo para Yout: Mude esta linha: (Adicione uma dimensão) E altere isso: então, para exibir o uso, você faria algo. Semelhante ao valor médio. Tenho uma matriz de séries temporais para 8 variáveis ​​com cerca de 2500 pontos (10 anos de sexta-feira) e gostaria de calcular a média, a variação, a aspereza e a curtose em média móvel. Digamos quadros 100 252 504 756 - Gostaria de calcular as quatro funções acima em cada um dos quadros (time-), diariamente - de modo que o retorno para o dia 300 no caso com 100 dias de quadro seria significante Kurtosis de desvio de variância do período dia 201-dia300 (100 dias no total). e assim por diante. Eu sei que isso significa que eu obteria uma saída de matriz, e o primeiro número de quadros seria NaNs, mas não consigo descobrir a indexação necessária para fazer isso. Perguntou Mar 24 14 às 0:07 Esta é uma questão interessante porque acho que a solução ideal é diferente da média do que é para as outras estatísticas da amostra. Eu forneci um exemplo de simulação abaixo que você pode trabalhar. Primeiro, escolha alguns parâmetros arbitrários e simule alguns dados: Para a média, use o filtro para obter uma média móvel: pensei inicialmente em resolver este problema usando conv da seguinte maneira: Mas como PhilGoddard apontou nos comentários, a abordagem do filtro evita a Necessidade do loop. Observe também que Ive escolheu para tornar as datas na matriz de saída correspondem às datas em X, então no trabalho posterior você pode usar os mesmos índices para ambos. Assim, as primeiras observações do WindowLength-1 no MeanMA serão nan. Para a variação, não consigo ver como usar qualquer filtro ou conv ou mesmo uma soma executória para tornar as coisas mais eficientes, então, em vez disso, eu executo o cálculo manualmente em cada iteração: Poderíamos acelerar as coisas um pouco explorando o fato de que já temos Calculou a média móvel média. Basta substituir a linha de loop dentro do acima com: No entanto, duvido que isso faça muita diferença. Se alguém pode ver uma maneira inteligente de usar o filtro ou o conv para obter a variável da janela em movimento, fique muito interessado em vê-lo. Eu deixo o caso de skewness e kurtosis para o OP, uma vez que eles são essencialmente o mesmo que o exemplo de variância, mas com a função apropriada. Um ponto final: se você estivesse convertendo o acima em uma função geral, você poderia passar em uma função anônima como um dos argumentos, então você teria uma rotina média móvel que funcione para escolha arbitrária de transformações. Final, ponto final: para uma seqüência de comprimentos de janela, basta fazer um loop sobre todo o bloco de código para cada comprimento de janela. Sim, a função de filtro é realmente melhor para o meio - mas eu queria fazer isso para várias funções diferentes, não só a média. Acabei de publicar minha resposta porque funcionou para mim e pensei que poderia ajudar alguém também. Ndash Dexter Morgan 15 de abril 14 em 12: 4029 setembro de 2013 Média em movimento pela convolução O que é a média móvel e o que é bom para 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 e y é o sinal de saída, enquanto o tamanho da janela é w, supostamente estranho. A fórmula acima descreve uma operação simétrica: as amostras são retiradas 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 devem 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, tente dar o mesmo ao usar a convolução. Use os seguintes parâmetros: A saída desejada é: Como primeira abordagem, vamos tentar o que obtem ao convolver o sinal x pelo seguinte k kernel: 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, todos os elementos nele são multiplicados por um e depois resumidos: 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 que inclua a divisão: Mas não seria o ideal para fazer a divisão durante a convolução. Aqui vem a idéia ao reorganizar a equação: então usaremos o seguinte k kernel: desta forma, vamos Obtenha o resultado desejado: Em geral: se queremos fazer uma média móvel por convolução com um tamanho de janela de w. Devemos usar o seguinte k kernel: uma função simples que faz a média móvel é: um exemplo de uso é:

No comments:

Post a Comment