Wolfram Language

Procesamiento de series temporales

Aproxime la derivada de una señal

Use MovingMap para aproximar la derivada de una señal proveniente de una serie temporal continua muestreada de forma irregular.

In[1]:=
Click for copyable input
ts = TimeSeries[ Table[{t, EllipticTheta[1, t, 0.3]}, {t, Join[{0.}, RandomReal[{0, 2 Pi}, 254], {2. Pi}]}]]
Out[1]=
In[2]:=
Click for copyable input
RegularlySampledQ[ts]
Out[2]=
In[3]:=
Click for copyable input
ListPlot[ts, PlotTheme -> "Detailed"]
Out[3]=

Use los valores y los tiempos en los límites de cada ventana deslizante para calcular los cocientes de diferencia.

In[4]:=
Click for copyable input
quotient[values_, times_] := First[Differences[values]/Differences[times]]
In[5]:=
Click for copyable input
mm = MovingMap[quotient[#BoundaryValues, #BoundaryTimes] &, ts, {.01, Right}]
Out[5]=

Compare con la derivada teórica.

In[6]:=
Click for copyable input
prime = D[EllipticTheta[1, t, 0.3], t]
Out[6]=
In[7]:=
Click for copyable input
Show[Plot[prime, {t, 0, 2 \[Pi]}, PlotStyle -> Thick, PlotTheme -> "Detailed", PlotLegends -> None], ListPlot[mm, PlotStyle -> Red]]
Out[7]=

Use MovingMap con Line en lugar de la función de cociente para crear un gráfico de líneas secantes que aproximen la serie temporal original.

In[8]:=
Click for copyable input
line[yvals_, xvals_] := Line[Transpose[{xvals, yvals}]];
In[9]:=
Click for copyable input
lines = MovingMap[ line[#BoundaryValues, #BoundaryTimes] &, ts, {1.3, Right, {0, 2. \[Pi], .1}}];
In[10]:=
Click for copyable input
Graphics[{Black, lines["Values"]}]
Out[10]=

Ejemplos relacionados

de en fr ja ko pt-br ru zh