header image
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • プログラム・ソフト
  • 物理学・工学
  • ガジェット
  • 当サイトについて
  • お問い合わせ
  • HOME
  • 物理学・工学
  • 情報処理
  • 連続波形から離散波形へのフーリエ変換の拡張とサンプリング条件

連続波形から離散波形へのフーリエ変換の拡張とサンプリング条件

投稿日:2022年1月17日 更新日:2022年6月15日

  • Tags: [d3.js], [数学],

nocap

これまでフーリエ変換について何度か取り扱いましたが、変換を行う元の波形(信号、関数)は値が連続的に続く”連続波形”でした。 しかし実際にPCでフーリエ変換を行う場合は、”離散化(サンプリング)した信号”を処理することになります。 これは「離散フーリエ変換」となり、連続波形のフーリエ変換とは異なる特徴がスペクトルにみられます。 数式で表すと

  • 連続波形のフーリエ変換 : $\displaystyle c_k = \frac{1}{T}\int_{0}^{T}f(t)e^{-2\pi ikt/T}dt$
    ※ 周期関数と仮定しているため、実際は「フーリエ係数」
  • 離散波形のフーリエ変換 : $\displaystyle F_k = \frac{1}{N}\sum_{n=0}^{N-1} f_n e^{2\pi i kn/N},\ (k = 0,1,\dots, N-1)$

のように、積分がシグマに置き換わっている以外同じ形になっていますが、スペクトルの形状は両者で異なっています。 連続波形のフーリエ変換(フーリエ係数)と離散波形のフーリエ変換の関係は下図の通りで、

  1. 時間の連続波形(信号)を離散化するときに、くし型関数を使うこと
  2. 連続波形のスペクトル(フーリエ係数)から離散波形のスペクトルに変換するとき、”畳み込み積分”という演算を使うこと
  3. 最終的に得られる離散波形のスペクトルの特徴とイメージ

を順に述べていきます。

連続波形・離散波形とスペクトルの関係
Fig.1. 連続波形・離散波形とスペクトルの関係

  • 変数(記号)の定義
  • 前知識:信号のサンプリング(離散化)
    • くし形関数とは
    • 信号 × くし形関数
  • 導出:連続波形のスペクトルから離散波形のスペクトルへ
    • 関数の積のフーリエ変換
    • 畳み込み積分とは
    • くし形関数のフーリエ変換との畳み込み
      • デルタ関数との畳み込み
      • くし形関数との畳み込み
    • 数式による全体の流れ
  • 特徴:サンプリング条件とサンプリング信号のスペクトル
  • まとめ

変数(記号)の定義

  • $f(t)$ : (周期的で)連続的な時間波形
  • $f_n$ : 離散的な時間波形
  • $\mathcal{F}[\ \ ]$ : フーリエ変換(の演算)
  • $i$ : 虚数 ($i^2 = -1$)
  • $t$ : 時間
  • $\nu$ : 周波数
  • $T$ : 関数 $f(t)$ の周期
  • ${\rm III}p(x) = \sum_{k=-\infty}^{\infty} \delta(x-kp)$ : くし形関数 (shah function, Dirac comb)
  • $\delta(x) = \begin{cases}0 & (x\neq 0) \\infty & (x=0) \end{cases}$: ディラックのデルタ関数
  • $\Delta t$ : サンプリング間隔(サンプリング周期)
  • $T_0$ : サンプリング時間
  • $N = T_0 / \Delta t$ : サンプリング数

前知識:信号のサンプリング(離散化)

現実世界では時間経過が連続的な波形も、PCで取り込むと時間が飛び飛びの波形(=離散波形)となります。 この変換を数学的に考えると「デルタ関数列であるくし形関数を連続波形に掛け算すること」になります。

くし形関数とは

くし形関数は、デルタ関数を等間隔に並べたものです(下図)。 このデルタ関数というのは、幅がゼロで高さが無限大という、特殊な関数で、面積は1になります。 面積1の短冊を、面積を維持したまま横幅を圧縮していったイメージです。

くし形関数の成り立ち
Fig.2. くし形関数の成り立ち

※ クロネッカーのデルタ $\displaystyle \delta_{ij} = \begin{cases}0 & (i\neq j) \\1 & (i=j) \end{cases}$

というのもありますが、今回使用するのはこちらではありません。

信号 × くし形関数

連続波形を離散波形に変換するときには、連続波形にくし形関数を掛け算し、このときサンプリング間隔に応じた間隔のくし形関数を使用します(下図)。 くし形関数は、デルタ関数が間隔 $\Delta t$ で並んだ関数ですが、値が無限大の1点以外は、ゼロの値になっています。 そのため、くし形関数との積をとると間隔 $\Delta t$ の点に位置する連続波形の点のみが残り、他がゼロとなるため、時間が飛び飛びの離散波形に変換されるというわけです。

