Aproxime a derivada de um sinal
Use MovingMap para aproximar a derivada de um sinal proveniente de uma série temporal contínua amostrada de forma irregular.
In[1]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_46.png)
ts = TimeSeries[
Table[{t, EllipticTheta[1, t, 0.3]}, {t,
Join[{0.}, RandomReal[{0, 2 Pi}, 254], {2. Pi}]}]]
Out[1]=
![](assets.pt-br/approximate-signal-derivative/O_24.png)
In[2]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_47.png)
RegularlySampledQ[ts]
Out[2]=
![](assets.pt-br/approximate-signal-derivative/O_25.png)
In[3]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_48.png)
ListPlot[ts, PlotTheme -> "Detailed"]
Out[3]=
![](assets.pt-br/approximate-signal-derivative/O_26.png)
Use os valores e os tempos nos limites de cada janela deslizante para calcular os quocientes de diferença.
In[4]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_49.png)
quotient[values_, times_] :=
First[Differences[values]/Differences[times]]
In[5]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_50.png)
mm = MovingMap[quotient[#BoundaryValues, #BoundaryTimes] &,
ts, {.01, Right}]
Out[5]=
![](assets.pt-br/approximate-signal-derivative/O_27.png)
Compare com a derivada teórica.
In[6]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_51.png)
prime = D[EllipticTheta[1, t, 0.3], t]
Out[6]=
![](assets.pt-br/approximate-signal-derivative/O_28.png)
In[7]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_52.png)
Show[Plot[prime, {t, 0, 2 \[Pi]}, PlotStyle -> Thick,
PlotTheme -> "Detailed", PlotLegends -> None],
ListPlot[mm, PlotStyle -> Red]]
Out[7]=
![](assets.pt-br/approximate-signal-derivative/O_29.png)
Use MovingMap com Line no lugar da função de quociente para criar uma representação gráfica de linhas secantes que aproximem a série temporal original.
In[8]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_53.png)
line[yvals_, xvals_] := Line[Transpose[{xvals, yvals}]];
In[9]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_54.png)
lines = MovingMap[ line[#BoundaryValues, #BoundaryTimes] &,
ts, {1.3, Right, {0, 2. \[Pi], .1}}];
In[10]:=
![Click for copyable input](assets.pt-br/approximate-signal-derivative/In_55.png)
Graphics[{Black, lines["Values"]}]
Out[10]=
![](assets.pt-br/approximate-signal-derivative/O_30.png)