Sunday 12 November 2017

Moving Average Savitzky Golay


Savitzky Golay Filtro Descrição O SavitzkyGolayFilter implementa um filtro Savitzky-Golay. O SavitzkyGolayFilter é parte dos módulos de pré-processamento. Um exemplo de um sinal (onda senoidal a 0.1Hz, 0.5Hz, 1Hz, 2Hz, 4Hz e 8Hz) foi filtrada usando um filtro Savitzky-Golay. O número de pontos da mão esquerda e direita para o filtro foi definido como 15. O sinal vermelho é o sinal bruto e o sinal verde é o sinal filtrado. O sinal e os dados filtrados foram gerados usando o código de exemplo abaixo. Observe que o filtro remove a maior parte do ruído adicionado à onda senoidal, ao mesmo tempo que mantém os sinais de freqüência mais alta. Outras técnicas de filtragem, como um filtro de média móvel, por exemplo, geralmente achatam os sinais de freqüência mais alta. SavitzkyGolayFilterExampleImage1.jpg Vantagens O filtro de suavização SavitzkyGolay é um filtro que essencialmente executa uma regressão polinomial local (de grau k) em uma série de valores (de pelo menos k1 pontos que são tratados como sendo igualmente espaçados na série) para determinar o valor suavizado Para cada ponto. A principal vantagem desta abordagem é que ela tende a preservar as características da distribuição, tais como máximos relativos, mínimos e largura, que geralmente são achatadas por outras técnicas de média adjacentes (como um filtro de média móvel, por exemplo). Desvantagens A principal desvantagem do SavitzkyGolayFilter é que uma pequena quantidade de experimentação é normalmente necessária para encontrar os valores de filtro apropriados necessários para melhor filtrar um sinal específico. Exemplo de código GRT SavitzkyGolayFilter Exemplo Este exemplo demonstra como criar e usar o módulo de préprocessamento GRT SavitzkyGolayFilter. O SavitzkyGolayFilter implementa um filtro médio de filtro Savitzky-Golay. Neste exemplo, criamos uma instância de um SavitzkyGolayFilter e usamos isso para filtrar alguns dados falsos, gerados a partir de uma série de ondas seno (com freqüência crescente variando de 0.1Hz a 8Hz). O sinal de teste e os sinais filtrados são salvos em um arquivo (para que você possa traçar os resultados em Matlab, Excel, etc., se necessário). Este exemplo mostra como: - Criar uma nova instância do SavitzkyGolayFilter com um tamanho específico do ponto da mão esquerda e direita para um sinal de 1 dimensão - Filtrar alguns dados usando o SavitzkyGolayFilter - Salve as configurações do SavitzkyGolayFilter em um arquivo - Carregue as configurações do SavitzkyGolayFilter a partir de um arquivo Include quotGRT. hquot usando namespace GRT int main 40 int argc. Const char argv 91 93 41 123 Crie uma nova instância de um filtro SavitzkyGolayFilter, definindo o número de pontos da mão esquerda e direita para 15 SavitzkyGolayFilter sgf 40 15. 15 41 Crie alguns varaibles para ajudar a gerar os dados do sinal const UINT numSeconds 60 O número De segundos de dados que queremos gerar duplo t 0 Isso mantém o tempo do dobro tStep 1.0 1000.0 Isto é o quanto o tempo será atualizado em cada iteração no circuito duplo duplo freq 0 Armazena o mapa de freqüência lt UINT. Double gt freqRates Possui o mapa de taxas de freqüência lt UINT. Duplo gt. Iterator iter Um iterador para o mapa de taxas de freqüência Aleatório aleatório Adicione as taxas de freqüência O primeiro valor é o tempo em segundos e o segundo valor é a freqüência que deve ser configurada nesse horário freqRates 91 0 93 0.1 freqRates 91 10 93 0.5 freqRates 91 20 93 1 freqRates 91 30 93 2 freqRates 91 40 93 4 freqRates 91 50 93 8 Crie e abra um arquivo para salvar o arquivo de dados fstream. Abra 40 quotSavitzkyGolayFilterData. txtquot. Iostream. 41 Gerar o sinal e filtrar os dados para 40 UINT i 0 i lt numSeconds 1000 i 41 123 Verifique se devemos atualizar a taxa de freq para o próximo valor iter freqRates. Encontre 40 i 1000 41 se 40 iter freqRates. Final 40 41 41 123 Defina o novo valor de freqüência freq iter - gt second 125 Gerar o sinal duplo sinal sin 40 t TWOPI freq 41 aleatório. GetRandomNumberGauss 40 0. 0.02 41 Filtra o sinal double filterValue sgf. Filtro 40 sinal 41 Escreva o sinal e os dados filtrados para o arquivo de arquivo ltlt sinal ltlt quot tt ltlt filterValue ltlt endl Atualize o t t tStep 125 Feche o arquivo de arquivo. Fechar 40 41 Salve as configurações do filtro em um arquivo sgf. SaveSettingsToFile 40 quotSavitzkyGolayFilterSettings. txtquot 41 Podemos então carregar as configurações mais tarde, se necessário sgf. LoadSettingsFromFile 40 quotSavitzkyGolayFilterSettings. txtquot 41 return EXITSUCCESS 125Savitzky-Golay Suavização em C Savitzky-Golay suavização efetivamente elimina o ruído do sinal local, preservando a forma do sinal. Comumente, it8217s utilizados como um passo de pré-processamento com dados experimentais, especialmente os dados de espectrometria, por causa da eficácia dessa doença na remoção de variação aleatória ao degradar minimamente o conteúdo da informação do sinal8217s. O Savitzky-Golay resume-se a uma operação de correlação rápida (multi-core scaling) e, portanto, pode ser usado em um ambiente em tempo real ou em grandes conjuntos de dados de forma eficiente. Se a informação de ordem superior for necessária do sinal, Savitzky-Golay também pode fornecer derivadas suavizadas de alta qualidade de um sinal ruidoso. Savitzky-Golay suaviza localmente um sinal ajustando um polinômio, em um sentido de mínimos quadrados, a uma janela deslizante de dados. O grau do polinômio e o comprimento da janela deslizante são os dois parâmetros de ajuste do filter8217s. Se n é o grau do polinômio que estamos ajustando, e k é a largura da janela deslizante, então é necessário para o comportamento de suavização (devemos evitar um sistema excessivamente determinado). Normalmente, n é 3 ou 4, e k depende do tamanho em amostras das características ruidosas a serem suprimidas no seu conjunto de dados. Para o caso de n0, o filtro Savitzy-Golay degenera para um filtro médio móvel 8211 que é bom para remover o ruído branco, mas é pobre para preservar a forma do pico (momentos de ordem superior). Para n1, o filtro faz um ajuste linear de mínimos quadrados dos dados com janelas para uma linha. Se nk-1, o polinômio exatamente se encaixa no ponto de dados na janela e, portanto, nenhuma filtragem ocorre. Uma vez que o polinômio está em forma, então (normalmente) o ponto de dados central nesta janela é substituído pelo valor do polinômio nesse local. A janela então desliza para a amostra certa e o processo é repetido. Savizky-Golay oferece a surpresa inesperada de que os coeficientes de montagem polinomial são constantes para um dado n e k. Isso significa que, uma vez que corrigimos n e k para o nosso filtro, os coeficientes de montagem polinomial Savizky-Golay são computados uma vez durante a configuração e, em seguida, usados ​​em todo o conjunto de dados. É por isso que o Savizky-Golay é um filtro de correlação de alto desempenho. Exemplo de comparação As três imagens a seguir mostram alguns dados experimentais reais e uma comparação de dois algoritmos de filtragem. A primeira imagem mostra os dados brutos, a segunda imagem mostra o efeito de um filtro de média e a última imagem demonstra um filtro de suavização Savitzky-Golay de comprimento cinco. O filtro de média introduz um grande erro na localização do pico alaranjado, enquanto que Savitzky-Golay remove o ruído enquanto mantém a localização do pico. Computacionalmente, eles requerem esforço idêntico. Savitzky-Golay Smoothing em C O filtro de suavização Savitzky-Golay é implementado no pacote NMath-Stats como um filtro de correlação generalizado. Qualquer coeficiente de filtro pode ser usado com este filtro de janela em movimento, os coeficientes de Savitzky-Golay são apenas uma possibilidade. O filtro de janela móvel também não exige que a filtragem ocorra no centro da janela deslizante, então, ao especificar a janela, são necessários dois parâmetros: número para a esquerda e número à direita do ponto de dados filtrados. Aqui estão os principais componentes do software. MovingWindowFilter. SavitzkyGolayCoefficients (nLeft, nRight, PolyDeg) MovingWindowFilter (nLeft, nRight, Coefficients) MovingWindowFilter. Filter (dados, opções de limite) A primeira é uma função estática para gerar os coeficientes de Savizky-Golay, a segunda é a classe de filtragem que leva os coeficientes gerados No construtor. O terceiro é o método que faz a filtragem Savitzky-Golay executando uma correlação cruzada entre os dados os coeficientes salvos. Abaixo está um exemplo de código completo para copiar e experimentar com seus próprios conjuntos de dados. Apenas são necessárias três linhas de código para criar o filtro e realmente fazer a filtragem. O código restante cria um sinal sinistro sinistro para filtrar e exibe os resultados. Addendum 8211 Coeficientes Savitzky-Golay Se você deseja experimentar rapidamente o alisamento Savitzky-Golay sem calcular os coeficientes, ou apenas comparar coeficientes, aqui estão alguns coeficientes para uma janela deslizante de comprimento cinco. Eles também fornecem alguma visão sobre a relação entre os coeficientes e o comportamento do filtro. Outro exemplo de suavização em dados reais Este é outro exemplo de suavização Savitzky-Golay em alguns dados experimentais. Se fosse desejado mais alisamento, uma janela de filtragem mais longa poderia ter sido usada. Para responder a sua pergunta se eu tive sucesso na utilização das bibliotecas NMath no meu trabalho de desenvolvimento de software, minha resposta é um SINAL retumbante. Suas bibliotecas me ajudaram significativamente a diminuir o tempo de desenvolvimento e gostaria de agradecer sua equipe de desenvolvimento por um trabalho verdadeiramente proeminente no desenvolvimento. Waldemar Dos Passos, PhD, autor de Métodos Numéricos, Algoritmos e Ferramentas em C. Passei um ano procurando um pacote de estatísticas que fosse nativo. NET e robusto. Depois de analisar dezenas de sites e experimentar meia dúzia de demonstrações, comprei o pacote completo da NMath - e é ótimo usá-lo para analisar as carteiras de renda fixa, onde o tempo é essencial - e é muito rápido. Não poderia ser mais fácil de integrar. Eric Carlino, Ronin Capital Ive desenvolvendo software científico numérico por quinze anos. Normalmente escrevo códigos numéricos personalizados e Ive usou regularmente IMSL, ESSL, Numerical Recipes e Matlab. O ambiente de desenvolvimento da NMath com C é de longe o mais elegante, flexível e acessível para reutilizar que Ive já encontrou. O mais. John Lee, Faculdade de Medicina da Universidade de Washington

No comments:

Post a Comment