離散化するときに「なぜ高さが無限大のデルタ関数(くし形関数)を使うの?高さ1を掛けてもいいじゃないか」と思うかもしれません。 たしかに高さ1のほうがわかりやすいですが、高さ1幅ゼロの短冊 (?) では面積=積分値がゼロとなってしまいます。

連続波形のサンプリング(離散化)
Fig.3. 連続波形のサンプリング(離散化)

導出:連続波形のスペクトルから離散波形のスペクトルへ

ここでは連続波形は周期関数であると仮定し、フーリエ係数 / フーリエ級数からスタートして考えていきます(フーリエ係数 ≒ フーリエ変換として扱います)。 非周期関数の場合も「周期が無限大の周期関数である」と考えることで対応できます。

(時間領域の)離散波形を表すには、連続波形とくし形関数をかければ良いのでした。 この離散波形(=連続波形×くし形関数)のフーリエ変換は、連続波形のフーリエ変換とくし形関数のフーリエ変換の畳み込み積分(アスタリスク記号)で表すことができます。

  • (時間領域)離散波形:$\displaystyle f(t) {\rm III}_{\Delta t}(t)$
  • (周波数領域)離散フーリエ変換:$\displaystyle \mathcal{F} [ f(t) {\rm III}{\Delta t}(t) ] = \mathcal{F}[f(t)] * \mathcal{F}[{\rm III}{\Delta t}(t) ]$

関数の積のフーリエ変換

一般に、関数 $f$ と $g$ の積のフーリエ変換は

$\displaystyle \mathcal{F}[ f g]= \mathcal{F}[f] * \mathcal{F}[g]$

という、個々のフーリエ変換の畳み込み積分の関係にあります。

畳み込み積分とは

畳み込み積分はコンボリューション、合成積とも言い、2つの関数の片方を平行移動したときの、2つの積の面積(内積)を表します。 記号にはアスタリスクを使い、関数 $f(t)$, $g(t)$ の畳み込み積分は以下のような定義になります。 これは $g(t)$ の平行移動する量 $\tau$ の関数になります。

$\displaystyle (f*g)(\tau) = \int f(t)g(\tau-t) dt$

  • $a$ :

くし形関数のフーリエ変換との畳み込み

離散波形 $\displaystyle f(t) {\rm III}_{\Delta t}(t)$ のフーリエ変換(離散フーリエ変換)は

$$\displaystyle \mathcal{F}[ f(t) {\rm III}{\Delta t}(t) ] = \mathcal{F}[f(t) ] * \mathcal{F}[{\rm III}{\Delta t}(t) ]$$

のように、連続波形 $f(t)$ のフーリエ変換とくし形関数 ${\rm III}_{\Delta t}(t)$ のフーリエ変換の積で表されます。 実は、くし形関数はフーリエ変換後もくし形関数となります(ただし間隔は、元の間隔 $\Delta t$ の逆数 $1/\Delta t$)。 なので上の式を書き直すと

$$\begin{aligned} \mathcal{F}[ f(t) {\rm III}{\Delta t}(t) ] & = \mathcal{F}[f(t) ] * {\rm III}{1/\Delta t}(t) \\ & = c_k * {\rm III}_{1/\Delta t}(t) \end{aligned}$$

(ここでは連続波形 $f(t)$ を周期関数としているため、フーリエ変換 $\mathcal{F}{f(t)} =$ フーリエ係数 $c_k$ としています)。

デルタ関数との畳み込み

上式(くし形関数との畳み込み積分)を考える前に、デルタ関数との畳み込み積分

$\displaystyle \mathcal{F}[f(t) ] *\delta(t)$

を考えてみましょう。 デルタ関数は積分値が1であり、このデルタ関数を平行移動して積分していくのが畳み込み積分という演算であるため、よく考えるとデルタ関数の畳み込み積分の前後で変化がないことに気が付きます(下図、上)。

デルタ関数との畳み込み積分とくし形関数との畳み込み積分
Fig.4. デルタ関数との畳み込み積分とくし形関数との畳み込み積分

くし形関数との畳み込み

くし形関数との畳み込み積分

$\displaystyle \mathcal{F}[ f(t) {\rm III}{\Delta t}(t) ] = \mathcal{F}[f(t) ] * {\rm III}{1/\Delta t}(t)$

に戻ります。くし形関数はデルタ関数の列(和)

$\displaystyle {\rm III_{1/\Delta t}} = \sum_{k=-\infty}^\infty \delta \left( t-\frac{k}{\Delta t} \right)$

