関数sequence_moving_average マニュアル

(The documentation of function sequence_moving_average)

Last Update: 2023/6/12


◆機能・用途(Purpose)

時系列データの移動平均を計算する。 入力時系列データを\(u(t_0+k\Delta t)\) (\(t_0\): 先頭時刻、\(\Delta t\): サンプリング間隔、 \(k=0,1,2,\cdots,N-1\), \(N\): データサンプル数)として \[\begin{equation} A(t_0+k\Delta t)=\frac{1}{2L+1}\sum_{l=k-L}^{k+L}u(t_0+l\Delta t) \label{eq.average} \end{equation}\] の時系列データを作成する。ここで\(L\)はユーザが与える定数とする。
Compute the moving average of a time series data. This function creates a time series data defined by Eq. (\ref{eq.average}), where \(u(t_0+k\Delta t)\) is the input time series data, \(t_0\) is the beginning time, \(\Delta t\) is the sampling interval, \(k=0,1,2,\cdots,N-1\), \(N\) is the number of data samples, and \(L\) is a user-defined constant.


◆形式(Format)

#include <sequence/operation.h>
inline struct sequence sequence_moving_average
(struct sequence original,const int Nave,const char ∗edge_treatment)


◆引数(Arguments)

original 入力時系列データ\(u(t_0+k\Delta t)\)。
The input time series data \(u(t_0+k\Delta t)\).
Nave 平均に用いるサンプル数((\ref{eq.average})式の\(2L-1\))。 入力時系列データのサンプル数\(N\)以下の正の奇数でなければならない。
The number of samples used for the average (\(2L-1\) in Eq. \ref{eq.average}), which must be a positive odd number less than or equal to the number of data samples (\(N\)) of the input time series data.
edge_treatment 入力時系列データの定義域の端における平均値の計算方法を表す文字列。 \(k<t\)または\(k\geq N-L\)となるサンプルに対して (\ref{eq.average})式のままでは計算できないので その対処方法をこのオプションで指定する。 以下のいずれかが選択可能である。
A string that represents the method to compute the averages near the edges of the definition range of the input time series data. As \(A(t_0+k\Delta t)\) for \(k<L\) and \(k\geq N-L\) cannot directly me computed using Eq. (\ref{eq.average}), an alternative method of computation needs to be specified by this argument. Choose one of the followings.

  • "assume_zero"
    \(k<0\), \(k\geq N\)において\(u(t_0+k\Delta t)=0\) であると仮定して(\ref{eq.average})式を用いる。
    Use Eq. (\ref{eq.average}) assuming \(u(t_0+k\Delta t)=0\) for \(k<0\) and \(k\geq N\).

  • "shorten_window"
    平均値の計算に用いる時間窓をデータに合わせて短縮する。すなわち \[\begin{eqnarray} & & A(t_0+k\Delta t) \nonumber \\ &=& \begin{cases} \frac{1}{L+k+1}\sum_{l=0}^{k+L}u(t_0+l\Delta t) \\ \hspace{2em} (k<L) \\ \frac{1}{2L+1}\sum_{l=k-L}^{k+L}u(t_0+l\Delta t) \\ \hspace{2em} (L\leq k<N-L) \\ \frac{1}{N+L-k}\sum_{l=k-L}^{N-1}u(t_0+l\Delta t) \\ \hspace{2em} (N-L\leq k) \end{cases} \label{eq.average.shorten_window} \end{eqnarray}\] を用いて計算する。
    Shorten the time window for the average computation to adapt the data; Eq. (\ref{eq.average.shorten_window}) is the explicit formula used in this case.

  • shorten_output
    出力時系列データの時間窓を\(L\leq k<N-L\)に短縮する。
    Shorten the time window of the output time series data to \(L\leq k<N-L\).



◆戻り値(Return value)

(\ref{eq.average})式(あるいは(\ref{eq.average.shorten_window}式)) の\(A(t_0+k\Delta t)\)を表す時系列データ。 edge_treatment="shorten_output"の場合を除き、 \(A\)の定義域は\(u\)の定義域と等しい(\(k=0,1,2,\cdots,N-1\))ものとする。
A time series data of \(A(t_0+k\Delta t)\) corresponding to Eq. (\ref{eq.average}) (or ref{eq.average.shorten_window}). Except in case of edge_treatment="shorten_output", the definition range of \(A\) is identical to that of \(u\) (i.e., \(k=0,1,2,\cdots,N-1\)).


◆使用例(Example)

struct sequence u;
struct sequence A=sequence_moving_average(u,15,"assume_zero");