Thursday 28 December 2017

Movimento média filtro acelerômetro no Brasil


Eu acho o seguinte código para uma implementação simples de um filtro passa-baixa. Define alfa 0.1 accelX (acceleration. x alfa) (accelX (1.0 - alfa)) Eu tenho experimentado com o valor para alfa. Mas eu quero saber exatamente como podemos encontrar esse valor para dados de acelerômetro (no Android). Eu entendo que precisamos da taxa de amostragem e da freqüência de corte. Como posso encontrar a freqüência de corte para este tipo de dados (acho que isso envolve a modelagem de ruído e encontrar sua faixa de freqüência Se assim for como eu deveria fazê-lo) perguntou Mar 13 13 às 5:52 É uma média móvel autorregressiva - um infinito Filtro de resposta ao impulso. Comece com a equação acima, pegue a transformada z, e isso dá a resposta de freqüência. Não tem nada a ver com o modelo de ruído. Aqui está a resposta freq para o alfa 0.9, o eixo de freqüência é escalado de 0 para sua frequência de Nyquist (metade do seu freqüência de amostragem) gerada em Octave por freqz (0.9, 1 -0.1) O que você tem é a equação para um filtro passa-baixo de pólo único . Este é o equivalente discreto do filtro analógico R-C. Enquanto sua equação está correta, eu gosto de escrevê-lo como FILT lt - FILT FF (NEW-FILT), porque isso é um pouco mais conveniente para realizar em um microcontrolador, na maioria dos casos. Geralmente, a visualização do domínio do tempo do filtro é mais diretamente utilizável quando se implementa um desses em um microcontrolador. Na maioria das vezes você está mais preocupado com taxa de amostragem e tempo de resposta do que a rolloff de freqüência. No entanto, este último vem, e é por isso que eu construí algumas facilidades para manipular isso em meu pré-processador PIC. O snippet de documentação das duas funções inline relevantes é: Eu trabalhei para fora a matemática no momento em que eu escrevi o código para essas funções, por isso só vou referir-se a que em vez de re-derivar agora: A matemática real da função FFFREQ é Apenas duas linhas de código, para que você possa descobrir. Parece que isso depende de algumas definições na parte superior do arquivo: Se você estiver fazendo isso em um PIC, você pode querer usar o pré-processador. Ele está incluído na versão do PIC Development Tools em embedincpicdload. htm. O código-fonte do pré-processador está incluído no código-fonte do Host e tudo é liberado. Respondeu Mar 13 13 às 12: 45A simples, único pólo, passa baixa, recursiva IIR filtro é rápido e fácil de implementar, e. Onde x, y são os sinais do acelerômetro XY bruto (não filtrados), xf, yf são os sinais de saída filtrados e k determina a constante de tempo dos filtros (tipicamente um valor entre 0,9 e 0,9999, onde k maior significa uma maior constante de tempo ). Você pode determinar k empiricamente, ou se você sabe a freqüência de corte necessária, Fc. Então você pode usar a fórmula: onde Fs é a taxa de amostragem. Observe que xf, yf são os valores anteriores do sinal de saída no RHS, e os novos valores de saída no LHS da expressão acima. Observe também que estamos assumindo aqui que você estará amostrando os sinais do acelerômetro em intervalos de tempo regulares, e. Cada 10 ms. A constante de tempo será uma função de k e deste intervalo de amostragem. Andróide Acelerômetro: Low-Pass Filter Estimativa Aceleração Linear Código Relevante e Projetos: Acceleration Explorer: Acceleration Explorer é um exemplo de código do Android e aplicativo de trabalho. O aplicativo permite aos usuários plotar e registrar as saídas do sensor de aceleração de dispositivos e aceleração linear baseada em filtro passa-baixa em tempo real. As configurações no filtro de passa-baixa podem ser definidas pelo usuário, permitindo que algoritmos de aceleração linear baseados em filtro de passagem baixa sejam rapidamente ajustados em vários dispositivos. Você pode baixar o Acceleration Explorer a partir da Google Play Store gratuitamente Você pode forçar o código fonte para o Acceleration Explorer a partir de GitHub Aceleração Linear: Um acelerômetro pode medir o campo gravitacional estático da terra (como um sensor de inclinação) ou pode medir a medida da aceleração linear Como acelerar em um veículo), mas não pode medir ambos ao mesmo tempo. Quando falamos de aceleração linear em referência a um sensor de aceleração, o que realmente queremos dizer é Aceleração Linear Aceleração Medida - Gravidade (para que possamos determinar a aceleração real do dispositivo não importa como o dispositivo é orientado). A parte mais difícil é determinar que parte do sinal é a gravidade. O Problema: É difícil seqüestrar a componente de gravidade do sinal a partir da aceleração linear. Alguns dispositivos Android implementam Sensor. TYPELINEARACCELERATION e Sensor. TYPEGRAVITY que executam os cálculos para você. A maioria destes dispositivos são novos, high-end e equipados com um giroscópio. Também vale a pena notar que Sensor. TYPELINEARACCELERATION não funciona realmente muito bem enquanto o dispositivo está acelerando em muitos dispositivos que testei. Isso ocorre porque o sensor de aceleração é freqüentemente usado para compensar a deriva do giroscópio, o que causa um loop de realimentação entre os dois sensores. Quando o dispositivo está acelerando, o algoritmo de compensação de deriva assume que o dispositivo é realmente inclinado, em vez de acelerar, e começa a compensar o giroscópio erroneamente. Isto é, no entanto, além do escopo do artigo. Se você tem um dispositivo mais antigo e não tem um giroscópio, você vai enfrentar algumas limitações com Sensor. TYPEACCELERATION. A inclinação do dispositivo só pode ser medida com precisão supondo que o dispositivo não está experimentando qualquer aceleração linear. A aceleração linear só pode ser medida com precisão se a inclinação do dispositivo é conhecida. No entanto, podemos estimar a inclinação com um filtro passa-baixo e aplicar as correções seletivamente. Esta implementação pode ser muito vantajosa porque quando é sintonizado corretamente, ele funciona muito bem e usa apenas um sensor de aceleração em vez de depender de fusões de sensores. Uma solução de filtro passa-baixa: Em teoria, a força da gravidade pode ser isolada com um filtro passa-baixo e, em seguida, a gravidade pode ser subtraída do sinal bruto, criando essencialmente um filtro passa-alta que isola a aceleração linear. A documentação do desenvolvedor do Android fornece um exemplo de uma implementação que pode ser encontrada aqui. Observe como o período de amostragem é calculado usando um método de média. Isso é feito porque o período de amostra entre duas atualizações consecutivas (sampleTimeNew-sampleTimeOld) é muito inconsistente. O método de média proporciona uma estimativa muito mais estável do período de amostragem. Se isso não lhe parecer familiar, você pode revisar minhas outras postagens em Filtros de Baixo Passo: Noções Básicas e Filtros de Baixo Passo: Otimizando o Alfa. No papel, este algoritmo é fantasticamente mais simples do que abordagens alternativas, como os ângulos de Cardan com fusões de sensores, que requerem uma quantidade significativa de trigonometria. Aceleração Linear e Rotação: Alpha 0.9: Inclinação Estática: Para testes, foi utilizado um Droid Razr com uma frequência de actualização de cerca de 50Hz. O algoritmo implementa a versão Wikipédia do filtro passa-baixa com uma constante de tempo de filtro de 0,002 segundos. A constante de tempo produz um alfa de cerca de 0,9. Assumindo que nenhuma aceleração linear está sendo experimentada pelo acelerômetro, o filtro passa-baixa pode efetivamente seqüestrar a gravidade da aceleração linear. Podemos ver que quando o dispositivo foi inclinado no eixo, o acelerômetro mediu a inclinação enquanto o filtro passa-baixa não. Isto é porque quase tudo está passando através do filtro, o que significa que a aceleração é essencialmente ser subtraído de si mesmo. O efeito do LPF é mais visível no eixo Y (a cor verde). Você pode ver a linha verde escura (a aceleração bruta) está se movendo muito como o dispositivo é inclinado para frente e para trás. A linha verde clara (a aceleração linear LPF) move-se muito pouco em relação à aceleração bruta, uma vez que está a compensar a inclinação do dispositivo. Você também pode ver esse efeito nos medidores de inclinação, onde o indicador à esquerda (aceleração bruta) é intitulado fortemente com o dispositivo e o indicador à direita (a aceleração linear LPF) está compensando a inclinação. Observe que, embora esta configuração funcione bem para demonstrar a compensação de inclinação do LPF, a constante de tempo é tão curta que é efetivamente apenas subtraindo a aceleração de si mesmo. Isso significa que se você realmente tentou medir verdadeira aceleração linear com esta configuração, não funcionaria muito bem em tudo. Aceleração Linear: Enquanto a estimativa da gravidade é responsiva com alfa em 0,9 e uma constante de tempo de 0,002 segundos, é muito fraca na estimativa da aceleração linear real. Para medir efetivamente a aceleração linear, a estimativa da gravidade precisa ser muito mais rígida, isto é, precisa ser menos responsiva. Você pode ver isso mais claramente com o eixo Y. A linha verde escura é a aceleração crua quando o telefone é acelerado para frente e para trás e a linha verde-clara é a aceleração linear LPF. Podemos ver que a linha verde clara significativamente abaixo estima a real aceleração linear. Alfa 0,1: Inclinação estática: Com uma constante de tempo de 0,18 segundos e um alfa de 0,1, a estimativa da gravidade de muito mais estável. Demora mais tempo para compensar a inclinação, mas será mais eficaz na medição da aceleração linear (pelo menos por curtos períodos de tempo). Aceleração Linear: Com a estimação da gravidade mais estável, a estimação da aceleração linear torna-se mais eficaz. À medida que a alfa diminui, a constante de tempo aumentará, aumentando o tempo de latência ea estabilidade da estimativa da gravidade. Podemos ver isso mais claramente no eixo Y (linhas verdes). Enquanto o dispositivo era inclinado a 45 graus, a linha verde clara (LPF aceleração linear) estava perto da amplitude da linha verde escura (aceleração crua) enquanto o dispositivo estava sendo acelerado para frente e para trás. Embora esta implementação funcione bem por curtos períodos de tempo, você corre em uma parede de tipos ao tentar medir a aceleração linear por longos períodos de tempo. Isso exigiria uma constante de tempo extremamente longa, ea compensação da inclinação levaria um tempo extremamente longo. Para o ponto em que a finalidade do filtro passa-baixa é derrotada. No entanto, você pode contornar isso apenas aplicando as compensações do filtro passa-baixa quando o dispositivo não está experimentando aceleração linear analisando a variância ou a magnitude (ou ambas) das entradas do sensor de aceleração. Isso está além do escopo deste artigo. Eu acho o seguinte código para uma implementação simples de um filtro passa-baixa. Define alfa 0.1 accelX (acceleration. x alfa) (accelX (1.0 - alfa)) Eu tenho experimentado com o valor para alfa. Mas eu quero saber exatamente como podemos encontrar esse valor para dados de acelerômetro (no Android). Eu entendo que precisamos da taxa de amostragem e da freqüência de corte. Como posso encontrar a freqüência de corte para este tipo de dados (acho que isso envolve a modelagem de ruído e encontrar sua faixa de freqüência Se assim for como eu deveria fazê-lo) perguntou Mar 13 13 às 5:52 É uma média móvel autorregressiva - um infinito Filtro de resposta ao impulso. Comece com a equação acima, pegue a transformada z, e isso dá a resposta de freqüência. Não tem nada a ver com o modelo de ruído. Aqui está a resposta freq para o alfa 0.9, o eixo de freqüência é escalado de 0 para sua frequência de Nyquist (metade do seu freqüência de amostragem) gerada em Octave por freqz (0.9, 1 -0.1) O que você tem é a equação para um filtro passa-baixo de pólo único . Este é o equivalente discreto do filtro analógico R-C. Enquanto sua equação está correta, eu gosto de escrevê-lo como FILT lt - FILT FF (NEW-FILT), porque isso é um pouco mais conveniente para realizar em um microcontrolador, na maioria dos casos. Geralmente, a visualização do domínio do tempo do filtro é mais diretamente utilizável quando se implementa um desses em um microcontrolador. Na maioria das vezes você está mais preocupado com taxa de amostragem e tempo de resposta do que a rolloff de freqüência. No entanto, este último vem, e é por isso que eu construí algumas facilidades para manipular isso em meu pré-processador PIC. O snippet de documentação das duas funções inline relevantes é: Eu trabalhei para fora a matemática no momento em que eu escrevi o código para essas funções, por isso só vou referir-se a que em vez de re-derivar agora: A matemática real da função FFFREQ é Apenas duas linhas de código, para que você possa descobrir. Parece que isso depende de algumas definições na parte superior do arquivo: Se acontecer de você estar fazendo isso em um PIC, você pode querer usar o pré-processador. Ele está incluído na versão do PIC Development Tools em embedincpicdload. htm. O código-fonte do pré-processador está incluído no código-fonte do Host e tudo é liberado. Respondeu Mar 13 13 at 12:45

No comments:

Post a Comment