ケィオスの時系列解析メモランダム

時系列解析、生体情報解析などをやわらかく語ります

【信号処理の基礎数学3】くし型関数のフーリエ変換——連続から離散への橋渡し(その1)

 時系列データのスペクトル解析を正しく理解するためには、 「サンプリング(標本化)とは何か」 「なぜエイリアシングが起こるのか」 「離散化されたデータのパワースペクトルの形がどう決まるのか」 といった根本的な仕組みを押さえる必要があります。

 この仕組みを支えているのが、くし型関数(comb function)です。「くし(櫛)」の歯のように無限に並んだデルタ関数の列を、時間軸と周波数軸の両方で見比べながら理解すると、サンプリングの感覚がつかめると思います。

 今回は、くし型関数とそのフーリエ変換のペア(フーリエ変換対)について、解説します。

くし型関数のフーリエ変換は、くし形関数

1. くし型関数とは何か

 まずは、くし型関数の定義です。くし型関数は、以下のように、無限に並んだデルタ関数の列です。

\displaystyle{
\operatorname{comb}_T (t) = \sum_{n=-\infty}^{\infty} \delta(t - nT)
}

ここで、

です。この関数は下の図のようになります。櫛の歯が等間隔で無限に並んでいるイメージから名づけられました。

くし型関数

【念のための復習】デルタ関数とは

 話を進める前に、念のため、デルタ関数Dirac delta function)の働きを簡単に復習しておきます。デルタ関数は、通常の意味では「関数」ではありませんが、積分の計算において非常に重要な役割を果たします。デルタ関数について、絶対に押さえておきたいことは、以下の2つの性質です。

超細いけど、面積は1

\displaystyle{
\int_{-\infty}^{\infty} \delta(t)\, dt = 1
}

グラフで描くと、「高さが無限大の針」のようですが、その面積は 1 になります。つまり、線ではなく面積を持っています。

関数の一点を抜き出すことができる

 デルタ関数の核心は、次の性質にあります。

\displaystyle{
\int_{-\infty}^{\infty} f(t)\, \delta(t-a)\, dt = f(a)
}

これは「サンプリング(標本化)」の本質そのものです。関数 \displaystyle{
f(t)
}\displaystyle{
\delta(t-a)
} を掛けて積分すると、その関数の値を、\displaystyle{
t=a
} の1点だけ取り出すことになり、結果は、\displaystyle{
f(a)
} です。

デルタ関数フーリエ変換

 ここで、周波数を \displaystyle{f} として、フーリエ変換の定義を思い出しておきます。時系列 \displaystyle{x(t)}フーリエ変換 \displaystyle{X(f)}

\displaystyle{
X(f) = \mathcal{F}\left\{{x(t)}\right\}(f)
= \int_{-\infty}^{\infty} x(t)\, e^{-2\pi i f t}\, dt
}

と定義します。この定義をデルタ関数に適用すると、次のようになります。

\displaystyle{
x(t) = \delta(t)
} のとき、

\displaystyle{
\mathcal{F}\left\{\delta(t)\right\}(f)
= \int_{-\infty}^{\infty} \delta(t)\, e^{-2\pi i f t}\, dt
}

は、先ほどの

\displaystyle{
\int_{-\infty}^{\infty} f(t)\,\delta(t)\,dt = f(0)
}

の性質を使って、\displaystyle{f(t) = e^{-2\pi i f t}} として

\displaystyle{
\mathcal{F}\left\{\delta(t)\right\}(f)
= \int_{-\infty}^{\infty} \delta(t)\, e^{-2\pi i f t}\, dt = e^{-2\pi i f \cdot 0} = 1
}

となります。すべての周波数成分が同じ強さで含まれている「完全に平らなスペクトル」です。

 この結果を使うと、「定数関数 1 のフーリエ変換デルタ関数になる」という重要な関係を導くことができます。フーリエ逆変換の定義

\displaystyle{
x(t) = \mathcal{F}^{-1}\left\{{X(f)}\right\}(t)
= \int_{-\infty}^{\infty} X(f)\, e^{2\pi i f t}\, df
}

を使って、\displaystyle{X(f)=1} を代入すると、

\displaystyle{
\int_{-\infty}^{\infty} 1 \cdot e^{2\pi i f t}\, df
= \int_{-\infty}^{\infty} e^{2\pi i f t}\, df = \delta (t)
}

が成り立ちます。これは、積分を直接計算したわけではなく、予想の結果ですが、正しいです。なぜなら、フーリエ変換のペアは、一対一に決まっていますので、計算することなく、元のデルタ関数に戻るべきだからです。この式は、デルタ関数の定義式のひとつと見ることができます。また、デルタ関数は偶関数なので (\displaystyle{
\delta(-t) = \delta(t)
})、上の式の \displaystyle{
t
} を、\displaystyle{
-t
} に置き換えたと考えれば、

\displaystyle{
\int_{-\infty}^{\infty} e^{-2\pi i f t}\, df = \delta (t)
}

