Eu sou bastante novo no DSP e fiz algumas pesquisas sobre possíveis filtros para suavizar dados do acelerômetro em python. Um exemplo do tipo de dados que estou enfrentando pode ser visto na imagem a seguir:
Essencialmente, estou procurando conselhos para suavizar esses dados e eventualmente convertê-los em velocidade e deslocamento. Entendo que os acelerômetros dos telefones celulares são extremamente barulhentos.
Eu não acho que posso usar um filtro Kalman no momento porque não consigo me apossar do dispositivo para fazer referência ao ruído produzido pelos dados (eu li que é essencial colocar o dispositivo na horizontal e encontrar a quantidade de ruído dessas leituras?)
A FFT produziu alguns resultados interessantes. Uma das minhas tentativas foi realizar a FFT do sinal de aceleração e, em seguida, renderizar as frequências baixas para ter um valor absoluto da FFT igual a 0. Então usei a FFT aritmética e inversa ômega para obter um gráfico de velocidade. Os resultados foram os seguintes:
Essa é uma boa maneira de fazer as coisas? Estou tentando remover a natureza geral barulhenta do sinal, mas picos óbvios, como em cerca de 80 segundos, precisam ser identificados.
Também me cansei de usar um filtro passa-baixo nos dados originais do acelerômetro, o que fez um ótimo trabalho em suavizá-lo, mas não tenho muita certeza de onde ir a partir daqui. Qualquer orientação sobre onde ir a partir daqui seria realmente útil!
EDIT: Um pouco de código:
for i in range(len(fz)):
testing = (abs(Sz[i]))/Nz
if fz[i] < 0.05:
Sz[i]=0
Velfreq = []
Velfreqa = array(Velfreq)
Velfreqa = Sz/(2*pi*fz*1j)
Veltimed = ifft(Velfreqa)
real = Veltimed.real
Então, essencialmente, eu fiz uma FFT nos dados do meu acelerômetro, fornecendo Sz, filtrando altas frequências usando um simples filtro de parede de tijolos (eu sei que não é o ideal). Em seguida, use aritmética ômega na FFT dos dados. Também muito obrigado ao datageist por adicionar minhas imagens no meu post :)
fz
matriz, parece que você está aplicando um filtro passa-alto.