N ponto em movimento média matlab
Eu preciso calcular uma média móvel em uma série de dados, dentro de um loop for. Eu tenho que obter a média móvel em N9 dias. A matriz de computação é uma série de 365 valores (M), que em si 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 gritei um pouco sobre as médias móveis e o comando conv e encontrei algo que eu tentei implementar no meu código .: então, basicamente, eu calculo o meu significado e traço-o com uma média móvel (errada). Eu escolhi o valor de Wts diretamente do site Mathworks, então isso é incorreto. (Fonte: mathworks. nlhelpeconmoving-average-trend-estimate. html) Meu problema, porém, é que eu não entendo o que é isso. Alguém poderia explicar Se isso tem algo a ver com os pesos dos valores: isso é inválido neste caso. Todos os valores são ponderados o mesmo. E se eu estou fazendo isso inteiramente errado, eu poderia obter alguma ajuda com isso, meus mais sinceros agradecimentos. Perguntou 23 de setembro 14 às 19:05 Usando conv é uma excelente maneira de implementar uma média móvel. No código que você está usando, é o quanto você está pesando cada valor (como você adivinhou). A soma desse vetor deve ser sempre igual a uma. Se você deseja pesar cada valor de forma uniforme e fazer um tamanho N, mover o filtro, então você gostaria de fazer. Usando o argumento válido em conv resultaria em ter menos valores na Ms do que em M. Use o mesmo se você não se importar com 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 a documentação conv e cconv para obter mais informações se você não tiver. Você pode usar o filtro para encontrar uma média em execução sem usar um loop for. Este exemplo encontra a média de execução de um vetor de 16 elementos, usando um tamanho de janela de 5. 2) liso como parte da Curva Fitting Toolbox (que está disponível na maioria dos casos) yy liso (y) suaviza os dados no vetor de coluna Usando um filtro de média móvel. Os resultados são retornados no vetor da coluna yy. O intervalo padrão para a média móvel é 5.MATLABs smoooth func é basicamente o mesmo que a média em janelas deslizantes de comprimento 5., exceto a maneira como ele trata os 2 elementos em ambas as extremidades. De acordo com os documentos vinculados, esses casos limite são computados com essas fórmulas - Então, para replicar a mesma implementação em NumPyPython, podemos usar a convolução NumPys 1D para obter resumos de janela deslizantes e dividi-los pelo comprimento da janela para nos dar os resultados médios. Em seguida, basta anexar os valores tratados caso especial para os elementos de limite. Assim, teríamos uma implementação para lidar com tamanhos de janela genéricos, como assim, filtragem de domínio local em Matlab. Este tutorial é sobre o comando Matlab ldquoconvrdquo. Para descobrir o que ldquoconvrdquo faz, você pode tentar ler a ajuda online da Matlab. E verifique a explicação. (Você pode achar mais fácil copiar as linhas de comando em itálico para a janela comand Matlab usando copiar e colar.) No entanto, a menos que você conheça muito sobre matemática de engenharia, você provavelmente encontrará o Matlab ldquohelprdquo muito mais ldquoconvolutedrdquo do que ldquohelpfulrdquo. No caso improvável de que você não tenha esse problema, continue com o resto desses exercícios (caso contrário, veja se uma das pessoas que você gosta nesta classe parece perdida e pode se beneficiar de suas idéias e seu charme, ou simplesmente ir para A praia por um tempo). Agora, ldquoconvolvingrdquo é algo que fazemos para ldquosignalsrdquo, e nos sinais de Matlab são vetores. Itrsquos muitas vezes é uma boa idéia para jogar com muito pouco vetores de sinais artificiais primeiro para entender o que os comandos de processamento de sinal fazem, antes de iniciá-los em grandes sinais ldquorealrdquo. Em Matlab, letrsquos faz um brinquedo ldquodatardquo vector d com os seguintes valores: tente o seguinte O que você obtém O que você obtém Convolvendo um vetor com um ldquoscalarrdquo (ou seja, um número simples ou vetor com apenas um elemento), ldquoscalesrdquo o vetor. (Agora você sabe por que os chamam de escalares). Agora, para algo um pouco mais misterioso. Experimente cada um deles por sua vez: Whatrsquos acontecendo aqui. Pense em um vetor que é todos os zeros, exceto para um único como um ldquounit impulserdquo. Agora, se conseguimos um sinal com um impulso unitário, então não mudamos o sinal (exceto, talvez, por ldquozero paddingrdquo no final), mas podemos atrasá-lo (efetivamente, colando zeros na frente dele). Então, você pode adivinhar o que aconteceria se você tentar isso. Pense nisso primeiro, então experimente para ver se você estava correto. O que você deveria ter encontrado é que você pode combinar a escala e as propriedades de atraso do comando conv, você deve ter o sinal duas vezes maior que d, atrasado para as amostras (ou ldquotapsrdquo). Antes que possamos entender o que tudo isso tem a ver com a filtragem, precisamos de mais uma coisa. Nada de novo aqui, acabamos de atribuir o nosso ldquoimpulsesrdquo de atraso variável às variáveis Mas agora, se eu fizer E, o que, portanto, do que você deve ver é que a ab tem dois impulsos e que a convolução, portanto, contém duas cópias do sinal d, Um com zero atraso, e um atrasado por seis torneiras. Se fizermos o atraso cada vez menor, podemos fazer as cópias de reboque do sinal ldquocolliderdquo, ou sobrepor. Experimente cada um deles por sua vez: você deve ver isso, como as cópias atrasadas do sinal ldquocolliderdquo, eles adicionam. Em resumo, a convolução combina a escala, o atraso e a adição num único pacote prático. Agora, o que tem tudo a ver com a filtragem do Letrsquos, considera um exemplo relativamente simples: o filtro de média móvel. Imagine que eu quero obter um sinal de filtragem f pela filtragem média móvel de dois pontos no vetor d d (1) d (2) d (3). . O que significa que eu quero que o primeiro ponto de f seja a média dos dois primeiros pontos de d, ou seja, f (1) d (1) 2 d (2) 2. Da mesma forma eu quero f (2) d (2) 2d (3) 2 e assim por diante até f (n) d (n) 2d (n1) 2. Se você pensa sobre isso, você pode notar que f é simplesmente a soma de duas cópias de d, com a segunda cópia atrasada por uma torneira, e ambas as cópias escaladas pela metade, e ao invés de fazer isso um elemento por vez, nós Deixe conv fazer isso por nós lhe dará a versão de dois pontos em média filtrada (suavizada) de d. Agora, supostamente, esse alisamento pode ajudar a reduzir ldquonoiserdquo. Letrsquos tente isso. Primeiro, letrsquos faz um bom sinal sinusoidal: agora contaminamos o sinal com algum ruído gaussiano feio. Suavizando com conv recupera o sinal limpo. Letrsquos tente: Bem, olhando para o enredo, é claro que o filtro médio em dois pontos melhorou as coisas Apenas um pouco. Como sobre um filtro de dicionários de ldquomore Experimente a média móvel de cinco pontos (Por sinal, para os filtros de média móvel de n-pontos mais longos que n5, escrevê-los explicitamente torna-se tedioso e você achará mais fácil escrever uns (1, n) n Ao invés do explícito 1n 1n 1n. 1n) Que removeu um pouco do ruído (de modo algum tudo isso, mas itrsquos não é direto para fazer muito melhor, e é por isso que o itrsquos é bom para tentar ter pouco ruído Como possível para começar), mas se você olhar com cuidado, você verá que o sinal filtrado é realmente deslocado em relação ao sinal original (e é um pouco mais longo também). Os engenheiros elétricos diriam que o nosso filtro de média móvel de cinco batidas teve um atraso de ldquogroup de duas torneiras, e dado os exercícios anteriores com impulsos atrasados você pode ter uma pequena intuição sobre a origem desses atrasos. Esses atrasos podem ser um incômodo. Imagine que você queria medir os tempos em que ocorrem os picos. A filtragem tornaria os picos mais limpos, mas os atrasaria. Você poderia se livrar dos atrasos, jogando fora os primeiros n2 pontos do sinal de média móvel móvel de n-ponto. Matlab tem, na verdade, uma variante inteligente em conv, chamada filtfilt, que evita os atrasos executando o filtro dmdquickicddquo, uma vez que ldquoforwardrdquo, em seguida, ldquobackwardrdquo. A filtragem é, no entanto, duas vezes maior que o ldquoeffectiverdquo. Tente isso: não há atraso e o sinal filtrado é bastante suave, mas o itrsquos realmente começa a ser reduzido em amplitude. O filtro está começando a comer no sinal, bem como o ruído. Talvez a média móvel de cinco pontos seja muito se aplicada duas vezes. Quanta filtragem é ldquotoo muchrdquo Não há uma única resposta correta para isso e para obter uma apreciação adequada de quanto um filtro particular afetará quais freqüências requerem uma compreensão do processamento de sinal além desses simples exercícios introdutórios. Você pode, no entanto, obter um pouco de compreensão intuitiva se considerar o seguinte. Anteriormente, você viu que a convolução fconv (s, a), onde a é n taps long, significa que f (i) s (i) a (1) s (i1) a (2) s (i2) a (3) . S (in-1) a (n). Então, f (i) é o produto ponto ou o produto interno dos vetores a e s (i: in-1). Se você estudou álgebra linear, lembre-se de que o produto ponto mede o ldquoprojectionrdquo de s (i: in-1) em a. Mesmo se você não estudou álgebra linear, se você pensar sobre isso, você provavelmente verá que f (i) é efetivamente uma medida de quão bem o segmento de sinal s (i: in-1) está correlacionado com o filtro a. Assim, o i-ésimo ponto de tempo do sinal de filtro f (i) nos diz o quão bem o segmento de sinal original s (i: em-1) corresponde à forma de onda do filtro a. Nos exemplos que vimos até agora, nossos filtros de média móvel eram todos segmentos de linha reta. Claramente, as flutuações rápidas em um sinal correspondem a uma linha reta mais fraca do que as flutuações lentas, então os segmentos de linha reta que usamos na execução de filtragem média são exemplos de filtros de passagem baixa. Eles são um pouco como flat ldquoironsrdquo, usado para arrumar pequenas rugas no sinal. E se você pensa sobre eles dessa maneira, deve tornar-se intuitivamente claro que: um filtro de média móvel n-ponto irá suprimir fortemente as flutuações cujas freqüências têm um comprimento de onda inferior a n, mas terá muito pouco efeito em freqüências com comprimentos de onda muito maiores do que n . A convolução pode ser usada não apenas para filtragem de baixa passagem. Se formos um filtro que contenha muitas flutuações rápidas (altas freqüências), ampliará as flutuações rápidas e suprimirá as baixas. Letrsquos tente isso. Faça um nd point ldquohigh pass filterrdquo: O filtro a agora oscila o mais rápido possível na taxa de amostragem atual. O que você fará: o que você deve ver é que a amplitude do sinusoide é muito reduzida, mas as flutuações rápidas do dququo permanecem (embora não sejam afetadas) Como cheguei a1 -1 0 13 Um palpite cego, que é Não é algo que você sempre faz se você ldquoseriouslyrdquo filtrou sinais para pesquisas científicas (isto era apenas um ldquoproof de principlerdquo). Para fazer filtros ldquorealrdquo que você pode usar para sinais de alta velocidade, passagem de banda ou passagem baixa de sinal ldquorealrdquo, o Matlab oferece um comando útil chamado ldquofir2rdquo. Letrsquos ilustra seu uso com alguns dados reais do córtex auditivo. (Você pode precisar baixar o arquivo auditivo. mat abaixo e copiá-lo para o seu diretório de trabalho Matlab) Apenas observando o sinal, vemos grandes flutuações em uma escala de cerca de 120 graus de segundo, provavelmente devido a entradas sinápticas, bem como Uma pequena quantidade de ruído de alta freqüência. Digamos que queremos passar o filtro de baixa passagem para que todas as freqüências abaixo de 1 kHz não sejam afetadas, mas as freqüências mais altas são suprimidas. O comando fir2 nos dará um tal filtro, mas precisa de dois vetores, A e F, que dizem o que amplitudes queremos em que frequências. Infelizmente, podemos simplesmente especificar F em kHz, mas ter que dar como uma fração da freqüência de ldquoNyquistrdquo, que é igual à metade da nossa taxa de amostragem. Neste exemplo, a taxa de amostragem é de 12000, portanto, se quisermos manter nossas freqüências de até 2kHz, então queremos A1 para todos os 0ltFlt20006000 e A0 para 20006000ltFlt1. Por razões teóricas, não é uma boa idéia tentar fazer o filtro também ldquosteeprdquo, então, ao invés de dizer F0 20006000 20016000 1 A1 1 0 0, seríamos melhor recomendados para usar Now letrsquos faça um filtro de resposta de impulso ldquofinite de 20 pontos para estes Valores e use-o para filtrar o gráfico de dados (tempo, v) no gráfico (tempo, vfiltrado, 39r39) em espera Use o comando de zoom na janela de figura para plotar. Experimente com diferentes freqüências de corte. Como você pode usar o comando fir2 para fazer um filtro passa-alto Como você pode fazer um filtro passa-banda
Comments
Post a Comment