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: Estou tentando concluir um projeto de atribuição matlab com a seguinte pergunta: Escreva uma função chamada movingaverage que usa um escalar chamado x como um argumento de entrada e retorna um escalar. A função usa um buffer para armazenar as entradas anteriores e o buffer pode conter no máximo 25 entradas. Especificamente, a função deve salvar as 25 entradas mais recentes em um vetor (o buffer). Cada vez que a função é chamada, ela copia o argumento de entrada em um elemento do buffer. Se já houver 25 entradas armazenadas no buffer, ele descartará o elemento mais antigo e salvará o atual no buffer. Depois de armazenar a entrada no buffer, ela retorna a média de todos os elementos no buffer. A solução que forneço é a seguinte: De acordo com a auto grader, minha função executa corretamente quando os valores 1-50 estão passando consecutivamente, mas falha quando os valores de uma onda senoidal ruidosa estão passando consecutivamente (o que me foi informado que pode ser devido a alguns tipo de erro de arredondamento). Ficaria muito grato se algum de vocês pudesse me fornecer algumas dicas sobre as possíveis etapas de erro no meu código (anexado acima). Agradeço antecipadamente29 Setembro, 2013 Média móvel por convolução O que é a média móvel e o que é bom Como a média móvel é feita usando a convolução A média móvel é uma operação simples usada normalmente para suprimir o ruído de um sinal: definimos o valor de cada apontam 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, suposto ser ímpar. A fórmula acima descreve uma operação simétrica: as amostras são obtidas de ambos os lados do ponto real. Abaixo está um exemplo da vida real. O ponto em que a janela é colocada, na verdade, é vermelho. Os 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 fazer isso 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 fazer a mesma coisa usando convolução. Use os seguintes parâmetros: A saída desejada é: Como primeira abordagem, vamos tentar o que obtemos convolvendo o sinal x pelo seguinte k kernel: A saída é exatamente três vezes maior 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 nela são multiplicados por um e então 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 incluindo a divisão: Mas não seria ótimo fazer a divisão durante a convolução? Aqui vem a idéia reorganizando a equação: Então vamos usar o seguinte k kernel: Desta forma nós iremos obter a saída desejada: Em geral: se quisermos fazer média móvel por convolução tendo um tamanho de janela de w. usaremos o seguinte k kernel: Uma função simples que faz a média móvel é: Um exemplo de uso é:
No comments:
Post a Comment