Friday 25 August 2017

Matlab De Filtro De Média Móvel De 8 Pontos


Filtro médio móvel (filtro MA) Carregando. O filtro de média móvel é um filtro Low Pass FIR (Finite Impulse Response) simples comumente usado para suavizar uma série de datasigns amostrados. Demora M amostras de entrada por vez e leva a média dessas M-samples e produz um único ponto de saída. É uma estrutura de LPF (Low Pass Filter) muito simples que é útil para cientistas e engenheiros para filtrar o componente ruidoso indesejado dos dados pretendidos. À medida que o comprimento do filtro aumenta (o parâmetro M), a suavidade da saída aumenta, enquanto que as transições afiadas nos dados são tornadas cada vez mais contundentes. Isso implica que este filtro possui uma excelente resposta ao domínio do tempo, mas uma resposta de freqüência fraca. O filtro MA executa três funções importantes: 1) Demora os pontos de entrada M, calcula a média desses pontos M e produz um único ponto de saída 2) Devido aos cálculos de computação envolvidos. O filtro introduz uma quantidade definida de atraso 3) O filtro atua como um filtro de passagem baixa (com resposta de domínio de freqüência fraca e uma resposta de domínio de tempo bom). Código Matlab: O código matlab seguinte simula a resposta do domínio do tempo de um filtro M-point Moving Average e também faz a resposta de freqüência para vários comprimentos de filtro. Resposta de Domínio de Tempo: no primeiro gráfico, temos a entrada que está entrando no filtro de média móvel. A entrada é barulhenta e nosso objetivo é reduzir o ruído. A próxima figura é a resposta de saída de um filtro de média móvel de 3 pontos. Pode deduzir-se da figura que o filtro de 3 pontos de média móvel não fez muito na filtragem do ruído. Aumentamos os toques de filtro para 51 pontos e podemos ver que o ruído na saída reduziu muito, o que é retratado na próxima figura. Aumentamos as torneiras até 101 e 501 e podemos observar que mesmo - embora o ruído seja quase zero, as transições são apagadas drasticamente (observe a inclinação de cada lado do sinal e compare-os com a transição ideal da parede de tijolos em Nossa contribuição). Resposta de frequência: a partir da resposta de freqüência, pode-se afirmar que o roll-off é muito lento ea atenuação da faixa de parada não é boa. Dada esta atenuação da faixa de parada, claramente, o filtro de média móvel não pode separar uma faixa de freqüências de outra. Como sabemos que um bom desempenho no domínio do tempo resulta em desempenho fraco no domínio da freqüência e vice-versa. Em suma, a média móvel é um filtro de suavização excepcionalmente bom (a ação no domínio do tempo), mas um filtro de passagem baixa excepcionalmente ruim (a ação no domínio da freqüência) Links externos: Livros recomendados: Barra lateral primária Usando o MATLAB, como posso Encontre a média móvel de 3 dias de uma coluna específica de uma matriz e adicione a média móvel a essa matriz. Estou tentando calcular a média móvel de 3 dias de baixo para o topo da matriz. Eu forneci o meu código: Dada a seguinte matriz a e máscara: tentei implementar o comando conv, mas recebo um erro. Aqui está o comando conv que eu tentei usar na 2ª coluna da matriz a: A saída que eu desejo é dada na seguinte matriz: Se você tiver alguma sugestão, eu apreciaria muito. Obrigado Para a coluna 2 da matriz a, eu estou informando a média móvel de 3 dias da seguinte forma e colocando o resultado na coluna 4 da matriz a (I renomeou a matriz a como 39desiredOutput39 apenas para ilustração). A média de 3 dias de 17, 14 e 11 é de 14 a média de 3 dias de 14, 11, 8 é 11, a média de 3 dias de 11, 8, 5 é de 8 e a 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 faça sentido ndash Aaron 12 de junho 13 às 1:28 Em geral, isso ajudaria 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) Em segundo lugar, observe o tamanho de c. Você não pode simplesmente se encaixar em c. 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ê deseja. Em vez disso, você é obrigado a usar algumas linhas: tenho uma matriz de séries temporais de dados para 8 variáveis ​​com cerca de 2500 pontos (10 anos de sexta-feira) e gostaria de calcular a média, a variância, a aspeto e a curtose em uma mudança Base média. Digamos quadros 100 252 504 756 - Gostaria de calcular as quatro funções acima em cada um dos quadros (time-), diariamente - de modo que o retorno para o dia 300 no caso com 100 dias de quadro seria significante Kurtosis de desvio de variância do período dia 201-dia300 (100 dias no total). e assim por diante. Eu sei que isso significa que eu obteria uma saída de matriz, e o primeiro número de quadros seria NaNs, mas não consigo descobrir a indexação necessária para fazer isso. Perguntou Mar 24 14 às 0:07 Esta é uma questão interessante porque acho que a solução ideal é diferente da média do que é para as outras estatísticas da amostra. Eu forneci um exemplo de simulação abaixo que você pode trabalhar. Primeiro, escolha alguns parâmetros arbitrários e simule alguns dados: Para a média, use o filtro para obter uma média móvel: pensei inicialmente em resolver este problema usando conv da seguinte maneira: Mas como PhilGoddard apontou nos comentários, a abordagem do filtro evita a Necessidade do loop. Observe também que Ive escolheu para tornar as datas na matriz de saída correspondem às datas em X, então no trabalho posterior você pode usar os mesmos índices para ambos. Assim, as primeiras observações do WindowLength-1 no MeanMA serão nan. Para a variação, não consigo ver como usar qualquer filtro ou conv ou mesmo uma soma executória para tornar as coisas mais eficientes, então, em vez disso, eu executo o cálculo manualmente em cada iteração: Poderíamos acelerar as coisas um pouco explorando o fato de que já temos Calculou a média móvel média. Basta substituir a linha de loop dentro do acima com: No entanto, duvido que isso faça muita diferença. Se alguém pode ver uma maneira inteligente de usar o filtro ou o conv para obter a variável da janela em movimento, fique muito interessado em vê-lo. Eu deixo o caso de skewness e kurtosis para o OP, uma vez que eles são essencialmente o mesmo que o exemplo de variância, mas com a função apropriada. Um ponto final: se você estivesse convertendo o acima em uma função geral, você poderia passar em uma função anônima como um dos argumentos, então você teria uma rotina média móvel que funcione para escolha arbitrária de transformações. Final, ponto final: para uma seqüência de comprimentos de janela, basta fazer um loop sobre todo o bloco de código para cada comprimento de janela. Sim, a função de filtro é realmente melhor para o meio - mas eu queria fazer isso para várias funções diferentes, não só a média. Acabei de publicar minha resposta porque funcionou para mim e pensei que poderia ajudar alguém também. Ndash Dexter Morgan 15 de abril às 12:40

No comments:

Post a Comment