Skip to main content

Moving average using matlab


Eu preciso calcular uma média móvel em uma série de dados, dentro de um loop for. Eu tenho que começar a média móvel sobre N9 dias. O array Im computing in é 4 séries de 365 valores (M), que 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 pesquisei um pouco sobre as médias móveis eo comando conv e encontrei algo que eu tentei implementar no meu código. Então, basicamente, eu computo o meu médio e plotá-lo com uma média móvel (errada). Eu escolhi o valor de wts fora do site mathworks, de modo que está incorreto. (Fonte: mathworks. nl/help/econ/moving-average-trend-estimation. html) Meu problema, porém, é que eu não entendo o que este wts é. Alguém poderia explicar Se tem algo a ver com os pesos dos valores: que é inválido neste caso. Todos os valores são ponderados da mesma forma. E se eu estou fazendo isso inteiramente errado, eu poderia obter alguma ajuda com ele Meus mais sinceros agradecimentos. Ask Sep 23 14 at 19:05 Usando conv é uma excelente maneira de implementar uma média móvel. No código que você está usando, wts é o quanto você está pesando cada valor (como você adivinhou). A soma desse vetor deve ser sempre igual a um. Se você deseja pesar cada valor uniformemente e fazer um filtro de tamanho N em movimento, então você gostaria de fazer Usando o argumento válido em conv resultará em ter menos valores em Ms do que você tem em M. Use o mesmo se você não se importa 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 o conv e cconv documentação para obter mais informações se você havent já. Você pode usar o filtro para encontrar uma média em execução sem usar um loop for. Este exemplo localiza a média em execução de um vetor de 16 elementos, usando um tamanho de janela de 5. 2) suave como parte da Caixa de Ferramentas de Ajuste de Curva (que está disponível na maioria dos casos) yy suave (y) suaviza os dados no vetor de coluna Y utilizando um filtro de média móvel. Os resultados são retornados no vetor de coluna yy. A extensão padrão para a média móvel é 5.Using 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 para a matriz que eu estou tentando calcular a média móvel de 3 dias de De baixo para cima da matriz. Eu forneci o meu código: Dada a seguinte matriz a e máscara: Eu 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 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 ea média de 3 dias de 8, 5, 2 é 5. Não há valor nas 2 linhas inferiores para a 4ª 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 simplesmente se encaixar 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: 29 de setembro de 2017 Movendo a média 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 para suprimir o ruído de um Sinal: ajustamos o valor de cada ponto à 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, 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 convolvendo 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 a 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 é:

Comments