Tuesday 31 October 2017

Moving average matlab code


Criado em quarta-feira, 08 de Outubro de 2008 20:04 Última atualização em Quinta, 14 Março 2017 01:29 Escrito por Batuhan Osmanoglu Hits: 38880 Média móvel Em Matlab Muitas vezes eu me encontro na necessidade de calcular a média dos dados que tenho para reduzir o ruído um pouco pouco. Eu escrevi funções de casal para fazer exatamente o que eu quero, mas matlabs construído em função de filtro funciona muito bem também. Aqui Ill escrever sobre 1D e 2D média dos dados. 1D filtro 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 do 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 o filtro funciona, você pode digitar: Aqui está uma implementação rápida e suja de um filtro de média móvel 16 por 16. Primeiro precisamos definir o filtro. Uma vez que tudo o que queremos é a contribuição igual de todos os vizinhos, podemos apenas usar a função uns. Nós dividimos tudo com 256 (1616) desde que nós não queremos mudar 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 Azimuth é mapeado no eixo X. O filtro tinha 4 pixels de largura em Alcance e 16 pixels de largura em Azimute. Login SearchUsing MATLAB, como posso encontrar a média móvel de 3 dias de uma coluna específica de uma matriz e anexar a média móvel para a matriz que eu 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 a e máscara: Eu 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 desejo é dada na seguinte matriz: Se você tiver alguma sugestão, eu gostaria muito. Obrigado 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 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 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 39valid39 não será mostrada até pelo menos 17, 14 e 11. Espero que isso faz sentido ndash Aaron Jun 12 13 em 1:28 1 Resposta Em geral, seria útil 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) Segundo, 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 o mesmo: mas isso não se parece com o que você quer. Em vez disso você é forçado a usar um par de linhas: média móvel Olá Steve Amphlett, muito obrigado pela sua resposta. Bem, eu tenho um fluxo de dados e eu gostaria de média dos dados a cada 60 segundos Eu não preciso remodelar o tamanho da janela Eu preciso manter a janela fixa. Por exemplo, tenho este conjunto de dados: Time PatientIndex 11:36:34 0.83741 11:36:35 0.83741 11:36:36 1.07294 11:36:37 1.18611 11:36:38 1.18611 11:36:39 1.18611 11:36 : 40 1.32703 11:36:41 1.32703 11:36:42 1.32703 11:36:43 1.32703 11:36:44 1.32703 11:36:45 1.32703 11:36:46 1.32703 11:36:47 1.32703 11:36:48 1.32703 11:36:49 1.32703 11:36:50 1.32703 11:36:51 1.32703 11:36:52 1.32703 11:36:53 1.32703 11:36:54 1.49615 11:36:55 1.54860 11:36:56 1.54860 11 : 36: 57 1.54860 11:36:58 1.54860 11:36:59 1.54860 11:37:00 1.54860 11:37:01 1.54860 11:37:02 1.54860 11:37:03 1.54860 11:37:04 1.49615 11:37 : 05 1.49615 11:37:06 1.49615 11:37:07 1.49615 11:37:08 1.49615 11:37:09 1.49615 11:37:10 1.49615 11:37:11 1.49615 11:37:12 1.49615 Eu preciso médio PatientIndex A cada 60 segundos, espero ter ficado claro. Sinta por favor livre contatar-me para todas as perguntas mais adicionais. Eu estarei esperando sua resposta Espero que você possa me ajudar com isso. Obrigado antecipadamente, Sam escreveu: gt gt gt Oi Steve Amphlett, muito obrigado pela sua resposta. Bem, eu tenho um fluxo gt de dados e eu gostaria de média dos dados a cada 60 gt segundos gt Eu não preciso remodelar o tamanho da janela Eu preciso manter a janela gt fixo. Por exemplo eu tenho este conjunto de dados: gt ltsnip, os dados gt Eu preciso de média PatientIndex a cada 60 segundos Espero ter feito gt-me claro. Então você quer reduzir seu amonut de dados de um valor por segundo para um valor médio por minuto Se assim você fizer algo como este: dados seus dados n comprimento (data / 60) Número de médias datareshape (data, 6, N) Então é só um caso de trabalhar nas colunas. Por exemplo: Você pode usar nanmean () da caixa de ferramentas stats para obter os meios: meansnanmean (dados) Untested - Eu não tenho essa TB E algo assim para Nan os valores ruins: dados) gt12 Locais de gt20 NaNs significa (nans ) Nan Olá Steve Amphlett, muito obrigado pela sua resposta. Uma outra pergunta como eu seria capaz de traçar um gráfico de PatientIndex contra o tempo. Desculpe, não estou muito familiarizado com matlab, ou seja, Como traçar o seguinte: Time PatientIndex 11:36:34 0.83741 11:36:35 0.83741 11:36:36 1.07294 11:36:37 1.18611 11:36:38 1.18611 11:36:39 1.18611 11:36:40 1.32703 11:36:41 1.32703 11:36:42 1.32703 11:36:43 1.32703 11:36:44 1.32703 11:36:45 1.32703 11:36:46 1.32703 11:36:47 1.32703 11:36:48 1.32703 11: 36:49 1.32703 11:36:50 1.32703 11:36:51 1.32703 11:36:52 1.32703 11:36:53 1.32703 11:36:54 1.49615 11:36:55 1.54860 11:36:56 1.54860 11:36: 57 1.54860 Estou ansioso para a sua resposta. Obrigado antecipadamente, Oi Steve Eu tentei o seu caminho, mas por algum motivo não funcionou eu não tenho certeza se eu fiz algo errado. Bem, eu escrevi um código e gostaria que você verificá-lo e ver se o seu ok e ele faz a média corretamente mais de 60 segundos. (F) (f) f (f, f) f (f) f (f) f (f) Erro) dados de entrada vazios ou N nulo.)) Return if (N 1) out no gráfico (t. Out) xlabel (Time (sec)) ylabel (Índice de Paciente (BSI)) title (BioSign0004 PatientID 0126 17/10/2006 ) Return end if if (N gt (2 (nx - 1))) fora nanmean (in) ones (tamanho (in)) return end if out zeros (tamanho (in)) nans sum (in for i 1. nx, Se (i - m) lt 1) ((im) lt nx) fora (i) nanmean (em (1 im)) elseif (i - m) gt 1) ) Nano (em (i - m. Im)) elseif (i - m) gt 1) ((im) gt nx) ) Lt 1) ((im) gt nx) fora (i) nanmean (in (1.nx)) elseif (nans gt 12) fora (i) nanmean (in) (BioSign0004 PatientID 0126 17/10/2006) Você pode pensar na sua lista de observação como segmentos que você marcou. Você pode adicionar tags, autores, threads e até mesmo resultados de pesquisa à sua lista de observação. Desta forma, você pode facilmente acompanhar os tópicos que você está interessado polegadas Para ver a sua lista de observação, clique no link quotMas newsreaderquot. Para adicionar itens à sua lista de observação, clique no link quotadd para assistir listquot na parte inferior de qualquer página. Como adicionar um item à minha lista de observação Pesquisa Para adicionar critérios de pesquisa à sua lista de observação, pesquise o termo desejado na caixa de pesquisa. Clique no botão quotAdicionar esta pesquisa ao meu link de listagem de visualizações na página de resultados de pesquisa. Você também pode adicionar uma tag à sua lista de observação procurando a tag com a diretiva quottag: tagnamequot onde tagname é o nome da tag que você gostaria de assistir. Autor Para adicionar um autor à sua lista de observação, vá para a página de perfil dos autores e clique no botão quotAdicionar este autor ao meu link de lista de observação no topo da página. Você também pode adicionar um autor à sua lista de observação, indo a um tópico que o autor postou e clicando no quotAdicionar este autor ao meu link listquot do relógio. Você será notificado sempre que o autor fizer um post. Tópico Para adicionar um tópico à sua lista de observação, vá para a página de discussão e clique no link Adicionar este tópico ao meu link de lista de atalhos na parte superior da página. Sobre Newsgroups, Newsreaders e MATLAB Central O que são newsgroups Os newsgroups são um fórum mundial aberto a todos. Grupos de notícias são usados ​​para discutir uma enorme variedade de tópicos, fazer anúncios e trocar arquivos. As discussões são encadeadas ou agrupadas de uma forma que lhe permite ler uma mensagem postada e todas as suas respostas em ordem cronológica. Isto torna mais fácil seguir o fio da conversa e ver whatrsquos já foi dito antes de postar sua própria resposta ou fazer uma nova postagem. O conteúdo do grupo de notícias é distribuído por servidores hospedados por várias organizações na Internet. As mensagens são trocadas e gerenciadas usando protocolos de padrão aberto. Nenhuma entidade única ldquoownsrdquo os newsgroups. Existem milhares de newsgroups, cada um abordando um único tópico ou área de interesse. O MATLAB Central Newsreader publica e exibe mensagens no newsgroup comp. soft-sys. matlab. Como faço para ler ou publicar nos newsgroups Você pode usar o leitor de notícias integrado no site da MATLAB Central para ler e publicar mensagens neste newsgroup. MATLAB Central é hospedado por MathWorks. As mensagens enviadas através do Central Newsreader do MATLAB são vistas por todos os grupos de notícias, independentemente de como eles acessam os grupos de notícias. Há várias vantagens em usar o MATLAB Central. Uma Conta A sua conta do MATLAB Central está ligada à sua Conta MathWorks para facilitar o acesso. Use o endereço de e-mail da sua escolha O MATLAB Central Newsreader permite que você defina um endereço de e-mail alternativo como seu endereço de postagem, evitando a confusão na sua caixa postal principal e reduzindo o spam. Controle de Spam A maioria de spam do newsgroup é filtrada para fora pelo newsreader central de MATLAB. Marcação As mensagens podem ser marcadas com um rótulo relevante por qualquer usuário conectado. As tags podem ser usadas como palavras-chave para encontrar arquivos particulares de interesse ou como uma maneira de categorizar suas postagens marcadas. Você pode optar por permitir que outras pessoas visualizem suas tags e você pode exibir ou pesquisar outras tags, bem como as da comunidade em geral. Tagging fornece uma maneira de ver tanto as grandes tendências e as menores, mais obscuras idéias e aplicações. Listas de vigilância A configuração de listas de observação permite que você seja notificado das atualizações efetuadas nas postagens selecionadas por autor, segmento ou qualquer variável de pesquisa. As notificações da sua lista de observações podem ser enviadas por email (resumo diário ou imediato), exibidas em Meu leitor de notícias ou enviadas via feed RSS. Outras maneiras de acessar os grupos de notícias Use um leitor de notícias através de sua escola, empregador ou provedor de serviços de internet Pagar pelo acesso de grupos de notícias de um provedor comercial Usar Grupos do Google Mathforum. org fornece um leitor de notícias com acesso ao grupo de notícias comp. soft sys. matlab Execute seu próprio servidor. Para obter instruções típicas, consulte: slyck / ngpage2 Select Your CountryDocumentation tsmovavg saída tsmovavg (tsobj, s, lag) retorna a média móvel simples para o objeto da série temporal financeira, tsobj. Lag indica o número de pontos de dados anteriores usados ​​com o ponto de dados atual ao calcular a média móvel. A saída tsmovavg (vetor, s, lag, dim) retorna a média móvel simples para um vetor. Lag indica o número de pontos de dados anteriores usados ​​com o ponto de dados atual ao calcular a média móvel. A saída tsmovavg (tsobj, e, timeperiod) retorna a média móvel ponderada exponencial para a série de tempo financeiro objeto, tsobj. A média móvel exponencial é uma média móvel ponderada, em que timeperiod especifica o período de tempo. As médias móveis exponenciais reduzem o desfasamento aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos pondera o preço mais recente em 18,18. Percentual Exponencial 2 / (TIMEPER 1) ou 2 / (WINDOWSIZE 1). Saída tsmovavg (vetor, e, timeperiod, dim) retorna a média móvel ponderada exponencial para um vetor. A média móvel exponencial é uma média móvel ponderada, em que timeperiod especifica o período de tempo. As médias móveis exponenciais reduzem o desfasamento aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos pondera o preço mais recente em 18,18. (2 / (intervalo de tempo 1)). A saída tsmovavg (tsobj, t, numperiod) retorna a média móvel triangular para a série de tempo financeiro objeto, tsobj. A média móvel triangular alisa os dados. Tsmovavg calcula a primeira média móvel simples com a largura da janela de ceil (numperíodo 1) / 2. Em seguida, calcula uma segunda média móvel simples na primeira média móvel com o mesmo tamanho de janela. Saída tsmovavg (vetor, t, numperiod, dim) retorna a média móvel triangular para um vetor. A média móvel triangular alisa os dados. Tsmovavg calcula a primeira média móvel simples com a largura da janela de ceil (numperíodo 1) / 2. Em seguida, calcula uma segunda média móvel simples na primeira média móvel com o mesmo tamanho de janela. A saída tsmovavg (tsobj, w, weights) retorna a média móvel ponderada para o objeto da série temporal financeira, tsobj. Fornecendo pesos para cada elemento na janela em movimento. O comprimento do vetor de peso determina o tamanho da janela. Se fatores de peso maiores forem usados ​​para preços mais recentes e fatores menores para preços anteriores, a tendência é mais responsiva a mudanças recentes. A saída tsmovavg (vetor, w, pesos, dim) retorna a média móvel ponderada para o vetor fornecendo pesos para cada elemento na janela em movimento. O comprimento do vetor de peso determina o tamanho da janela. Se fatores de peso maiores forem usados ​​para preços mais recentes e fatores menores para preços anteriores, a tendência é mais responsiva a mudanças recentes. A saída tsmovavg (tsobj, m, numperiod) retorna a média móvel modificada para o objeto da série de tempo financeiro, tsobj. A média móvel modificada é semelhante à média móvel simples. Considere o argumento numperiod como o atraso da média móvel simples. A primeira média móvel modificada é calculada como uma média móvel simples. Os valores subseqüentes são calculados adicionando o novo preço e subtraindo a última média da soma resultante. A saída tsmovavg (vetor, m, numperiod, dim) retorna a média móvel modificada para o vetor. A média móvel modificada é semelhante à média móvel simples. Considere o argumento numperiod como o atraso da média móvel simples. A primeira média móvel modificada é calculada como uma média móvel simples. Os valores subseqüentes são calculados adicionando o novo preço e subtraindo a última média da soma resultante. Dim 8212 dimensão para operar ao longo de inteiro positivo com valor 1 ou 2 Dimensão para operar ao longo, especificado como um inteiro positivo com um valor de 1 ou 2. dim é um argumento de entrada opcional, e se não for incluído como uma entrada, o padrão Valor 2 é assumido. O padrão de dim 2 indica uma matriz orientada a linha, em que cada linha é uma variável e cada coluna é uma observação. Se dim 1. a entrada é assumida como sendo um vetor de coluna ou uma matriz orientada a coluna, onde cada coluna é uma variável e cada linha uma observação. E 8212 Indicador para vetor de caracteres de média móvel exponencial A média móvel exponencial é uma média móvel ponderada, em que timeperiod é o período de tempo da média móvel exponencial. As médias móveis exponenciais reduzem o desfasamento aplicando mais peso aos preços recentes. Por exemplo, uma média móvel exponencial de 10 períodos pondera o preço mais recente em 18,18. Porcentagem Exponencial 2 / (TIMEPER 1) ou 2 / (WINDOWSIZE 1) período de tempo 8212 Comprimento do período de tempo inteiro não negativo Selecione seu paísMoving Average Filter (MA filter) Carregando. O filtro de média móvel é um simples filtro Low Pass FIR (Finite Impulse Response) comumente usado para suavizar uma matriz de dados / sinal amostrados. Ele toma M amostras de entrada de cada vez e pegue a média dessas M-amostras 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 nítidas nos dados são feitas cada vez mais sem corte. Isto implica que este filtro tem excelente resposta no domínio do tempo mas uma resposta de frequência pobre. O filtro MA executa três funções importantes: 1) Toma M pontos de entrada, calcula a média desses pontos M e produz um único ponto de saída 2) Devido à computação / cálculos envolvidos. O filtro introduz uma quantidade definida de atraso 3) O filtro age como um Filtro de Passagem Baixa (com fraca resposta de domínio de freqüência e uma boa resposta de domínio de tempo). Código Matlab: O código matlab seguinte simula a resposta no domínio do tempo de um filtro M-point Moving Average e também traça a resposta de freqüência para vários comprimentos de filtro. Time Domain Response: 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 figura a seguir é a resposta de saída de um filtro de média móvel de 3 pontos. Pode-se deduzir da figura que o filtro de média móvel de 3 pontos não fez muito na filtragem do ruído. Aumentamos os toques do filtro para 51 pontos e podemos ver que o ruído na saída reduziu muito, o que é mostrado na próxima figura. Nós aumentamos as derivações para 101 e 501 e podemos observar que mesmo que o ruído seja quase zero, as transições são drasticamente ditas (observe a inclinação em ambos os lados do sinal e compare-as com a transição ideal da parede de tijolo em Nossa entrada). Resposta de Freqüência: A partir da resposta de freqüência pode-se afirmar que o roll-off é muito lento ea atenuação de banda de parada não é boa. Dada esta atenuação de banda de parada, claramente, o filtro de média móvel não pode separar uma banda de freqüências de outra. Como sabemos que um bom desempenho no domínio do tempo resulta em mau desempenho 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 passa-baixa excepcionalmente ruim (a ação no domínio da freqüência) Links externos: Livros recomendados: Barra lateral principal

No comments:

Post a Comment