Criado em quarta-feira, 08 de outubro de 2008 20:04 Atualizado em quinta-feira, 14 de março de 2017 01:29 Escrito por Batuhan Osmanoglu Acessos: 41064 Média móvel em Matlab Muitas vezes eu me encontro na necessidade de prover os dados que eu tenho para reduzir o ruído um pouco pouco. 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 era de 4 pixels de largura em alcance e 16 pixels de largura em Azimuth. Download movAv. m (veja também movAv2 - uma versão atualizada que permite a ponderação) Descrição O Matlab inclui funções chamadas movavg e tsmovavg (média móvel em séries temporais) na caixa de ferramentas financeira, MovAv é projetado para replicar a funcionalidade básica destes. O código aqui fornece um bom exemplo de gerenciar índices dentro de loops, o que pode ser confuso para começar. Eu deliberadamente mantive o código curto e simples para manter esse processo claro. MovAv executa uma média móvel simples que pode ser usada para recuperar dados ruidosos em algumas situações. Ele funciona tomando uma média da entrada (y) em uma janela de tempo deslizante, cujo tamanho é especificado por n. Quanto maior for n, maior a quantidade de suavização do efeito de n é relativa ao comprimento do 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, vale a pena testar valores diferentes para ver o que é apropriado. Lembre-se também de que n pontos são perdidos em cada média se n for 100, os primeiros 99 pontos do vetor de entrada não contêm dados suficientes para uma média de 100pt. Isso pode ser evitado um pouco por meio de empilhamento de médias, por exemplo, o código e o gráfico abaixo comparam uma série de médias de largura de comprimento diferentes. Observe o quão suave 1010pt é comparado a uma única média de 20pt. Em ambos os casos, 20 pontos de dados são perdidos no total. Criar xaxis x1: 0.01: 5 Gerar ruído ruído Reps 4 repag ruido (randn (1, ceil (numel (x) noiseReps)), noiseReps, 1) ruim remodelar (ruído, 1, comprimento (ruído) noiseReps) Gerar ydata noise yexp ( X) 10noise (1: comprimento (x)) médias de Perfrom: y2 movAv (y, 10) 10 pt y3 movAv (y2, 10) 1010 pt y4 movAv (y, 20) 20 pt y5 movAv (y, 40) 40 pt Y6 movAv (y, 100) 100 pt Plot figura trama (x, y, y2, y3, y4, y5, y6) lenda (dados brutos, 10pt média móvel, 1010pt, 20pt, 40pt, 100pt) xlabel (x) ylabel ( Y) título (Comparação de médias móveis) movAv. m código execução função saída movAv (y, n) A primeira linha define o nome das funções, entradas e saídas. A entrada x deve ser um vetor de dados para executar a média em, n deve ser o número de pontos para executar a média sobre a saída conterá a média de dados retornada pela função. Prealocar output outputNaN (1, numel (y)) Encontrar ponto médio de n round do midPoint (n2) O trabalho principal da função é feito no loop for, mas antes de iniciar duas coisas são preparadas. Em primeiro lugar, a saída é pré-alocada como NaNs, isso serviu para duas finalidades. Em primeiro lugar, a pré-alocação é geralmente uma boa prática, pois reduz a manipulação de memória que a Matlab tem que fazer, em segundo lugar, torna muito fácil colocar os dados médios em uma saída do mesmo tamanho que o vetor de entrada. Isso significa que o mesmo xaxis pode ser usado mais tarde para ambos, o que é conveniente para plotar, alternativamente o NaNs pode ser removido mais tarde em uma linha de código (saída de saída (O midPoint variável será usado para alinhar os dados no vetor de saída. N 10, 10 pontos serão perdidos porque, para os primeiros 9 pontos do vetor de entrada, não há dados suficientes para ter uma média de 10 pontos. Como a saída será menor que a entrada, ele precisa estar alinhado corretamente. O MidPoint irá Ser usado para que uma quantidade igual de dados seja perdida no início e no final e a entrada é mantida alinhada com a saída dos buffers NaN criados ao pré-alocar a saída. Para um comprimento de 1: comprimento (y) - n Alcance do índice para levar a média Sobre (a: b) proibição Calcule o significado médio (amidPoint) mean (y (a: b)) end No loop for em si, uma média é tomada em cada segmento consecutivo da entrada. O loop será executado para a. Which is Definido como 1 até o comprimento da entrada (y), menos os dados que serão perdidos (n). Se a entrada for 100 pontos, Ng e n é 10, o loop será executado de (a) 1 a 90. Isso significa que a fornece o primeiro índice do segmento a ser calculado como média. O segundo índice (b) é simplesmente um-1. Então, na primeira iteração, a1. N10. Então b 11-1 10. A primeira média é tomada sobre y (a: b). Ou x (1:10). A média deste segmento, que é um valor único, é armazenada na saída no índice amidPoint. Ou 156. Na segunda iteração, a2. B 210-1 11. Então a média é tomada em x (2:11) e armazenada na saída (7). Na última iteração do loop para uma entrada de comprimento 100, a91. B 9010-1 100 para que a média seja tomada sobre x (91: 100) e armazenada na saída (95). Isso deixa a saída com um total de n (10) valores de NaN no índice (1: 5) e (96: 100). Exemplos e considerações As médias móveis são úteis em algumas situações, mas elas nem sempre são a melhor escolha. Aqui estão dois exemplos em que eles não são necessariamente ótimos. Calibração do microfone Este conjunto de dados representa os níveis de cada freqüência produzida por um alto-falante e registrado por um microfone com uma resposta linear conhecida. A saída do alto-falante varia com a freqüência, mas podemos corrigir esta variação com os dados de calibração - a saída pode ser ajustada em nível para explicar as flutuações na calibração. Observe que os dados brutos são ruidosos - isso significa que uma pequena alteração na freqüência parece exigir uma grande, errática, mudança no nível a ser considerada. Isso é realista Ou isso é um produto do ambiente de gravação. É razoável, neste caso, aplicar uma média móvel que suaviza a curva de freqüência de nível para fornecer uma curva de calibração ligeiramente menos errática. Mas por que isso não é ótimo neste exemplo Mais dados seriam melhores - as calibrações múltiplas correm em média, destruirão o ruído no sistema (desde que sejam aleatórias) e proporcionem uma curva com menos detalhes sutis perdidos. A média móvel só pode se aproximar disso e pode remover alguns mergulhos e picos de freqüência mais altos da curva que realmente existem. Ondas sinusoidais A utilização de uma média móvel em ondas senoticas destaca dois pontos: a questão geral de escolher um número razoável de pontos para realizar a média em excesso. É simples, mas existem métodos de análise de sinal mais eficazes do que os sinais oscilantes em média no domínio do tempo. Neste gráfico, a onda senoidal original é plotada em azul. O ruído é adicionado e plotado como a curva laranja. Uma média móvel é realizada em diferentes números de pontos para ver se a onda original pode ser recuperada. 5 e 10 pontos fornecem resultados razoáveis, mas não eliminem completamente o ruído, onde, à medida que um número maior de pontos começa a perder detalhes de amplitude, à medida que a média se estende por diferentes fases (lembre-se que a onda oscila em torno de zero e significa (-1 1) 0) . Um enfoque alternativo seria construir um filtro de passagem baixa que possa ser aplicado ao sinal no domínio da frequência. Não vou entrar em detalhes, pois vai além do escopo deste artigo, mas como o ruído é uma freqüência consideravelmente maior do que a freqüência fundamental das ondas, seria bastante fácil, neste caso, construir um filtro de passagem baixa do que remover a alta freqüência Noise. Moving Average Function resultmovingmean (data, window, dim, option) calcula uma média móvel centrada dos dados da matriz de dados usando um tamanho de janela especificado na janela em dim dimension, usando o algoritmo especificado na opção. Dim e opção são entradas opcionais e serão padrão para 1. As entradas opcionais Dim e opcional podem ser ignoradas ou podem ser substituídas por uma. Por exemplo, motionmean (dados, janela) dará os mesmos resultados como motionmean (data, window, 1,1) ou motionmean (data, window ,, 1). O tamanho e a dimensão da matriz de dados de entrada são limitados apenas pelo tamanho máximo da matriz para a plataforma. A janela deve ser um número inteiro e deve ser ímpar. Se a janela for igual, então é arredondada para baixo para o próximo número ímpar mais baixo. A função calcula a média móvel incorporando um ponto central e (janela-1) 2 elementos antes e depois na dimensão especificada. Nas bordas da matriz, o número de elementos antes ou depois é reduzido para que o tamanho real da janela seja menor do que a janela especificada. A função é dividida em duas partes, um algoritmo 1d-2d e um algoritmo 3d. Isso foi feito para otimizar a velocidade da solução, especialmente em matrizes menores (ou seja, 1000 x 1). Além disso, vários algoritmos diferentes para o problema 1d-2d e 3d são fornecidos, como em certos casos o algoritmo padrão não é o mais rápido. Isso normalmente acontece quando a matriz é muito ampla (ou seja, 100 x 100000 ou 10 x 1000 x 1000) e a média móvel está sendo calculada na menor dimensão. O tamanho em que o algoritmo padrão é mais lento dependerá do computador. MATLAB 7.8 (R2009a) Tags para este arquivo Faça login para marcar arquivos. Faça login para adicionar um comentário ou classificação. Comentários e classificações (8) A função lida com as extremidades cortando a parte traseira ou principal da janela e a transição para uma média móvel inicial ou posterior, em vez de uma centrada. Para acompanhar o exemplo que você deu no seu comentário, se o tamanho da janela for 3, então, no centro de 1, a média da função é de dados dos pontos 1 e 2 em um centro de 2 pontos 1, 2 e 3 com média de 9 Os pontos 8, 9 e 10 são calculados em média e no centro de 10 (vamos assumir que o vetor possui 10 entradas), os pontos 9 e 10 são calculados em média. Como o movimento move-se com as extremidades Começa com um tamanho de janela que abrange apenas o ponto 1 em 1, depois 3 pontos no ponto 2 e, em seguida, aumentando o tamanho da janela até que o tamanho da janela seja o especificado na entrada da função Obrigado. Agradável e simples. Obrigado. Bom trabalho muito útil como disse Stephan Wolf. Apenas o que eu estava procurando. Média móvel centrada que é capaz de trabalhar em um gráfico em toda a largura, sem ter que procurar o tamanho da janela do filtro e mover o início. Ótimo Acelerar o ritmo da engenharia e da ciência O MathWorks é o principal desenvolvedor de software de computação matemática para engenheiros e cientistas.
TEKNIK FOREX SEBENAR (TFS) Saya Khalid Hamid. Seorang FULL-TIME FOREX TRADER. Saya merupakan bekas Eksekutif Banco Antarabangsa yang pernah bertugas sebagai ANÁLISE DE MOEDA. Tugas saya ialah menganalisis pergerakan matawang yang digerakkan oleh berita-berita ekonomi. Selain itu, saya juga aktif membantu para comerciante serta menyumbangkan dicas artikel dalam forum-forum forex tempatan dan juga antarabangsa. Pengalaman sebagai analista de moeda dan keaktifan berforum selama 9 TAHUN telah banyak membentuk saya menjadi comerciante seperti yang anda lihat pada hari ini. Sebelum ini, sejak 2017 saya telah menulis 5 buah ebook berjudul TEKNIK FOREX SEBENAR V1, V2, V3, V4 dan V5. Kini, setelah melalui banyak proses penambahbaikan, ia kembali dengan lebih mantap dalam bentuk Buku amp DVD iaitu TEKNIK FOREX SEBENAR EDISI KE-6. APA ITU FOREX Kepada yang pertama kali terbaca tentang forex, istilah Forex FX diambil daripada singkatan FOR eign EX change atau Tukaran Matawang Asing. Forex merupaka...
Comments
Post a Comment