Estou tentando detectar se um carro acelerou ou freou usando o acelerômetro do iPhone.
Na figura abaixo, plotei os dados coletados. (Para coletar os dados, o telefone estava deitado no carro, de frente para a parte superior do telefone).
O problema que estou tendo agora é que, visualmente, consigo ver claramente onde o carro acelerou e onde freou (veja abaixo). Mas não consigo descobrir como fazer isso programaticamente.
O que eu basicamente quero é saber com que frequência um carro freou ou acelerou durante um certo período de tempo. (Tamanho da janela em torno de 10 a 30 segundos).
Qualquer ajuda seria muito apreciada.
Desde já, obrigado!
Respostas:
Você deve considerar fazer um STFT no sinal do acelerômetro. Isso permitirá que você visualize a frequência do sinal. Se você puder determinar a frequência dos freios, poderá definir um limite para essa frequência específica de frenagem e contar cada vez que for excedido. Você também seria capaz de medir por quanto tempo a frenagem ocorre.
Como você está processando seu sinal? O Matlab e o python têm a função specgram, que permite ver a frenagem de frequência real. A partir daí, você poderá determinar a frequência do freio, bem como um limite.
fonte
Quando os freios são acionados, a aceleração na direção do movimento reverterá o sinal. Por exemplo, se você posicionar o telefone de forma que o eixo z do acelerador esteja na direção do eixo de gravidade (ou seja, de frente para a terra), a aceleração ao longo do eixo z será -g. Por outro lado, se o eixo z negativo estiver alinhado com g, o eixo z do acelerômetro medirá + g. Isso é análogo ao cenário de um carro acelerando e freando, embora a magnitude da desaceleração seja um pouco menor que a aceleração. Você pode começar definindo o eixo de referência como o eixo g e definindo os outros 2 eixos com base na direção de aceleração mínima e máxima, usando uma matriz de rotação. Basicamente, você altera o eixo de referência das coordenadas x, y, z, com base na orientação do telefone, para um sistema de referência g, a, s estacionário (onde g é o eixo de gravidade, a é a direção da aceleração máxima es eixo estacionário). Você também pode usar um giroscópio para alcançar essa rotação do eixo, conforme discutido emnesta página. Ao visualizar o acelerômetro daya nos eixos transformados, você pode facilmente classificar regiões de aceleração e desaceleração com base no sinal de apenas um eixo, independentemente da orientação do telefone, procurando por zero cruzamentos.
fonte
Você deve saber a orientação do telefone porque o sinal do eixo deve ser o mesmo do movimento do carro. Supondo quea(ti)<0 ou uma aceleração a(ti)>0 .
filter
o sinal do eixo esteja correto, é possível entrar o sinal do acelerômetrolowpass
, para limpar a alta frequêncianoise
e ver o sinal do sinal para detectar se há uma interrupçãoVocê deve tentar filtrar com um10Hz ou menos, tente algumas frequências de corte visualizando o gráfico.
butterworth
passe baixo de segunda ou terceira ordem com baixa frequência, por exemplofonte