関数convolution_time マニュアル

(The documentation of function convolution_time)

Last Update: 2021/12/7


◆機能・用途(Purpose)

2つの時系列データのコンボリュージョンを時間領域で計算する。
Compute the comvolution of two time data in the time domain.


◆形式(Format)

#include <sequence/fft.h>
inline struct sequence convolution_time
(struct sequence seq1,struct sequence seq2)


◆引数(Arguments)

seq1 計算に使用する1つ目の時系列データを表す構造体。 下記の計算式における\(f(t_1+i\Delta t)\)。
A structure which represents the first time series data used in the calculation; \(f(t_1+i\Delta t)\) in the formula below.
seq2 計算に使用する2つ目の時系列データを表す構造体。 下記の計算式における\(g(t_2+j\Delta t)\)。 メンバdtの値は引数seq1と同じでなければならない。
A structure which represents the first time series data used in the calculation; \(g(t_2+j\Delta t)\) in the formula below. The value of member dt of this argument must be equal to that of argument seq1.


◆戻り値(Return value)

\(f(t_1+i\Delta t)\)(引数seq1)と\(g(t_2+j\Delta t)\)(引数seq2)の コンボリュージョンの時系列データ\(h(t_3+k\Delta t)\) (下記「計算式とアルゴリズム」参照)を表す構造体。 (\ref{eq.discrete})式を用いて計算する。 戻り値のメンバの値は以下のようになる。
A time series data \(h(t_3+k\Delta t)\) (see “Formula and algorithm” below) which represents the convolution of \(f(t_1+i\Delta t)\) (argument seq1) and \(g(t_2+j\Delta t)\) (argument seq2), calculated by eq. (\ref{eq.discrete}). The values of members of the return value are as below.

戻り値のメンバ
Member of the return value

Value
size (\ref{eq.K.condition})式の\(K(=I+J-1)\)の値。 seq1.size\(+\)seq2.size\(-1\)により計算する。
The value of \(K(=I+J-1)\) (eq. \ref{eq.K.condition}), calculated as seq1.size\(+\)seq2.size\(-1\).
t0 (\ref{eq.t3.definition})式の\(t_3(=t_1+t_2)\)の値。 seq1.t0\(+\)seq2.t0により計算する。
The value of \(t_3(=t_1+t_2)\) (eq. \ref{eq.t3.definition}), calculated as seq1.t0\(+\)seq2.t0.
dt 下記「計算式とアルゴリズム」の\(\Delta t\)の値。 seq1.dtを使用する(seq2.dtでもある)。
The value of \(\Delta t\) in “Formula and algorithm” below; the value of seq1.dt is used, which is equal to seq2.dt.
各\(k\)に対するvalue[k]
value[k] for each \(k\)
下記「計算式とアルゴリズム」の\(h(t_3+k\Delta t)\)の値。 (\ref{eq.discrete})式を用いて計算する。
The value of \(h(t_3+k\Delta t)\) in “Formula and algorithm” below, calculated by eq. (\ref{eq.discrete}).


◆使用例(Example)

struct sequence f,g;
struct sequence h=convolution_time(f,g);


◆計算式とアルゴリズム (Formula and algorithm)

