Saturday 17 February 2018

Moving average filter matlab code


Eu preciso calcular uma média móvel sobre uma série de dados, dentro de um loop for Eu tenho que obter a média móvel em N 9 dias A matriz I m computação em é 4 séries 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 plot. I googled um pouco sobre as médias móveis eo comando conv e encontrei algo que tentei implementar no meu código. Então, basicamente, eu computar a minha média e trama Ele com uma média móvel errada Eu escolhi o valor de wts fora do site mathworks, de modo que é fonte incorreta 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 do Valores que é inválido neste caso Todos os valores são ponderados o same. And se eu estou fazendo isso inteiramente errado, poderia obter alguma ajuda com it. My sinceres thanks. asked Set 23 14 às 19 05.Using conv é uma excelente maneira de Implementar uma média móvel No código que você está usando, wts é quanto y Você está pesando cada valor como você adivinhou a soma de que o 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 Tendo menos valores em Ms do que você tem em M Use mesmo se você don t mente os efeitos de zero padding Se você tem o processamento de sinal toolbox você pode usar cconv se você quiser tentar uma circular média móvel Algo como. Você deve ler o conv E cconv documentação para obter mais informações se você haven t já. Você pode usar filtro para encontrar uma média de corrida 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 suave como parte do Curve Fitting Toolbox que está disponível na maioria dos casos. yy suaviza e suaviza os dados no vetor de coluna y usando um filtro de média móvel Resultados são retornados no vetor de coluna yy O intervalo padrão para a média móvel é 5.Using MATLAB, como posso Encontrar os 3 dias Média móvel de uma coluna específica de uma matriz e anexar a média móvel para que a matriz Eu estou tentando calcular a média móvel de 3 dias de baixo para cima da matriz que eu forneci meu código. Dado a seguinte matriz a e mask. I 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 eu desejo é dada na seguinte matriz. Se você tiver alguma sugestão, Agradeço a você. 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 a matriz a como desejadoOutput 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 válida não será Mostrado até pelo menos 17, 14 e 11 Esperemos que isso faz sentido 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 convolução tem de ser dividido Por três ou o comprimento da média móvel. Em segundo lugar, observe o tamanho de c Você não pode apenas caber c em um A maneira típica de obter uma média móvel seria usar same. but que não se parece com o que você want. Instead você São obrigados a usar um par de linhas. Download movAv m ver também movAv2 - uma versão atualizada permitindo a ponderação. Descrição Matlab inclui funções chamadas movavg e tsmovavg séries temporais média móvel no Financial Toolbox, movAv é projetado para replicar a funcionalidade básica destes O código aqui fornece um bom exemplo de gerenciamento de índices dentro de loops, o que pode ser confuso para começar com eu ve deliberadamente mantido o código curto e simples para manter esse processo clear. movAv executa uma média móvel simples que pode ser usado para recuperar ruidoso da Ta em algumas situações Funciona tomando uma média da entrada y sobre uma janela de tempo deslizante, cujo tamanho é especificado por n Quanto maior n é, maior a quantidade de suavização do efeito de n é relativa ao comprimento de O vetor de entrada y e efetivamente bem, tipo de cria um filtro de freqüência de passagem baixa - veja a seção de exemplos e considerações. Como a quantidade de suavização fornecida por cada valor de n é relativa ao comprimento do vetor de entrada, sempre vale a pena testar diferentes Valores para ver o que é apropriado Lembre-se também que n pontos são perdidos em cada média se n é 100, os primeiros 99 pontos do vetor de entrada não contêm dados suficientes para uma média 100pt Isso pode ser evitado um pouco por empilhamento de médias, por exemplo, O código eo gráfico abaixo comparam um número de diferentes médias de janela de comprimento Observe como liso 10 10pt é comparado a uma única 20pt média Em ambos os casos 20 pontos de dados são perdidos no total. Criar xaxis x 1 0 01 5 Gerar ruído noiseReps 4 ruído repmat randn 1, ceil numel x ruídoReps, noiseReps, 1 ruído remodelar ruído, 1, comprimento ruído noiseReps gerar ruído ydata y exp x 10 ruído 1 comprimento x Perfrom médias y2 movAv y, 10 10 pt y3 movAv y2, 10 10 10 pt y4 movAv y, 20 20 pt y5 movAv y, 40 40 pt y6 movAv y, 100 100 pt Figura de plotagem x, y, y2, y3, y4, y5, y6 legend Raw Dados, média móvel 10pt, 10 10pt, 20pt, 40pt, 100pt xlabel x ylabel y título Comparação de médias móveis. movAv m função de execução de código de saída movAv y, n A primeira linha define o nome da função s, entradas e saídas A entrada X deve ser um vetor de dados para realizar a média em, n deve ser o número de pontos a realizar a média sobre a saída conterá os dados médios retornados pela função Prealocar a saída de saída NaN 1, numel y Encontrar ponto médio de n round midPoint N 2 O trabalho principal da função é feito no loop for, mas antes de iniciar duas coisas são preparadas Fir A saída é pré-alocada como NaNs, isso serviu dois propósitos Em primeiro lugar preallocation é geralmente boa prática, uma vez que reduz a memória malabarismo Matlab tem que fazer, em segundo lugar, torna muito fácil de colocar a média de dados em uma saída do mesmo tamanho como O vetor de entrada Isso significa que o mesmo xaxis pode ser usado posteriormente para ambos, o que é conveniente para plotar, alternativamente os NaNs podem ser removidos posteriormente em uma linha de saída de saída de código. O midPoint variável será usado para alinhar os dados no vetor de saída Se n 10, 10 pontos serão perdidos porque, para os primeiros 9 pontos do vetor de entrada, não há dados suficientes para tomar uma média de 10 pontos Como a saída será menor que a entrada, ela precisa ser alinhada corretamente Ser usada para que uma quantidade igual de dados seja perdida no início e no fim ea entrada é mantida alinhada com a saída pelos buffers NaN criados quando a saída de pré-alocação é. Saída média MidPoint mean yab end No loop for, uma média é tomada sobre cada segmento consecutivo da entrada O loop será executado para a que é definido como 1 até o comprimento da entrada y, menos os dados que serão perdidos n If A entrada é de 100 pontos de comprimento e n é 10, o loop será executado a partir de um 1 a 90. Isso significa que a fornece o primeiro índice do segmento a ser média O segundo índice b é simplesmente um n-1 Assim na primeira iteração, A 1 n 10 so b 11-1 10 A primeira média é tomada sobre yab ou x 1 10 A média deste segmento, que é um único valor, é armazenada na saída no índice a midPoint ou 1 5 6. Na segunda iteração , A 2 b 2 10-1 11 de modo que a média é tomada sobre x 2 11 e armazenada na saída 7 Na última iteração do laço para uma entrada de comprimento 100, a 91 b 90 10-1 100 assim que a média é tomada Sobre x 91 100 e armazenado na saída 95 Isso deixa a saída com um total de n 10 valores NaN no índice 1 5 e 96 100.Exemplos e considerações As médias móveis são úteis em algumas situações, Re nem sempre a melhor escolha Aqui estão dois exemplos onde eles não são necessariamente otimizado. Calibração de microfone Este conjunto de dados representa os níveis de cada freqüência produzida por um alto-falante e gravado por um microfone com uma resposta linear conhecida A saída do alto-falante varia com Freqüência, mas podemos corrigir para esta variação com os dados de calibração - a saída pode ser ajustada em nível para ter em conta as flutuações na calibração. Observe que os dados brutos são ruidosos - isso significa que uma pequena mudança na freqüência parece exigir um Grande, errático, mudança no nível a ser responsável por isto é realista Ou é este um produto do ambiente de gravação É razoável neste caso aplicar uma média móvel que alisa a curva de freqüência de nível para fornecer uma curva de calibração que é ligeiramente menos errático Mas por que não é o ideal neste exemplo. Mais dados seriam melhores - múltiplas calibrações executadas em média juntos iria destruir o ruído no sistema, enquanto ele s ran Dom e fornecer uma curva com menor detalhe sutil perdeu A média móvel só pode aproximar isso, e pode remover algumas frequências mais altas mergulhos e picos da curva que realmente existem. Sine waves Usando uma média móvel em ondas senoidal destaca dois pontos. Questão de escolher um número razoável de pontos para executar a média over. It s simples, mas existem métodos mais eficazes de análise de sinal do que a média dos sinais oscilantes no domínio do tempo. Em este gráfico, a onda senoidal original é plotada em azul Noise is Adicionado e traçado como a curva laranja Uma média móvel é executada em números diferentes de pontos para ver se a onda original pode ser recuperada 5 e 10 pontos fornecem resultados razoáveis, mas don t remover o ruído completamente, onde como um maior número de pontos começar a Perder detalhe de amplitude como a média se estende ao longo de diferentes fases lembrar a onda oscila em torno de zero, e média -1 1 0. Uma abordagem alternativa seria a construção de um filtro passa-baixa do que pode ser Aplicado ao sinal no domínio da freqüência não vou entrar em detalhes porque vai além do escopo deste artigo, mas como o ruído é freqüência consideravelmente mais alta do que a freqüência fundamental das ondas, seria bastante fácil, neste caso, construir Um filtro passa-baixa que irá remover o ruído de alta freqüência.

No comments:

Post a Comment