Detecção e cálculo de declives e picos em tempo real

9

Eu tenho um sinal que eu amostro a 500khz. Estou tentando detectar um aumento, queda e o pico nos dados recebidos. A base do pico pode ser de 250 usec ou 2,5 ms, a amplitude pode estar 6db ou 15db acima do nível de ruído. Infelizmente não tenho um bom snr. O nível CC do sinal não é constante, mas se move muito mais devagar que o componente CA.  

No ponto de decisão, preciso conhecer a inclinação da ascensão e queda. Este é um sistema difícil em tempo real e eu realmente preciso tomar uma decisão nos 100usec após a inclinação descer até o nível dc. 

Estou procurando sugestões de como implementar com eficiência um algoritmo decente.  

Atualmente, faço uma média contínua (últimos 25 pontos de dados somados) e tento detectar a tendência. Depois de detectar a tendência para cima, começo a procurar uma tendência para baixo e, uma vez que faço isso, coleto talvez outras 50 amostras e começo a calcular. 

O ruído agora estraga facilmente esse algoritmo, daí a questão. 

Atualizar

Para o benefício de outros, acabei implementando uma Média Móvel seguida pelo integrador. A média móvel dos 64 dados anteriores suavizou o suficiente, mas perdeu a ascensão em um grau, integrando os últimos 8 valores recuperados e simplesmente busco ascensão e queda, depois fiz uma regressão linear para a inclinação. Funciona ok, não ótimo, mas ok.

Ktuncer
fonte
Você pode postar um gráfico de uma sequência de dados em que seu algoritmo atual falha?
Jim Clay
Fazer esse tipo de coisa apesar do ruído significativo é bastante difícil. A sugestão de Juancho de um diferenciador é provavelmente boa.
Daniel R Hicks

Respostas:

5

Você deve começar com um diferenciador ilimitado de banda (equivalente a um diferenciador seguido por um filtro passa-baixo). O diferenciador removerá a tendência de baixa frequência e responderá fortemente a seus picos e inclinações. O componente passa-baixo remove o ruído além da frequência de corte.

Você deve projetar sua frequência de corte para obter pulsos limpos para suas inclinações.

As inclinações positivas diminuem à medida que pulsos positivos; inclinações negativas como pulsos negativos, e o pico corresponderá ao cruzamento zero entre positivo e negativo.

Esse tipo de filtro é normalmente implementado como um filtro FIR. O número de amostras para o seu filtro dependerá das restrições em tempo real, da nitidez na frequência de corte e da própria frequência de corte.

Juancho
fonte
Eu não sou muito bem versado com DSP. Você pode me indicar uma possível implementação? Com base na sua resposta e no meu conhecimento limitado, acho que o link ( holoborodko.com/pavel/numerical-methods/numerical-derivative/… ) faz exatamente o que você mencionou. Se eu usasse essa abordagem, não sei 1) Como determinar minhas frequências? 2) Como selecionar coeficientes de filtro?
Ktuncer
Além disso, o link a seguir resolve um problema semelhante e contém um bom grupo de links. dsprelated.com/showmessage/123740/1.php
Ktuncer