2つの時系列データ\(f(t)\), \(g(t)\)のコンボリュージョンは \[\begin{equation} h(t) \equiv \int_{-\infty}^{\infty} f(\tau) g(t-\tau) d\tau \label{eq.def} \end{equation}\] で定義される。 \(f(t)\)の値が時刻\(t=t_1+i\Delta t\)(\(i\):整数)でのみ与えられている場合、 (\ref{eq.def})式は以下のように近似できる。 \[\begin{eqnarray} h(t) &\sim& \sum_{i=-\infty}^{\infty} \frac{\Delta t}{2}\left[ f(t_1+i\Delta t) g(t-t_1-i\Delta t) \right. \nonumber \\ & & \left. +f(t_1+(i+1)\Delta t) g(t-t_1-(i+1)\Delta t) \right] \nonumber \\ &=& \sum_{i=-\infty}^{\infty} \frac{\Delta t}{2}f(t_1+i\Delta t) g(t-t_1-i\Delta t) \nonumber \\ & & +\sum_{i=-\infty}^{\infty} \frac{\Delta t}{2}f(t_1+(i+1)\Delta t) g(t-t_1-(i+1)\Delta t) \nonumber \\ &=& \sum_{i=-\infty}^{\infty} \frac{\Delta t}{2}f(t_1+i\Delta t) g(t-t_1-i\Delta t) \nonumber \\ & & +\sum_{i’=-\infty}^{\infty} \frac{\Delta t}{2}f(t_1+i’\Delta t) g(t-t_1-i’\Delta t) \nonumber \\ &=& \Delta t\sum_{i=-\infty}^{\infty} f(t_1+i\Delta t) g(t-t_1-i\Delta t) \label{eq.approx1} \end{eqnarray}\] ここで更に、\(i=0,1,2,\cdots,I-1\)においてのみ \(f(t_1+i\Delta t)\)が与えられている場合を考え、 それ以外の時刻では\(f(t_1+i\Delta t)=0\)であると仮定する。 このとき(\ref{eq.approx1})式の和を有限個の項の和で置き換えることができて \[\begin{equation} h(t) \sim \Delta t\sum_{i=0}^{I-1} f(t_1+i\Delta t) g(t-t_1-i\Delta t) \label{eq.approx2} \end{equation}\] を得る。
The convolution of two time series data \(f(t)\) and \(g(t)\) is defined by eq. (\ref{eq.def}). When the value of \(f(t)\) is given only at times \(t=t_1+i\Delta t\), where \(i\) is an integer, eq. (\ref{eq.def}) is approximated by (\ref{eq.approx1}). Let us further assume that \(f(t_1+i\Delta t)\) is given only for \(i=0,1,2,\cdots,I-1\), and that \(f(t_1+i\Delta t)\) is zero at the other times. Then the infinite summation of eq. (\ref{eq.approx1}) can be replaced by a summation of a finite number of terms, yielding eq. (\ref{eq.approx2}).

関数\(g\)についても同様に 有限個の時刻\(t=t_2+j\Delta t\), \(j=0,1,2,\cdots,J-1\)においてのみ 値が与えられているものとし、 それ以外の\(j\)については\(g(t_2+j\Delta t)=0\)であるものと仮定する。 このとき(\ref{eq.approx2})式の和の中身の\(g(t-t_1-i\Delta t)\)が定義されるのは \[\begin{equation} t-t_1-i\Delta t=t_2+j\Delta t \label{eq.g_defined.t_condition} \end{equation}\] すなわち \[\begin{equation} t=t_1+t_2+(i+j)\Delta t \label{eq.g_defined.t} \end{equation}\] と書ける時刻に限られる。 \[\begin{equation} t_3 \equiv t_1 + t_2 \label{eq.t3.definition} \end{equation}\] \[\begin{equation} k\equiv i+j \label{eq.k.definition} \end{equation}\] とおき直せば、 \[\begin{equation} t=t_3+k\Delta t \label{eq.h_defined.t} \end{equation}\] と書ける時刻においてのみ (\ref{eq.approx2})式に基づいて\(h(t)\)を計算できることが分かる。 (\ref{eq.h_defined.t})式の\(t\)について(\ref{eq.approx2})式を書き下すと \[\begin{eqnarray} h(t_3+k\Delta t) &\sim& \Delta t \sum_{i=0}^{I-1} f(t_1+i\Delta t) g(t_3+k\Delta t-t_1-i\Delta t) \nonumber \\ &=& \Delta t \sum_{i=0}^{I-1} f(t_1+i\Delta t) g(t_3-t_1+(k-i)\Delta t) \nonumber \\ &=& \Delta t \sum_{i=0}^{I-1} f(t_1+i\Delta t) g(t_2+(k-i)\Delta t) \label{eq.discrete} \end{eqnarray}\] となって完全に離散化された形が得られる。
We further assume that the function \(g\) is given only at times \(t=t_2+j\Delta t\), \(j=0,1,2,\cdots,J-1\) and that \(g(t_2+j\Delta t)=0\) for the other \(j\). Then \(g(t-t_1-i\Delta t)\) in eq. (\ref{eq.approx2}) is defined only for time which satisfies eq. (\ref{eq.g_defined.t_condition}), or equivalently, (\ref{eq.g_defined.t}). Defining \(t_3\) and \(k\) by eqs. (\ref{eq.t3.definition}) and (\ref{eq.k.definition}), respectively, it is shown that \(h(t)\) can be calculated from eq. (\ref{eq.approx2}) only for \(t\) that can be written in a form of eq. (\ref{eq.h_defined.t}). For these, \(t\), eq. (\ref{eq.approx2}) can be rewritten in a completely discretized form as (\ref{eq.discrete}).

