Wednesday 2 August 2017

Função Média Móvel Em Matlab


Estou tentando completar um projeto de atribuição matlab com a seguinte pergunta: Escreva uma função chamada motionaverage que leva 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, ele copia o argumento de entrada em um elemento do buffer. Se já houver 25 entradas armazenadas no buffer, ele descarta o elemento mais antigo e salva o atual no buffer. Depois de armazenar a entrada no buffer, ele retorna a média de todos os elementos no buffer. A solução que eu forneço é a seguinte: de acordo com a graduação automática, minha função funciona corretamente quando os valores 1-50 estão passando consecutivamente, mas falham quando os valores de uma onda sinusoidal barulhenta estão passando consecutivamente (o que foi informado que pode ser devido a alguns Tipo de erro de redondeamento). Eu ficaria grato se algum de vocês pudesse me fornecer algumas dicas sobre as possíveis etapas de erro no meu código (anexado acima). Obrigado antecipadamenteCreado na quarta-feira, 08 de outubro de 2008 20:04 Atualizado em quinta-feira, 14 de março de 2013 01:29 Escrito por Batuhan Osmanoglu Acessos: 41065 Média em movimento em Matlab Muitas vezes eu me encontro na necessidade de promediar os dados que tenho para reduzir o Um pouco de barulho. Eu escrevi algumas funções para fazer exatamente o que eu quero, mas os matlabs criados na função de filtro funcionam muito bem também. Aqui vou escrever sobre dados em média 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 de numerador para o filtro (b), o coeficiente de denominador para o filtro (a) e os dados (X), é claro. Um filtro de média em execução pode ser definido simplesmente por: Para dados 2D, podemos usar a função Matlabs filter2. Para obter mais informações sobre como funciona o filtro, você pode digitar: Aqui está uma implementação rápida e suja de um filtro médio 16 por 16 em movimento. Primeiro precisamos definir o filtro. Como tudo o que queremos é contribuição igual de todos os vizinhos, podemos usar apenas a função. Nós dividimos tudo com 256 (1616), uma vez que não queremos alterar 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 o Azimuth é mapeado no eixo X. O filtro tinha 4 pixels de largura em alcance e 16 pixels de largura em Azimuth.29 Setembro de 2013 Média em movimento pela convolução O que é média móvel e para o que é bom Como a média móvel é feita usando a convolução A média móvel é uma operação simples usada geralmente para Suprimir o ruído de um sinal: estabelecemos o valor de cada ponto 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, supostamente estranho. A fórmula acima descreve uma operação simétrica: as amostras são retiradas 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 devem 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, tente dar o mesmo ao usar a convolução. Use os seguintes parâmetros: A saída desejada é: Como primeira abordagem, vamos tentar o que obtem ao convolver o sinal x pelo seguinte k kernel: 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, todos os elementos nele são multiplicados por um e depois 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 que inclua a divisão: Mas não seria o ideal para fazer a divisão durante a convolução. Aqui vem a idéia ao reorganizar a equação: então usaremos o seguinte k kernel: desta forma, vamos Obtenha o resultado desejado: Em geral: se queremos fazer uma média móvel por convolução com um tamanho de janela de w. Devemos usar o seguinte k kernel: uma função simples que faz a média móvel é: um exemplo de uso é:

No comments:

Post a Comment