Numeriek differentiëren: Differentieformules voor de eerste afgeleide
Centrale differentie van meetgegevens via kruiscorrelatie
Stel dat \(x\) een eindig discreet signaal is dat bestaat uit waarden van een continue signaal \(X(t)\) die met gelijke tussenpozen gemeten zijn, zeg met meetfrequentie \(f_s\) ('sampling frequency'). De tijdstapgrootte is dus gegeven door \(h=f_s^{-1}\). Met andere woorden: \(x_n=X(t_n)\) met \(t_n=t_0+n\cdot h\) voor \(n=0,1,2,\ldots N\) voor zeker natuurlijk getal \(N\).
De formule voor centrale differentie zegt dat de afgeleide \(x'_n=X'(t_n)\) voor \(0<n<N\) benaderd wordt door: \[x'_n=\frac{x_{n+1}-x_{n-1}}{2h}=\frac{f_s}{2}(x_{n+1}-x_{n-1})\] Laat \(w\) het filter gedefinieerd door \[w_n=\left\{\begin{array}{ll} n & \mathrm{als\;}|n|=1\\ 0 & \mathrm{anders}\end{array}\right.\] zijn. In een eindige vectoriële beschrijving kiezen we \(w=(-1\;\;0\;\;1)\). Als we de meetgegevens waar nodig links en rechts aanvullen met nullen, dan kunnen we de formule voor het benaderen van de eerste afgeleide in de meetpunten ook opschrijven in termen van een kruiscorrelatie: \[x' = \frac{f_s}{2}\cdot x \otimes w\] Omdat Python voor deze operaties ingebouwde functies heeft kunnen we die gebruiken om eerste afgeleiden uit te rekenen. Als je niet meetgegevens met nullen wilt aanvullen, dan moet je je tevreden stellen met een afgeleide in minder punten dan je gemeten hebt omdat de randpunten in de dataset in dit geval niet mee kunnen doen.