Comment trouver des estimations lissées de la dérivée et de la dérivée seconde d'un signal?

10

J'ai un signal échantillonné à : où . Je veux trouver la dérivée première et seconde du signal: et f' '(t) .Δtfi(ti=iΔt)i=0,,n1f(t)f(t)

Ma première pensée a été d'estimer les dérivées par différences centrales:

F(tje)=F(tje+1)-F(tje-1)2ΔtF(tje)=F(tje+1)-2F(tje)+F(tje-1)(Δt)2

Cependant, le signal peut avoir beaucoup de bruit haute fréquence qui peut provoquer des fluctuations rapides de F et F .

Quelle serait la meilleure façon de trouver des estimations "lissées" de F et F ?

Andy
la source

Réponses:

6

Cela dépend probablement davantage de vos données. Sachez simplement que la différenciation étant une opération linéaire, si vous choisissez un filtre linéaire pour lisser f 'et f' ', cela équivaut à lisser f en utilisant ce même filtre, puis en prenant ses dérivées.

Pouvez-vous publier des photos ou plus d'informations sur le signal que vous souhaitez différencier? Vous recherchez probablement une sorte de filtre passe-bas pour lisser le signal. Quelques options très simples incluent un filtre récursif unipolaire comme , ou un filtre Hann, qui fait simplement signal avec une fenêtre Hann. L'option de filtre Hann est intéressante car elle est en phase linéaire. Si vous connaissez la gamme de fréquences qui vous intéresse, vous pouvez simplement concevoir un filtre passe-bas approprié dans le domaine des fréquences.y(n)=ax(n)+(1a)y(n1)

schnarf
la source
Merci schnarf! Donc, puisque le lissage suivi de la différenciation est égal à la différenciation suivie du lissage; Je peux aussi bien lisser le signal d'origine en convoluant avec par exemple la fenêtre Hann? Que diriez-vous de l'approche plus simple consistant à utiliser une différence finie sur une plus grande échelle: f '(t) ~ = [f (t + 10 * Dt) -f (t-10 * Dt)] / (20 * Dt), est-ce que cela donner une assez bonne estimation d'un dérivé lissé?
Andy
4

Le filtre Savitzky-Golay fournit des estimations fluides du signal et des premières dérivées.

Une implémentation MATLAB peut être trouvée ici .

eglaser
la source