How to compute moving average in matlab
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 a essa matriz que 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 e máscara: Eu tentei implementar o comando conv, mas estou recebendo um erro. Aqui está o comando conv que venho tentando usar na segunda coluna da matriz a: A saída que desejo é dada na seguinte matriz: Se você tiver alguma sugestão, eu agradeceria muito. Obrigado Para a coluna 2 da matriz a, estou calculando a média móvel de 3 dias da seguinte maneira e colocando o resultado na coluna 4 da matriz a (renomeiei a matriz a 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 e a média de 3 dias de 8, 5, 2 é 5. Não há valor nas duas linhas inferiores da quarta coluna porque o cálculo da média móvel de três dias começa na parte inferior. A saída 39valid39 não será mostrada até pelo menos 17, 14 e 11. Espero que isso faça sentido ndash Aaron Jun 12 13 at 1:28 Em geral, ajudaria se você mostrasse o erro. Nesse 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 simplesmente encaixar c em um. A maneira típica de obter uma média móvel seria usar o mesmo: mas isso não parece com o que você quer. Em vez disso, você é forçado a usar algumas linhas: tenho um vetor e quero calcular a média móvel dele (usando uma janela de largura 5). Por exemplo, se o vetor em questão é 1,2,3,4,5,6,7,8. então a primeira entrada do vetor resultante deve ser a soma de todas as entradas em 1,2,3,4,5 (ie 15) a segunda entrada do vetor resultante deve ser a soma de todas as entradas em 2,3,4, 5,6 (ou seja, 20) etc. No final, o vetor resultante deve ser 15,20,25,30. Como posso fazer isso? A função conv está no seu beco: três respostas, três métodos diferentes. Aqui está um benchmark rápido (diferentes tamanhos de entrada, largura de janela fixa de 5) usando timeit sinta-se livre para fazer buracos nele (nos comentários) se você acha que precisa ser refinado. conv emerge como a abordagem mais rápida é duas vezes mais rápida do que a aproximação das moedas (usando filtro). e cerca de quatro vezes mais rápido que Luis Mendos (usando cumsum). Aqui está outro benchmark (tamanho de entrada fixo de 1e4. Larguras de janela diferentes). Aqui, Luis Mendos cumsum surge como o claro vencedor, porque sua complexidade é governada principalmente pelo comprimento da entrada e é insensível à largura da janela. Conclusão Para resumir, você deve usar a abordagem conv, se sua janela for relativamente pequena, use a abordagem cumsum se sua janela for relativamente grande. Code (for benchmarks) Criado em quarta-feira, 8 de outubro de 2008 20:04 Última atualização em Quinta, 14 Março 2013 01:29 Escrito por Batuhan Osmanoglu Acessos: 40757 Média móvel em Matlab Muitas vezes eu me encontro na necessidade de calcular a média dos dados que tenho reduza o ruído um pouco. Eu escrevi funções de casal para fazer exatamente o que eu quero, mas a função de filtro embutida do matlabs funciona muito bem também. Aqui vou escrever sobre a média de dados em 1D e 2D. O filtro 1D pode ser realizado usando a função de filtro. A função de filtro requer pelo menos três parâmetros de entrada: o coeficiente do numerador para o filtro (b), o coeficiente do denominador para o filtro (a) e os dados (X), é claro. Um filtro de média móvel pode ser definido simplesmente por: Para dados 2D, podemos usar a função Matlabs filter2. Para obter mais informações sobre como o filtro funciona, você pode digitar: Aqui está uma implementação rápida e suja de um filtro de média móvel de 16 por 16. Primeiro precisamos definir o filtro. Uma vez que tudo o que queremos é igual contribuição de todos os vizinhos, podemos apenas usar as funções. Nós dividimos tudo com 256 (1616), pois não queremos mudar o nível geral (amplitude) do sinal. Para aplicar o filtro, podemos simplesmente dizer o seguinte Abaixo estão os resultados para a fase de um interferograma SAR. Neste caso, Range está no eixo Y e Azimuth é mapeado no eixo X. O filtro tinha 4 pixels de largura no intervalo e 16 pixels de largura no azimute.
Comments
Post a Comment