Eu preciso calcular uma média móvel em uma série de dados, dentro de um loop for. Eu tenho que começar a média móvel sobre N9 dias. O array Im computing in é 4 séries de 365 valores (M), que 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 gráfico. Eu pesquisei um pouco sobre as médias móveis eo comando conv e encontrei algo que eu tentei implementar no meu código. Então, basicamente, eu computo o meu médio e plotá-lo com uma média móvel (errada). Eu escolhi o valor de wts fora do site mathworks, de modo que está incorreto. (Fonte: mathworks. nl/help/econ/moving-average-trend-estimation. html) 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 dos valores: que é inválido neste caso. Todos os valores são ponderados da mesma forma. E se eu estou fazendo isso inteiramente errado, eu poderia obter alguma ajuda com ele Meus mais sinceros agradecimentos. Ask Sep 23 14 at 19:05 Usando conv é uma excelente maneira de implementar uma média móvel. No código que você está usando, wts é o quanto você está pesando cada valor (como você adivinhou). A soma desse 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 ter menos valores em Ms do que você tem em M. Use o mesmo se você não se importa os efeitos de Zero preenchimento. Se você tiver a caixa de ferramentas de processamento de sinal, você pode usar o cconv se quiser experimentar uma média móvel circular. Algo como Você deve ler o conv e cconv documentação para obter mais informações se você havent já. Você pode usar o filtro para encontrar uma média em execução sem usar um loop for. Este exemplo localiza a média em execução de um vetor de 16 elementos, usando um tamanho de janela de 5. 2) suave como parte da Caixa de Ferramentas de Ajuste de Curva (que está disponível na maioria dos casos) yy suave (y) suaviza os dados no vetor de coluna Y utilizando um filtro de média móvel. Os resultados são retornados no vetor de coluna yy. O span padrão para a média móvel é 5.Ive tem um vetor e eu quero calcular a média móvel dele (usando uma janela de largura 5). Por exemplo, se o vetor em questão for 1,2,3,4,5,6,7,8. Então a primeira entrada do vetor resultante deve ser a soma de todas as entradas em 1,2,3,4,5 (ou seja, 15) a segunda entrada do vetor resultante deve ser a soma de todas as entradas em 2,3,4, 5,6 (ie 20) etc. No final, o vetor resultante deve ser 15,20,25,30. Como eu posso fazer isso? A função conv está bem no seu beco: Três respostas, três métodos diferentes. Aqui está um benchmark rápido (diferentes tamanhos de entrada, largura de janela fixa de 5) usando timeit sinta-se livre para picar buracos nele (nos comentários), se você acha que precisa ser refinado. Conv surge como a abordagem mais rápida é cerca de duas vezes mais rápido que a aproximação moedas (usando filtro). E cerca de quatro vezes mais rápido que Luis Mendos abordagem (usando cumsum). Aqui está outro benchmark (tamanho de entrada fixo de 1e4. Largura de janela diferente). Aqui, Luis Mendos abordagem cumsum surge como o vencedor claro, porque a sua complexidade é principalmente governada pelo comprimento da entrada e é insensível à largura da janela. Conclusão Para resumir, você deve usar a abordagem conv se sua janela é relativamente pequena, use a abordagem cumsum se sua janela é relativamente grande. Código (para benchmarks) Movendo médias sobre um vetor em MatLAB Oi todos, recentemente eu tenho feito algumas análises em alguns FFTS tentando encontrar e analisar regiões com picos. Uma coisa que temos vindo a fazer para tornar este processo mais fácil é ter uma média móvel da FFT antes de analisar os picos para garantir que os picos rogue em nossas FFTs não induzir em erro o nosso processamento de sinal. No entanto, um problema que eu estou vendo é apenas como lento nossa média móvel atual é. Atualmente estamos simplesmente olhando para x pontos do lado esquerdo e x pontos no lado direito do nosso ponto atual e tendo uma média de que os dados e, em seguida, definir o mesmo índice em nosso novo vetor FFT suavizado para ser esse valor médio. Gostaria de ver se alguém sabe uma maneira lisa de realizar isso com um built-in caixa de ferramentas ou se houver uma maneira de aplicar uma função escrita personalizada para cada índice em um vetor sem um para loop. Abaixo está algum código que é semelhante ao que estamos usando atualmente para realizar o nosso processo de suavização FFT. FFTVect representa nossos valores de intensidade em uma dada freqüência. Nós estamos simplesmente tentando construir uma nova FFT suavizada que não mostra quaisquer picos finos, mas altos, que nossos FFT originais mostram. Este processo de média elimina este problema anterior à nossa análise de pico, mas a forma como estamos atualmente fazendo isso parece muito lento e desajeitado. Todas as sugestões para o índice avgWin1: comprimento (avgFFT) - avgWin avgFFT (índice) média (FFTVect (index - avgWin: indexavgWin)) final Erik Carlsten escreveu: gt Olá a todos, recentemente eu tenho feito algumas análises sobre gt alguns FFTS tentando encontrar E analisar regiões com picos. Gt Uma coisa que temos vindo a fazer para tornar este processo mais fácil gt é ter uma média móvel da FFT antes de analisar. Dependendo da caixa de ferramentas que você tem, os resultados podem variar muito, é claro. Em 1 de novembro, 12:21 pm, Erik Carlsten ltecarl. Yahoogt escreveu: gt Oi pessoal, recentemente eu tenho feito algumas análises sobre gt alguns FFTS tentando encontrar e analisar regiões com picos. Gt Uma coisa que temos vindo a fazer para tornar este processo mais fácil gt é ter uma média móvel da FFT antes de analisar gt os picos para garantir que os picos rogue em nossos FFTs não gt enganar o nosso processamento de sinal. No entanto, um problema que eu sou gt forseeing é apenas como lento nossa média móvel atual é. Gt Atualmente estamos simplesmente olhando para x pontos no lado esquerdo gt e x pontos no lado direito do nosso ponto atual gt e tendo uma média de que os dados e, em seguida, definir o mesmo índice gt no nosso novo vetor FFT suavizado para ser que Significa gt valor. Gostaria de ver se alguém sabe uma maneira lisa para gt realizar isso com um built-in toolbox função ou gt se houver uma maneira de aplicar uma função escrita personalizada para gt cada índice em um vetor sem um para loop. Gt gt Abaixo está algum código que é semelhante ao que estamos gt atualmente usando para realizar o nosso processo de suavização FFT. Gt FFTVect representa nossos valores de intensidade em uma dada freqüência gt. Estamos simplesmente tentando construir um novo gt smoothed fora FFT que não mostra qualquer picos finos, mas altos que gt nossos shows FFT original. Este processo de média elimina gt esta questão anterior à nossa análise de pico, mas a forma como estamos gt estão fazendo isso parece muito lento e desajeitado. Qualquer gt sugestões gt gt avgWin 10 gt gt avgFFT FFTvect gt gt para índice avgWin1: comprimento (avgFFT) - avgWin gt avgFFT (índice) média (FFTVect (index - gt avgWin: indexavgWin)) gt end Esta é uma convolução com a janela retangular Função 1 / N 1 / N. 1 / N. Procure CONV ou FILTER. Randy Poe ltpoespam-trapyahoogt escreveu na mensagem lt1193935442.969959.9448050g2000hsm. googlegroupsgt. Gt Em 1 de novembro, 12:21 pm, Erik Carlsten ltecarl. Yahoogt escreveu: gt gt Oi pessoal, recentemente eu tenho feito algumas análises sobre gt gt alguns FFTS tentando encontrar e analisar regiões com picos. Gt gt Uma coisa que temos vindo a fazer para tornar este processo mais fácil gt gt é ter uma média móvel da FFT antes de analisar gt gt os picos para garantir que os picos rogue em nossos FFTs não gt gt enganar o nosso processamento de sinal. No entanto, um problema que eu sou gt gt forseeing é apenas como lento nossa média móvel atual é. Gt gt Atualmente, estamos simplesmente olhando para x pontos à esquerda gt gt lado e x pontos no lado direito do nosso ponto atual gt gt e tendo uma média de que os dados e, em seguida, definir o mesmo gt gt índice no nosso novo suavizado FFT Vetor a ser que significa gt gt valor. Gostaria de ver se alguém sabe uma maneira lisa para gt gt realizar isso com um construído em função caixa de ferramentas ou gt gt se houver uma maneira de aplicar uma função escrita personalizada para gt gt cada índice em um vetor sem um para loop. Gt gt gt gt Abaixo está algum código que é semelhante ao que estamos gt gt atualmente usando para realizar o nosso processo de suavização FFT. Gt gt FFTVect representa os nossos valores de intensidade a uma determinada frequência gt gt. Estamos simplesmente tentando construir um novo gt tmp gt para fora FFT que não mostra qualquer picos finos, mas altos que gt gt nossos shows originais FFT. Este processo de média elimina gt gt esta questão anterior à nossa análise de pico, mas a forma como gt gt estão fazendo atualmente parece muito lento e desajeitado. Qualquer gt gt sugestões gt gt gt gt avgWin gt gt gt gt avgFFT gt gt gt gt para o índice avgWin1: comprimento (avgFFT) - avgWin gt gt avgFFT (índice) média (FFTVect (gt índice gt avgWin: indexavgWin)) gt Gt end gt gt Esta é uma convolução com a função de janela gt retangular 1 / N 1 / N. 1 / N. Procure gt CONV ou FILTER. Gt gt - Randy gt Apenas um pensamento aqui, se você está convolvendo com uma janela retangular no domínio da freqüência, não é simplesmente uma multiplicação com uma função de sincronização no domínio do tempo, que deve ser muito mais rápido. Por que não apenas encurtar o comprimento do fft para que os compartimentos resultantes são mais largos Você também teria mais seções a média se você está formando um periodograma. Malcolm Lidierth ltku. ca. lckhtreidil. mloclamgt escreveu na mensagem ltfgd391kds1fred. mathworksgt. Gt Por que não apenas encurtar o comprimento do fft para que as caixas gt resultante são mais largos Você teria, então, também tem mais seções para gt média, se você está formando um periodograma. Quando estou tomando a média da minha FFT, eu não estou realmente tendo uma média de toda a FFT. O FFT inteiro mostra um domínio de freqüência de 0-3600Hz e estou interessado apenas na forma da FFT para freqüências entre 100-400Hz. Eu vou, é claro, só ter uma média móvel da faixa 100-400Hz para as considerações de velocidade, mas eu estava apenas jogando esta questão geral lá fora, para ver se alguém tinha alguma idéia sobre como ir sobre a tomada da média móvel de um vetor. Malcolm Lidierth ltku. ca. lckhtreidil. mloclamgt escreveu na mensagem ltfgd391kds1fred. mathworksgt. Gt Por que não apenas encurtar o comprimento do fft para que as caixas gt resultante são mais largos Você teria, então, também tem mais seções para gt média, se você está formando um periodograma. Acho que entendi mal o que você quis dizer durante a minha primeira resposta. Você está se referindo simplesmente a mudar a resolução geral quando eu converter meus dados sobre o domínio do tempo em uma FFT Assim, minha FFT retorna um vetor sobre o domínio de freqüência de dizer 2048 caixas em vez de 4096 para a FFT parece ser mais suave Em 1 de novembro , 1:15 pm, Dave Robinson ltdave. robin. Somewhere. bizgt escreveu: gt Randy Poe ltpoespam-t. Yahoogt escreveu na mensagem gt lt1193935442.969959.94. 50g2000hsm. googlegroupsgt. Gt gt gt Em 1 de novembro, 12:21, Erik Carlsten ltecarl. Yahoogt gt escreveu: gt gt gt Oi pessoal, recentemente eu tenho feito algumas análises sobre gt gt gt alguns FFTS tentando encontrar e analisar regiões com picos. Gt gt gt Uma coisa que temos vindo a fazer para tornar este processo mais fácil gt gt gt é ter uma média móvel da FFT antes de analisar gt gt gt os picos para garantir que os picos rogue em nossos FFTs não gt gt gt induzir em erro o nosso processamento de sinal . No entanto, um problema que eu sou gt gt gt forseeing é apenas como lento nossa média atual gt é. Gt gt gt Atualmente, estamos simplesmente olhando para x pontos à esquerda gt gt gt lado e x pontos no lado direito do nosso ponto atual gt gt gt e tendo uma média de que os dados e, em seguida, definir o mesmo gt gt gt índice na nossa Novo suavizado vetor FFT para ser que significa gt gt gt valor. Gostaria de ver se alguém conhece um caminho liso gt gt gt gt realizar isso com um construído em caixa de ferramentas função gt ou gt gt gt se houver uma maneira de aplicar uma função escrita personalizada para gt gt gt cada índice em um vetor Sem um loop for. Gt gt gt gt Abaixo está algum código que é semelhante ao que estamos gt gt gt atualmente usando para realizar o nosso processo de suavização FFT. Gt gt gt FFTVect representa os nossos valores de intensidade numa determinada frequência de gt gt gt. Estamos simplesmente tentando construir um novo gt gt gt para fora FFT que não mostra qualquer picos finos, mas altos gt que gt gt gt nossa FFT original mostra. Este processo de média gt elimina gt gt gt esta questão anterior à nossa análise de pico, mas a forma como gt gt gt estão fazendo atualmente parece muito lento e desajeitado. Qualquer gt gt gt sugestões gt gt gt gt avgWin gt gt gt avgFFT FFTvect gt gt gt gt para índice avgWin1: comprimento (avgFFT) - avgWin gt gt gt avgFFT (índice) média (FFTVect (index - gt gt avgWin: indexavgWin )) Gt gt gt gt gt gt Esta é uma convolução com a função de janela gt gt rectangular 1 / N 1 / N. 1 / N. Procure gt gt CONV ou FILTER. Gt gt Apenas um pensamento aqui, se você está convolvendo com uma janela rectangular gt no domínio da freqüência, não é que gt simplesmente uma multiplicação com uma função de sincronização no tempo gt domínio, que deve ser muito mais rápido. Eu acredito que CONV e FILTER ambos usam essa abordagem, mas fazer todo o índice de contabilidade para você. É por isso que eu sugeri-los. Eu posso estar errado em CONV no entanto, porque ele acrescenta esses elementos extras no início e no final. Erik Sim. Reduzir o comprimento da FFT permite que você divida os dados em mais seções. Isso não reduz o ruído de cada FFT - menos pontos, mas também menos, então o coeficiente de variação permanece em 100. No entanto, a média das FFTs diminui o ruído pela raiz quadrada do número de seções de dados (ou seja, FFTs) . Esta é a base da função PWELCH na Caixa de Ferramentas de Processamento de Sinal. Veja nrbook / a / bookcpdf. php Capítulo 13. Filtrando os dados como você sugere pode ser OK, mas depende de como você corrigiu a janela: se você tem uma densidade espectral OK, mas se é um espectro, então apenas os picos No seu resultado são significativos. Veja rssd. esa. int/SP/LISAPATHFINDER/docs/DataAnalysis /GHFFT. pdf Muito obrigado a todos que responderam. Eu acabei usando filter () para a minha solução e diminuiu o tempo na minha média de execução por mais de um fator de 200. Escusado será dizer que isso é exatamente o que eu estava procurando windowSize avgWin21 avgFFTNoise filtro (uns (1, windowSize) / windowSize , 1. rangeMinusNoiseY (cutIndexRangeavgWin)) Obrigado Randy para a sugestão de usar filter () para ter a média em execução que funcionou muito bem Em 2 de novembro, 3:38 pm, Erik Carlsten ltecarl. Gmailgt escreveu: gt Muito obrigado a todos que responderam. Eu acabei usando gt usando filter () para a minha solução e diminuiu o tempo gt na minha média em execução em mais de um fator de 200. Needless to gt dizer isso é exatamente o que eu estava procurando gt gt windowSize avgWin21 gt avgFFTNoise filtro (ones 1, windowSize) / windowSize, 1. gt rangeMinusNoiseY (cutIndexRangeavgWin)) gt gt Obrigado Randy pela sugestão de usar filter () para pegar gt a média em execução funcionou muito bem Se eu entender corretamente isso pode ser implementado de forma muito eficiente. Pense nisso dessa maneira, depois que você calculou a média de todas as amostras em sua janela, em seguida, movê-lo um ponto para a frente. Tudo o que realmente faz é adicionar uma nova amostra à sua média e subtrair a última. Isso significa que você tem um filtro de integração e um filtro de diferenciação, com um atraso, e não multiplica. Esta é a idéia básica por trás dos filtros CIC, apenas sem a dizimação. Olhe para cima filtros CIC e você deve ter a idéia, eu achei parte de Fred Harris Multirate livro on-line tinha a melhor explicação, mas eu não posso encontrá-lo agora. O que é uma lista de observação Você pode pensar em sua lista de observação como segmentos que você tem marcado. 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 quotadd para assistir ligação listquot na parte inferior de qualquer página. Como adicionar um item à minha lista de observação 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. Para adicionar um autor à sua lista de observação, vá para a página de perfil de autores e clique no quotAdicionar este autor ao meu link de lista de observações na parte superior 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. Para adicionar um tópico à sua lista de observação, vá para a página do tópico e clique no link quotAdicionar 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 forma a permitir que você leia 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 de correio 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 / ng. phppage2 Selecione seu país
No comments:
Post a Comment