関数fft_sequence マニュアル

(The documentation of function fft_sequence)

Last Update: 2021/12/7


◆機能・用途(Purpose)

時系列データ\(f(t)\)のフーリエスペクトル \[\begin{equation} F(f) \equiv \int_{-\infty}^{\infty} f(t) e^{2\pi ift}dt \label{eq.continuous.definition} \end{equation}\] を高速フーリエ変換(FFT)のアルゴリズムを用いて計算する。 時系列データとして任意の長さの実数値系列(struct sequence型構造体)を与える。
Compute the Fourier spectrum (eq. \ref{eq.continuous.definition}) of a time series data \(f(t)\) using the fast Fourier transformation (FFT) algorithm, where the time series data is given as a real number series (struct sequence-type structure) of arbitrary length.


◆形式(Format)

#include <sequence/fft.h>
inline struct imsequence fft_sequence(struct sequence data)


◆引数(Arguments)

data 入力時系列データ\(f(t)\)。
The input time series data \(f(t)\).


◆戻り値(Return value)

\(f(t)\)のフーリエスペクトル。 引数dataで与える時系列データの末尾にダミーの0.0を付加して 長さを2の巾乗にした上でフーリエ変換を行う。 戻り値のメンバの値は以下のようになる。
The Fourier spectrum of \(f(t)\), computed by the Fourier transformation after adding dammy zeroes at the end of the time series data given by argument data to make the length a power of 2. The values of members of the return value are as below.

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

Value
size data.size以上の最小の2の巾乗(下記の計算式の\(2^N\))
The minimum power of 2 greater than or equal to data.size; \(2^N\) in the formula below
t0 0.0
dt (\ref{eq.df.definition})式の\(\Delta f\)
\(\Delta f\) of eq. (\ref{eq.df.definition})
各\(n\)に対するvalue[n]
value[n] for each \(n\)
(\ref{eq.discrete.definition})式の\(F_n\)
\(F_n\) of eq. (\ref{eq.discrete.definition})

ここで、(\ref{eq.discrete.definition})式の記号と 引数の対応関係は以下のようになる。
Here, relations between symbols in eq. (\ref{eq.discrete.definition}) and arguments are given as below.



◆使用例(Example)

struct sequence data;
struct imsequence spectrum=fft_sequence(data);


◆計算式(Formula)

時系列データ\(f(t)\)のフーリエ変換は (\ref{eq.continuous.definition})式で与えられる。 \(f(t)\)が有限の時刻範囲において 一定の時間刻み\(\Delta t\)で与えられているものとし、 データサンプル数を\(K\)、先頭時刻を\(t_0\)とする。 このとき\(f(t)\)の定義域は\(t_0 \leq t < t_0+K\Delta t\)となる。 定義域外では\(f(t)=0\)であるものと仮定する。 離散化後の\(f(t)\)および\(F(f)\)をそれぞれ \[\begin{equation} f_k \equiv f(t_0+k\Delta t) \hspace{1em} (k=0,1,2,\cdots,K-1) \label{eq.discretize.t} \end{equation}\] \[\begin{equation} F_n \equiv F(n\Delta f) \label{eq.discretize.f} \end{equation}\] と表し、積分(\ref{eq.continuous.definition})を和で近似すれば \[\begin{eqnarray} F_n &=& \sum_{k=0}^{K-1} f_k e^{2\pi i n\Delta f (t_0+k\Delta t)} \Delta t \nonumber \\ &=& \sum_{k=0}^{2^N-1} f_k e^{2\pi i n\Delta f (t_0+k\Delta t)} \Delta t \label{eq.integral.approximated} \end{eqnarray}\] となる。ここで\(K\)以上の最小の2の巾乗を\(2^N\)(\(N\):自然数)とおいた。 すなわち\(2^{N-1}<K\leq 2^N\)である。 (\ref{eq.integral.approximated})の第2式においては \(k\geq K\)で\(f_k=0\)であることを用いた。 周波数刻みを \[\begin{equation} \Delta f \equiv \frac{1}{2^N \Delta t} \label{eq.df.definition} \end{equation}\] で与えることにすれば \[\begin{equation} F_n = e^{\frac{2\pi i n t_0}{2^N \Delta t}}\Delta t \sum_{k=0}^{2^N-1} f_k e^{\frac{2\pi ink}{2^N}} \hspace{1em} (n=0,1,2,\cdots,2^N-1) \label{eq.discrete.definition} \end{equation}\] を得る。 この関数では(\ref{eq.discrete.definition})式を用いて フーリエ変換を実行する。
The Fourier transformation of a time series data \(f(t)\) is given by eq. (\ref{eq.continuous.definition}). Let \(f(t)\) be given in a finite time range at a constant time interval \(\Delta t\), and let the number of data samples and start time be \(K\) and \(t_0\), respectively. In this case, the definition range of \(f(t)\) is \(t_0\leq t<t_0+K\Delta t\). Outside of the definition range, \(f(t)=0\) is assumed. Let the values of \(f(t)\) and \(F(f)\) after discretizations be represented by eqs. (\ref{eq.discretize.t}) and (\ref{eq.discretize.f}), respectively. Then the integration in eq. (\ref{eq.continuous.definition}) can be approximated as (\ref{eq.integral.approximated}). Here, the minimum power of 2 greater than or equal to \(K\) was defined as \(2^N\), where \(N\) is a natural number; i.e., \(2^{N-1}<K\leq 2^N\). In the second line of eq. (\ref{eq.integral.approximated}), \(f_k=0\) for \(k\geq K\) was used. Let the frequency interval be given by eq. (\ref{eq.df.definition}). Then eq. (\ref{eq.discrete.definition}) is obtained. This function calculates the Fourier transformation based on eq. (\ref{eq.discrete.definition}).

実際の処理として、この関数内では \(f(t)\)を長さが\(2^N\)の複素数値系列に直した上で 関数fftを用いて計算を行っている。 FFT本体のアルゴリズムについては関数fft2のマニュアル参照のこと。
The processings of this function are composed of first converting \(f(t)\) to a complex number series of length \(2^N\), then performing the Fourier transformation using function fft. The algorithm of FFT is described in the documentation of function fft2.