が成り立つこともわかります。

 次に、\displaystyle{
\delta(t-a)
} の場合も同様に計算できます。

\displaystyle{
\mathcal{F}\left\{\delta(t-a)\right\}(f)
= \int_{-\infty}^{\infty} \delta(t-a)\, e^{-2\pi i f t}\, dt

}

ここで、さきほどの性質

\displaystyle{
\int_{-\infty}^{\infty} f(t)\,\delta(t-a)\,dt = f(a)
}

を適用すると、

\displaystyle{
\mathcal{F}\left\{\delta(t-a)\right\}(f)
= \int_{-\infty}^{\infty} \delta(t-a)\, e^{-2\pi i f t}\, dt
= e^{-2\pi i f a}
}

という結果が得られます。

 さらに、フーリエ逆変換を考えれば、

\displaystyle{
\int_{-\infty}^{\infty} e^{2\pi i f (t-a)}\, df = \delta(t-a)

}

が成り立ち、さらに、\displaystyle{
f
}\displaystyle{
-f
} で置き換えることで、

\displaystyle{
\int_{-\infty}^{\infty} e^{-2\pi i f (t-a)}\, df = \delta(t-a)

}

が成り立つことがわかります。

 デルタ関数ガウス関数 (正規分布の式)、sinc関数と矩形関数は、フーリエ変換しても、フーリエ逆変換しても、結果は同じです。

2. くし型関数のフーリエ変換

 デルタ関数積分は点を抜き出すことに対応しますので、くし型関数のフーリエ変換は以下のような形になります。

\displaystyle{
\mathcal{F}{\left\{\operatorname{comb}_T(t)\right\}}(f) = \frac{1}{T}\operatorname{comb}_{1/T}(f)
}

 なぜ、こうなるのか、その計算過程を見てみます。

ステップ1:くし型関数は周期関数

 くし型関数

\displaystyle{
\operatorname{comb}_T(t)
= \sum_{n=-\infty}^{\infty} \delta(t - nT)
}

を、変形して、

\displaystyle{
\operatorname{comb}_T(t+T)
= \sum_{n=-\infty}^{\infty} \delta(t + T - nT)
= \sum_{n=-\infty}^{\infty} \delta(t - (n-1)T)

}

と表します。ここで、添字を \displaystyle{m = n-1} と書き換えれば

\displaystyle{
\operatorname{comb}_T(t+T)
= \sum_{m=-\infty}^{\infty} \delta(t - mT)
= \operatorname{comb}_T(t)
}

となります。\displaystyle{
\operatorname{comb} _ T(t+T)= \operatorname{comb} _ T(t)
} が成り立つということは、\displaystyle{\operatorname{comb}_T(t)} が、周期 \displaystyle{T} の周期関数ということを意味します。

ステップ2:フーリエ級数展開

 周期 \displaystyle{T} の関数 \displaystyle{x(t)} は、一般に

\displaystyle{
x(t) = \sum_{k=-\infty}^{\infty} c_k\, e^{2\pi i k t / T}
}

の形に複素フーリエ級数展開することができ、係数 \displaystyle{
{c _ k}
}

\displaystyle{
c_k = \frac{1}{T}\int_{-T/2}^{T/2} x(t)\, e^{-2\pi i k t / T}\, dt
}

で与えられます。

 これを \displaystyle{x(t) = \operatorname{comb}_T(t)} に適用すると

\displaystyle{
c_k = \frac{1}{T} \int_{-T/2}^{T/2}
\left(\sum_{n=-\infty}^{\infty} \delta(t-nT)\right)
e^{-2\pi i k t / T}\, dt
}

となります。

ステップ3:係数を計算

 積分区間 \displaystyle{
[-T/2,\, T/2]
} の中で、 \displaystyle{\delta(t-nT)} が 0 でないのは、\displaystyle{n=0} のときだけです。

 したがって、先ほどの積分

\displaystyle{
c_k = \frac{1}{T} \int_{-T/2}^{T/2}
\left(\sum_{n=-\infty}^{\infty} \delta(t-nT)\right)
e^{-2\pi i k t / T}\, dt = \frac{1}{T}\int_{-T/2}^{T/2}
\delta(t)\, e^{-2\pi i k t / T}\, dt
}

となります。ここで、デルタ関数の基本性質を思い出せば、

\displaystyle{
c_k
= \frac{1}{T}\, e^{-2\pi i k \cdot 0 / T}
= \frac{1}{T}

}

と求められます。したがって、くし型関数のフーリエ級数展開

\displaystyle{
\operatorname{comb}_T(t)
= \frac{1}{T}\sum_{k=-\infty}^{\infty}
e^{2\pi i k t / T}
}

となります。

ステップ4:フーリエ級数フーリエ変換

 次に、上の式をそのままフーリエ変換してみます。

