Wednesday 30 January 2019

Como calcular a média móvel em matlab


Eu preciso calcular uma média móvel em uma série de dados, dentro de um loop for. Eu tenho que obter a média móvel em N9 dias. A matriz de computação é uma série de 365 valores (M), que em si são valores médios de outro conjunto de dados. Eu quero traçar os valores médios dos meus dados com a média móvel em um gráfico. Eu gritei um pouco sobre as médias móveis e o comando conv e encontrei algo que eu tentei implementar no meu código .: então, basicamente, eu calculo o meu significado e traço-o com uma média móvel (errada). Eu escolhi o valor de Wts diretamente do site Mathworks, então isso é incorreto. (Fonte: mathworks. nlhelpeconmoving-average-trend-estimate. html) Meu problema, porém, é que eu não entendo o que é isso. Alguém poderia explicar Se isso tem algo a ver com os pesos dos valores: isso é inválido neste caso. Todos os valores são ponderados o mesmo. E se eu estou fazendo isso inteiramente errado, eu poderia obter alguma ajuda com isso, meus mais sinceros agradecimentos. Perguntou 23 de setembro 14 às 19:05 Usando conv é uma excelente maneira de implementar uma média móvel. No código que você está usando, é o quanto você está pesando cada valor (como você adivinhou). A soma desse vetor deve ser sempre igual a uma. Se você deseja pesar cada valor de forma uniforme e fazer um tamanho N, mover o filtro, então você gostaria de fazer. Usando o argumento válido em conv resultaria em ter menos valores na Ms do que em M. Use o mesmo se você não se importar com os efeitos de Zero preenchimento. Se você tiver a caixa de ferramentas de processamento de sinal, você pode usar o cconv se quiser experimentar uma média móvel circular. Algo como Você deve ler a documentação conv e cconv para obter mais informações se você não tiver. Você pode usar o filtro para encontrar uma média em execução sem usar um loop for. Este exemplo encontra a média de execução de um vetor de 16 elementos, usando um tamanho de janela de 5. 2) liso como parte da Curva Fitting Toolbox (que está disponível na maioria dos casos) yy liso (y) suaviza os dados no vetor de coluna Usando um filtro de média móvel. Os resultados são retornados no vetor da coluna yy. O intervalo padrão para a média móvel é 5. Eu tenho um vetor e eu quero calcular a média móvel dele (usando uma janela de largura 5). Por exemplo, se o vetor em questão for 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 (ou seja, 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á bem no seu beco: Três respostas, três métodos diferentes. Aqui está um benchmark rápido (tamanhos de entrada diferentes, largura de janela fixa de 5) usando o tempo, sinta-se livre para puxar buracos nele (nos comentários) se você acha que precisa ser refinado. Conv surge como a abordagem mais rápida é cerca de duas vezes mais rápido que as moedas se aproximam (usando o filtro). E cerca de quatro vezes mais rápido que Luis Mendos se aproxima (usando cumsum). Aqui está outro benchmark (tamanho de entrada fixo de 1e4. Largura de janela diferente). Aqui, a aproximação de Luis Mendos cumsum surge como o vencedor claro, porque sua complexidade é principalmente governada 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. Código (para benchmarks) Calcula a média móvel Usando somente as funções MATLAB Este exemplo mostra como calcular a média móvel de um sinal usando a função movmean. A função movmean calcula a média móvel de 10 pontos dos dados ruidosos provenientes de um acelerômetro. As três colunas nestes dados representam a aceleração linear do acelerômetro no X-axis, Y-axis e Z - axis, respectivamente. Todos os dados estão disponíveis em um arquivo MAT. Trace a média móvel dos dados do X - axis. Os dados não são muito grandes (7140 amostras em cada coluna) e está totalmente disponível para processamento. A função movmean é projetada para lidar com tais cálculos únicos. No entanto, se os dados forem muito grandes, como na ordem do GB, ou se os dados forem um fluxo ao vivo que precisa ser processado em tempo real, use os objetos do sistema. Os objetos do sistema dividem os dados em segmentos chamados quadros e processam cada quadro em um loop de iteração de forma transparente. Esta abordagem é eficiente na memória, pois apenas uma estrutura de dados é processada a qualquer momento. Além disso, os objetos do Sistema são otimizados para lidar com estados internamente. MATLAB e Simulink são marcas registradas da The MathWorks, Inc. Por favor, veja mathworkstrademarks para obter uma lista de outras marcas registradas pertencentes à The MathWorks, Inc. Outros produtos ou nomes de marcas são marcas comerciais ou marcas registradas de seus respectivos proprietários. Escolha o seu país

No comments:

Post a Comment