Eu escrevi uma atividade simples que é SensorEventListener para Sensor. TYPEACCELEROMETER. No meu evento onSensorChanged (evento SensorEvent), eu simplesmente escolho os valores no formato X, Y, Z e escreva-os para um arquivo. Adicionado a este X, Y, Z é um rótulo, o rótulo é específico para a atividade que estou realizando. Então é o rótulo X, Y, Z, como esse, obtenho meu perfil de atividade. Gostaria de ter sugestões sobre as operações a realizar após a coleta de dados, de modo a remover o ruído e obter os melhores dados para uma atividade. A intenção principal desta coleção de dados é construir um aplicativo de detecção de atividade do usuário usando a biblioteca de rede neural (NeuroPh para Android) Link. Perguntou 6 de maio 13 às 4:49 Apenas por diversão eu escrevi um pedômetro algumas semanas atrás, e teria sido capaz de detectar as três atividades que você mencionou. Faça as seguintes observações: Além de Sensor. TYPEACCELEROMETER. O Android também possui Sensor. TYPEGRAVITY e Sensor. TYPELINEARACCELERATION. Se você registrar os valores de todos os três, observe que os valores de TYPEACCELEROMETER são sempre iguais à soma dos valores de TYPEGRAVITY e TYPELINEARACCELERATION. O método onSensorChanged () primeiro fornece-lhe TYPEACCELEROMETER, seguido de TYPEGRAVITY e TYPELINEARACCELERATION, que são os resultados de sua metodologia interna de dividir as leituras do acelerômetro na gravidade e a aceleração não devido à gravidade. Dado que você está interessado na aceleração devido às atividades, ao invés da aceleração devido à gravidade, você pode achar que TYPELINEARACCELERATION é melhor para o que você precisa. Independentemente dos sensores que você usa, o X, Y, Z que você está medindo dependerá da orientação do dispositivo. No entanto, para detectar as atividades que você menciona, o resultado não pode depender, p. Se o usuário está segurando o dispositivo em uma posição de retrato ou paisagem, ou se o dispositivo é plano ou vertical, então os valores individuais de X, Y e Z não serão usados. Em vez disso, você deve olhar para o comprimento do vetor, ou seja, sqrt (X XY YZ Z), que é independente da orientação do dispositivo. Você só precisa alisar os dados se o estiver alimentando em algo sensível ao ruído. Em vez disso, eu digo que os dados são os dados, e você obterá os melhores resultados se você usar mecanismos que não sejam sensíveis ao ruído e, portanto, não precisam ser alisados. Por definição, o alisamento é descartar dados. Você deseja projetar um algoritmo que leve dados nois em uma extremidade e emita a atividade atual na outra extremidade, portanto, não prejudique se é necessário incluir o alisamento como parte desse algoritmo. Aqui está um gráfico de sqrt (X XY YZ Z) Do Sensor. EDPE ACCELEROMETER que gravei quando construí meu pedômetro. Os gráficos mostram as leituras medidas quando andei por 100 etapas. A linha verde é sqrt (X XY YZZ), a linha azul é uma média móvel ponderada exponencialmente da linha verde que me dá o nível médio da linha verde e a linha vermelha mostra as etapas de minha contagem de algoritmo. Eu consegui contar os passos apenas procurando o máximo e mínimo e quando a linha verde cruza a linha azul. Eu não usei qualquer suavização ou Fast Fourier Transforms. Na minha experiência, para este tipo de coisa, os algoritmos mais simples muitas vezes funcionam melhor, porque, embora algumas complexas possam funcionar em algumas situações, é mais difícil prever como se comportam em todas as situações. E a robustez é uma característica vital de qualquer algoritmo :-). Respondeu 14 de maio 13 às 9:32 A caminhada é a atualização regular com picos e calhas, como mostrado. O papelado é quando não há nenhum movimento afastado da média, e mão é quando há movimentos irregulares que não seguem o padrão de caminhada. Em qualquer caso, se você apenas mede um sensor e não deseja que seus resultados sejam sensíveis à forma como o dispositivo está sendo mantido, sqrt (X2Y2Z2) é a única entrada com a qual você pode trabalhar. Para obter mais informações, você precisaria usar outros sensores. Ndash Stochastically 14 de maio 13 às 18:39 Isso parece um problema interessante. Você planejou seus dados contra o tempo para sentir isso, para ver o tipo de ruído que você está lidando e para ajudar a decidir como você pode pré-processar Seus dados para entrada no ID do detector começam com linhas para cada atividade: Axe Ay Az Vx Vy Vz (aproximado por área de cálculo de trapezoids formada por seus pontos de dados). Etc Talvez você possa resolver a orientação do telefone tentando detectar a gravidade e, em seguida, rote seus vetores para uma orientação padrão (por exemplo, o eixo Z positivo para cima). Se você pode fazer isso, então os diferentes eixos podem se tornar mais significativos. Por exemplo, andar (no bolso) tende a ter uma velocidade no plano horizontal, que pode ser distinguido do andar (na mão) pelo movimento no plano vertical. Quanto aos filtros, se os dados parecerem ruidosos, um simples ponto de partida é aplicar uma média móvel para suavizar. Esta é uma técnica comum para os dados do sensor em geral. Além disso, esta publicação parece relevante para a sua pergunta: Coisas identificadas por mim: os dados devem ser pré-processados como e como você precisa, no meu caso, eu apenas quero 3 entradas e Uma saída Os dados devem ser submetidos a Suavização (Suavização de Cinco Pontos ou Qualquer outra técnica que lhe forneça o melhor) Referência. Então, o Ruído é filtrado (não completamente embora). A média móvel é uma das técnicas Os dados linearizados seriam bons, porque você não tem idéia de como os dados foram amostrados, Use interpolação para ajudá-lo a Linearizar os dados. Finalmente use FFT (Fast Fourier Transform) para extrair a receita do prato , Que é para extrair recursos fora do seu conjunto de dados respondido 13 de maio 13 às 6:42 Sua resposta 2017 Stack Exchange, IncA simples, único pólo, passagem baixa, filtro IIR recursivo é rápido e fácil de implementar, por exemplo Onde x, y são os sinais de acelerômetro XY brutos (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 constante de tempo mais longa ). Você pode determinar k de forma empírica, ou se você conhece sua freqüência de corte requerida, Fc. Então você pode usar a fórmula: onde Fs é a taxa de amostragem. Note 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á amostragem dos sinais do acelerômetro em intervalos de tempo regulares, p. A cada 10 ms. A constante de tempo será uma função de k e desse intervalo de amostragem.
No comments:
Post a Comment