であり、個々のデルタ関数は畳み込み積分をしても元の関数のままでした。 結果として、くし形関数との畳み込み積分は、連続波形のフーリエ変換(スペクトル)が等間隔に並んだ形状となります(上図)。 この間隔は、くし形関数の間隔 $1/\Delta t$ と等しくなっています。このように、離散波形のフーリエ変換すなわち離散フーリエ変換では、周期的なスペクトルが得られます。

数式による全体の流れ

  1. 連続波形のフーリエ変換(フーリエ係数)の式を少し変形した離散フーリエ変換の数式からスタート
  2. 離散波形=連続波形×くし形関数 の積の形に置き換え
  3. 積のフーリエ変換=各々のフーリエ変換の畳み込み積分
  4. くし形関数のフーリエ変換=くし形関数(間隔は異なる)
  5. くし形関数=デルタ関数列
  6. シグマの位置移動 & $k/N$ の関数であることを明記
  7. デルタ関数との畳み込み=そのままの関数

離散波形のフーリエ変換によるスペクトル形状の数式の導出
Fig.5. 離散波形のフーリエ変換によるスペクトル形状の数式の導出

特徴:サンプリング条件とサンプリング信号のスペクトル

離散フーリエ変換によって得られる離散波形(サンプリング信号)のスペクトルは、周期的なスペクトルであることを述べました。このスペクトルは、信号のサンプリング条件によって以下のように変化します。

  • スペクトル同士の間隔 ($= 1/\Delta t$) :サンプリング間隔 $\Delta t$ が狭いほど広くなる
  • スペクトルの分解能 ($= 1/T_0$):サンプリング時間 $T_0$ が長いほど細かくなる

周期的なスペクトル同士が重なると、各周波数の成分の大きさを正確に知ることができません。 そのため広い周波数のスペクトルを取得したい場合、信号のサンプリング間隔を狭くする必要があるということです。 具体的には、知りたい周波数の2倍以上のサンプリング周波数が必要となります。

  • サンプリング間隔 $\Delta t$ : [sec]
  • サンプリング時間 $T_0$ : [sec]

まとめ

  • サンプリング信号:連続波形(信号)にくし形関数をかけたもの
  • 離散フーリエ変換:連続波形(信号)のフーリエ変換と、くし形関数を畳み込み積分したもの
  • 離散フーリエ変換で得られるスペクトル:サンプリング間隔に依存した周期性がみられる

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


偏光(偏波)をインタラクティブなグラフで描画

【plotly】偏光板、波長板を回転したときの偏波をグリグリしてみる

【動くグラフ】物理的な波の扱いのパラメータと複素数表示

フーリエ変換のイメージと数式の意味をわかりやすく説明したい(複素数verも)

【動くグラフ】群速度・位相速度と群速度分散によるパルス広がり

偏光をザックリと数式的に扱ってみる

フーリエ級数展開からフーリエ変換~非周期関数への拡張へのイメージ

  • プロフィール

  • Yoshiharu

  • 現在、ひよっこ光学系エンジニアをやっている一般人です。我流でプログラムをいじったりしています。備忘録、知識整理を兼ねてアウトプットをしていく予定です。

    • 【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較

      2022.11.23

      【ラズパイ】格安な抵抗式・静電容量式の土壌湿度センサーを実際に使って比較


    • ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!

      2022.11.03

      ELEGOO Neptune 2Sをレビュー!2万円台3Dプリンターの実力を実際に使って評価!


    • 自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】

      2022.10.13

      自作ラズパイゼロケースを3Dプリンター用にモデリング【FreeCAD】


    • 【初心者向け】FreeCADの基本的な使い方と手順の流れ

      2022.10.11

      【初心者向け】FreeCADの基本的な使い方と手順の流れ


    • 【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算

      2022.09.07

      【Python】ラズパイでLチカ:LEDの取り扱い~抵抗値の計算


  • アーカイブ

    • 2022年11月
    • 2022年10月
    • 2022年9月
    • 2022年8月
    • 2022年5月
    • 2022年4月
    • 2022年3月
    • 2022年1月
    • 2021年11月
    • 2021年9月
    • 2021年8月
    • 2021年7月
    • 2021年2月
    • 2021年1月
    • 2020年12月
    • 2020年10月
    • 2020年9月
    • 2020年8月
    • 2020年7月
    • 2020年3月
    • 2020年2月
    • 2020年1月
  • カテゴリー

    • Vim
    • ガジェット
    • プログラム・ソフト
    • 光学
    • 情報処理
    • 物理学・工学
    • プログラム・ソフト
    • 物理学・工学
    • ガジェット
    • 当サイトについて
    • お問い合わせ
    Y Lab Desk

    Copyright © Y Lab Desk, 2022 All Rights Reserved.