(\ref{eq.discrete})式はあらゆる\(k\)について計算可能であるが、 右辺の\(i\)に関する和の全ての項が0となることが自明な場合には \(h(t_3+k\Delta t)\)を計算する意味がない。 このことを踏まえて\(h(t_3+k\Delta t)\)を計算する意味がある\(k\)の範囲を考えよう。 \(g(t_2+j\Delta t\)\neq 0\)となるのは\(0\leq j\leq J-1\)の範囲のみであった。 このことから\(g(t_2+(k-i)\Delta t)\neq 0\)となる条件は \[\begin{equation} 0\leq k-i\leq J-1 \label{eq.k.condition.original} \end{equation}\] であり、少なくとも1つの\(i\)についてこの条件が成り立つ\(k\)についてのみ (\ref{eq.discrete})式の右辺がノンゼロの項を持つことが分かる。 (\ref{eq.k.condition.original})式を \[\begin{equation} i\leq k\leq i+J-1 \label{eq.k.condition.arranged} \end{equation}\] と変形し、(\ref{eq.discrete})式の和の範囲が \(0\leq i\leq I-1\)であることを踏まえれば、和がノンゼロの項を持つのは \[\begin{equation} 0\leq k\leq I+J-2 \label{eq.k.condition.final} \end{equation}\] のときであることが分かる。
Although it is possible to calculate eq. (\ref{eq.discrete}) for any \(k\), it is not worth calculation of \(h(t_3+k\Delta t)\) if it is trivial that all the terms in the summation of \(i\) in the right hand side are zero. Based on this viewpoint, let us consider the range of \(k\) for which it is worth calculation of \(h(t_3+k\Delta t)\). Remember that \(g(t_2+j\Delta t\)\neq 0\) only for \(0\leq j\leq J-1\). Therefore a condition for \(g(t_2+(k-i)\Delta t)\neq 0\) is given by (\ref{eq.k.condition.original}), and only if this condition is satisfied, the right hand side of eq. (ref{eq.discrete}) has a non-zero term. Rewriting eq. (\ref{eq.k.condition.original}) as (\ref{eq.k.condition.arranged}) and recalling that the summation range of eq. (\ref{eq.discrete}) is \(0\leq i\leq I-1\), we can conclude that the summation has a non-zero term when (\ref{eq.k.condition.final}) holds.

以上より(\ref{eq.k.condition.final})式を満たす\(k\)について \(h(t_3+k\Delta t)\)を計算すれば良いことが分かった。 この\(k\)の範囲をあらためて\(k=0,1,2,\cdots,K-1\)と書き直せば \[\begin{equation} K=I+J-1 \label{eq.K.condition} \end{equation}\] であることが分かる。
In conclusion, \(h(t_3+k\Delta t)\) needs to be calculated for a range of \(k\) given by eq. (\ref{eq.k.condition.final}). Defining this range as \(k=0,1,2,\cdots,K-1\), we obtain eq. (\ref{eq.K.condition}).

最後に上記の計算式に登場した量と関数における引数や戻り値との関係を 下表にまとめておく。
The table below shows the relations between the quantities in the formula above and arguments and return value of the function.

変数
Variable
seq1 seq2 戻り値
Return value
計算式
Formula
関数
Function
\(f\) \(g\) \(h\)  
メンバsize
Member size
\(I\) \(J\) \(K\) (\ref{eq.K.condition})
メンバt0
Member t0
\(t_1\) \(t_2\) \(t_3\) (\ref{eq.t3.definition})
メンバdt
Member dt
\(\Delta t\) \(\Delta t\) \(\Delta t\)  
各\(n\)に対するメンバvalue[n]
Member value[n] for each \(n\)
\(f(t_1+n\Delta t)\) \(g(t_2+n\Delta t)\) \(h(t_3+n\Delta t)\) (\ref{eq.k.definition})(\ref{eq.discrete})