\displaystyle{
\mathcal{F}\left\{\operatorname{comb}_T(t)\right\}(f)
= \int_{-\infty}^{\infty}
\left(
\frac{1}{T}\sum_{k=-\infty}^{\infty}
e^{2\pi i k t / T}
\right)
e^{-2\pi i f t}\, dt
}

となります。和と積分を入れ替えると、

\displaystyle{
\mathcal{F}\left\{\operatorname{comb}_T(t)\right\}(f)
= \frac{1}{T}\sum_{k=-\infty}^{\infty}
\int_{-\infty}^{\infty}
e^{-2\pi i (f - k/T)t}\, dt
}

という形になります。

ステップ5:指数関数のフーリエ変換デルタ関数

 ここで、デルタ関数の復習の際に登場した関係式

\displaystyle{
\int_{-\infty}^{\infty} e^{-2\pi i (f - f_0)t}\, dt
= \delta(f - f_0)
}

を使います。

 これを \displaystyle{f_0 = k/T} として適用すれば、

\displaystyle{
\int_{-\infty}^{\infty} e^{-2\pi i (f - k/T)t}\, dt
= \delta\!\left(f - \frac{k}{T}\right)
}

です。したがって、

\displaystyle{
\mathcal{F}\left\{\operatorname{comb}_T(t)\right\}(f)
= \frac{1}{T}\sum_{k=-\infty}^{\infty}
\delta\!\left(f - \frac{k}{T}\right)
}

が得られます。これは、周波数軸上のくし型関数

\displaystyle{
\operatorname{comb}_{1/T}(f)
= \sum_{k=-\infty}^{\infty}
\delta\!\left(f - \frac{k}{T}\right)
}

\displaystyle{1/T} 倍したものですので、

\displaystyle{
\mathcal{F}\left\{\operatorname{comb}_T(t)\right\}(f)
= \frac{1}{T}\operatorname{comb}_{1/T}(f)
}

という、フーリエ変換対の関係が得られました。

 以前、「矩形関数とsinc関数のフーリエ変換対の関係」を説明しましたが、この「くし形関数とくし形関数のフーリエ変換対の関係」も、信号処理の仕組みを知るうえで役に立つものです。

 くし型関数には、下の図のように、

  • 時間方向を細かく刻めば(T が小さくなれば)→ 周波数方向は広がる
  • 時間方向を粗く刻めば(T が大きくなれば)→ 周波数方向は狭くなる

という性質があります。

櫛型関数の時間領域表現と周波数領域表現の関係

連続信号と離散信号の違いはくし形関数が教えてくれる

 ここまで考えてきた「くし形関数」

\displaystyle{
\operatorname{comb}_T(t) = \sum_{n=-\infty}^{\infty} \delta(t - nT)
}

は、「サンプリング(標本化)」を理解するための重要な道具です。

 つまり、連続信号 \displaystyle{
x(t)
} をサンプリング周期 \displaystyle{
T
} でサンプリングする操作は、時間軸 (時間領域)では

\displaystyle{
x_s(t) = x(t)\, \operatorname{comb}_T(t)
}

と表すことができます。くし型関数は、時間軸上に間隔 \displaystyle{
T
} ごとに立っているデルタ関数の列なので、\displaystyle{
x(t)
} に掛けると、元の信号の値がそのデルタの位置だけに貼り付いた形になります。つまり、

\displaystyle{
x_s(t) = \sum_{n=-\infty}^{\infty} x(nT)\, \delta(t-nT)
}

という「サンプリング点をで針で取り出すように、しかし、面積を持つように抜き出した信号」になるのです。これが、連続信号から離散データ \displaystyle{
x(nT)
} を得る操作の数学的な表現です。これは、連続フーリエ変換を使って、離散信号の特性をまねるための表現です。完全な離散信号にしてしまうと、連続フーリエ変換は使えません (面積がないので常にゼロです)。離散信号には、離散フーリエ変換しか使えません。一方、連続フーリエ変換は、連続信号にしか適用できませんので、"離散信号"っぽい連続信号として、上の表現を使うことになります。

 ここから、連続信号と離散信号が本質的にどう違うのか、そして、サンプリングの根幹を支える ナイキスト周波数エイリアシング の意味が、くし形関数という視点を通して驚くほど明確に理解できるようになります。この、時間軸のサンプリングが 周波数軸で何を引き起こすのかを詳しく見ることで、離散化の仕組みが直感的に、しかも数学的に整理されます。

 これらの流れについては、次回の記事で解説していきます。

chaosmemo.com

※ もし記事の中で「ここ違うよ」という点や気になるところがあれば、気軽に指摘していただけると助かります。質問や「このテーマも取り上げてほしい」といったリクエストも大歓迎です。必ず対応するとは約束できませんが、できるだけ今後の記事で扱いたいと思います。それと、下のはてなブログランキングはあまり信用できる指標ではなさそうですが (私のブログを読んでいる人は、実際とても少ないです)、押してもらえるとシンプルに励みになります。気が向いたときにポチッとしていただけたら嬉しいです。