プロが教えるわが家の防犯対策術!

メーカ勤務の会社員です。
離散フーリエ変換後の「逆変換」の公式が分割数N(-∞~∞では無い)にできる理由について、有識者の方々にご助言いただきたく宜しくお願いいたします。

【質問の詳細】
複素フーリエ級数から離散フーリエ変換への式変形を考えると
<複素フーリエ級数の式>
f(t)=∑[n=-∞~∞](Cn・exp(j・n・2πt/T))
Cn=1/T∫[t=-T/2~T/2]f(t)・exp(-j・n・2πt/T)dt

↓↓↓周期の範囲をT/2~T/2から0~TにしてN分割し、
↓↓↓時間t=k・Δt=k・T/N(k=0~N)と考えると、

f(t)=∑[n=-∞~∞](Ck・exp(j・n・2π・k/N))
Ck=1/N・∑[n=0~N-1](f(k・(T/N))・exp(-j・n・2π・k/N))

ここで、
離散フーリエ変換が「Ck」になるのは理解できますが、
●離散フーリエ逆変換が、何故範囲-∞~∞から0~Nに
●∑の範囲縮小ができるのか?
●式として等価になりその他の範囲は無視できるのか?
が理解できず・・・。

離散フーリエ変換の結果が周波数軸上でも周期性を持つのは理解できるのですが、つまり「∑の範囲外を足し算していない」ということにならないのでしょうか?
お手数ですが、宜しくお願いいたします。

質問者からの補足コメント

  • 最後から2行目の誤記修正です。

    誤:「∑の範囲外を足し算していない」ということにならないのでしょうか?

    正:「離散フーリエ逆変換では、∑の範囲外を足し算していない」ということにならないのでしょうか?

      補足日時:2022/09/18 13:13

A 回答 (4件)

ご質問は結局、離散フーリエ変換をフーリエ変換の特殊な場合として考えたい、ということだろうと思います。



[1] 間隔Δtで並んでいるデルタ関数たち
  r(Δt,t) = Σδ(t - nΔt) (Σはn=-∞〜∞)
のフーリエ変換は(ちょっと難しいけど、結局)
  r(W,ω) = Σδ(ω - nW) (Σはn=-∞~∞)
になる。ここにWは、関数fのフーリエ変換Fを
  F(ω) = ∫{-∞〜∞} exp(-2πiωt) dt
とするのであれば、
  W = 1/Δt
です。(フーリエ変換の他の定義を使えば、右辺に定数倍が付くことがあります。)

[2] 以上を使って周期関数とサンプリングとの関係を把握しておくと良いかと思います。
「連続関数f(t)をサンプリングした列{f(nΔt)}」を係数とするデルタ関数の列 
  g(t) = Σf(mΔt)δ(t - mΔt)
を考えると、
  g(t) = f(t)r(t)
です。つまり列{f(mΔt)}はこのg(t)を表すひとつの表現です。そして、g(t)のフーリエ変換は(convolutionを*とすると)
  G(ω) = F(ω)*r(W,ω)
すなわち
  G(ω) = F(ω)*r(W,ω) = ΣF(ω - mW) (Σはm=-∞~∞)
という周期関数になる。G(ω)をF(ω)のaliasと言います。つまり、「サンプリングする」のフーリエ変換は「aliasを作って周期関数にする」ということ。

[3] もし[2]において ∀ω(|ω|≧W/2 ⇒ F(ω) = 0) である場合、
  ∀ω(|ω|≦W/2 ⇒ G(ω) = F(ω))
となる。これがいわゆるサンプリング定理で、W/2がナイキスト周波数ですね。
  B(W,ω) = if |ω|≦W/2 then 1/W else 0
という関数を使って G(ω)B(W,ω) (すなわち、G(ω)から|ω|≦W/2の部分だけ取り出したもの)の逆フーリエ変換をやれば、f(t)が得られる。B(W,ω)の逆フーリエ変換はsinc(t/W)なので
  f(t) = g(t)*sinc(t/W)
によって連続関数f(t)が再現するわけです。 もし ∀ω(|ω|≧W/2 ⇒ F(ω) = 0) ではない場合には、G(ω)B(W,ω)≠F(ω)なので、いわゆるaliasingが生じます。

[4] では周期関数のフーリエ変換はどうなるか。
h(t) = Σf(t - nT) (Σはn=-∞~∞)
はf(t)のaliasで、周期関数はT。どんな周期関数h(t)(周期T)も、適当なf(t)を作ればこの形に表せます。すると、
  h(t) = r(T, t)*f(t)
なので、そのフーリエ変換は
  H(t) = r(Δω,ω)F(ω)
すなわち「F(ωをサンプリングしたもの」になる。上記のフーリエ変換の定義に従えばΔω=1/Tです。

[5] h(t)をサンプリングしたもの
  k(t) = h(t)r(Δt, t) = Σh(mΔt)δ(t - mΔt) (Σはm=-∞~∞)
を考えます。すると、そのフーリエ変換K(ω)は、[2]により周期関数で、
  K(ω) = H(ω)*r(Δω,ω) = ΣH(ω - m) (Σはm=-∞~∞)
である。そして[4]により、
  K(ω) = r(Δω,ω)G(ω)
である。つまりK(ω)も周期関数で、かつサンプリングされた関数(デルタ関数の列で表される関数)だということです。

[6] というわけで
  k(t) = r(Δt, t)h(t)
から
  K(ω) = r(Δω,ω)H(ω)
へのフーリエ変換は、対象になるのはサンプリングされた周期関数であって、そのフーリエ変換はまたサンプリングされた周期関数である。これが(フーリエ変換の特殊な場合としての)離散フーリエ変換です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
本当は色々理解できてからお礼を書きたかったのですが、調べる程に混乱してしまい、何をしたいのかすら分からなくなっている状況です・・・。お礼にも締め切りがある筈なのでまずはお礼させていただき、頭の整理ができた時点で疑問が出た場合に改めて質問しようと思います。


>ご質問は結局、離散フーリエ変換をフーリエ変換の特殊な場合として考えたい、ということだろうと思います。

正にその通りで、フーリエ級数から始めた理論を、数式として離散フーリエ変換まで繋げたいのです。(できればその後の理論にも繋げてサッと見通せる様にしたいなと。)なかなか厳しい状況ですが・・・

●(コンボリューション(畳み込み積分))=(反響合計)
これだけは制御工学で学び図で理解できているのですが・・・
まだまだ先は長いです・・・。

ありがとうございました。

お礼日時:2022/09/25 13:38

> 本日本屋で調べていたら、「行列で時間軸の点を周波数軸の点に置き換える


> のが離散フーリエ変換(DFT)、その逆行列で周波数軸の点を時間軸の点に
> 戻すのが逆離散フーリエ変換(IDFT)」という説明を見付け

がちょっと気になったので先の回答を補足しておく。
 本屋で粘ってもう少し読み進めればよかったのにと思う(笑)。その先に高速フーリエ変換 FFT の説明はなかったかな?

 N = 8 の DFT を

  Ck = (1/8)∑[m=0→7]F[m]e^(-jkmωD) (k = 0→7)

で表す。このまま展開してもいいのだが、見にくいので(本当の目的は FFT に備えて)回転子 W^(km) というものを
  WD = 2π/N = 2π/8 = π/4
  W^(km) = e^(-jkmωD) = e^(-jkmπ/4)
で定義する。すると

  Ck = (1/8)∑[m=0→7]F[m]W^(km)   (k = 0→7)
  8Ck = ∑[m=0→7]F[m]W^(km)   (k = 0→7)
 ここでプログラミングの便宜上 Xk = 8Ck と置いて

  Xk = ∑[m=0→7]F[m]W^(km)   (k = 0→7) ・・・・・ (※)

 W^(km)の性質より
  W^N = W^(N mod 8)
であるから、回転子は
  W^0, W^1, W^2, W^4, W^5, W^6, W^7
だけでよい。さらに
  W^4 = -W^0,  W^5 = -W^1,  W^6 = -W^2,  W^7 = -W^3
であるから 64 種類ある回転子は W^0, W^1, W^2, W^3 の 4 個で表せる。これらを考慮して(※)を展開した式を行列で表すと
「離散フーリエ逆変換が周波数分割数をNにで」の回答画像3
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
DFT、IDFT、畳み込み、デルタ関数の活用、FFT・・・等々、まだまだハードルは続き混乱ばかりですが、なんとか冷静に答えに辿り着こうと思います。
まずはお礼まで。ありがとうございました。

お礼日時:2022/09/25 13:22

>

https://rikeinotame.com/dft1/
> 上記のサイトは数日前に見て、離散フーリエ変換の導出と理解はできた

とのことなので、離散フーリエ変換

  Ck = (1/N)∑[m=0→N-1]F[m]e^(-jkmωD)     (ω = 2π/T  k = 0, 1, 2, …… , N-1)

は既知とする。

 周期Tの未知の信号 f(t) が区分的になめらかな関数であれば

  f(t) = ∑[k=-∞→∞]Ck*e^(jkωt)  (ω = 2π/T)・・・・・(#1)

のように表せ、周波数成分 Ck は

  Ck = (1/T)∫[t=-T/2→T/2]f(t)*e^(-jkωt) dt   ・・・・・(#2)

で計算できるというのがフーリエ級数展開の主旨だった。
 連続関数 f(t) の周期 T を 時間 D で N 個の区間に分割する。ただし N は偶数とする。
 D = T/N となるから時刻 t は
  t = 0, 1D, 2D, …… , (N-1)D
のように飛び飛びに変化する。f(t) は未知だが、信号を計測することでこの離散的な時刻に応じた f(mD) はわかっているものとする。mD をフーリエ級数 (#1) に代入すれば

  f(mD) = ∑[k=-∞→∞] Ck*e^(jkωmD)  ( m = 0, 1, 2, …… , N-1 )

となるわけだが、無数の f(t) から高々 N 個取り出した f(mD) をこのように無限個の線形結合で求めるのは大げさだし、その必要もない。N 個の線形結合で十分である。そもそも 最初に見た通り Ck は N個しか用意されていない(笑)。
 そのCkに合わせて、この f(mD) を

  F[m] = f(mD) = ∑[k=0→N-1] Ck*e^(jkωmD)  ( m = 0, 1, 2, …… , N-1 )

のように表すのが離散逆フーリエ変換 IDFT である。あとは F[m] はわかっているのだから、最初に挙げた DFTで周波数 Ck を求める。以上のことを実感するには、ちょっとメンドイが N = 8 くらいで筆算でやってみるのが一番だ。
 適当なデータF[m]を用意して Excel のフーリエ解析などで計算してみるのもよい。ただし、Excel のフーリエ解析は DFT の高速版の FFT なのでデータの数 N は 2^n にする必要がある。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
本当は色々理解できてからお礼を書きたかったのですが、調べる程に混乱してしまい、何をしたいのかすら分からなくなっている状況です・・・。

お礼にも締め切りがある筈なのでまずはお礼させていただき、頭の整理ができた時点で疑問が出た場合に改めて質問しようと思います。
ありがとうございました。

お礼日時:2022/09/25 13:13

初歩的な信号処理の本を1冊読むのが一番いいのだが、とりあえず


  https://rikeinotame.com/dft1/
を紹介しておく。理解できれば上の疑問は氷解するはずである。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>初歩的な信号処理の本を1冊読むのが一番いいのだが、とりあえず
https://rikeinotame.com/dft1/を紹介しておく。

上記のサイトは数日前に見て、離散フーリエ変換の導出と理解はできたのですが、逆離散フーリエ変換が何故∞個ではなくN個のデータだけしか∑しないのかという疑問の解決はできませんでした・・・。

なお、本日本屋で調べていたら、「行列式で時間軸の点を周波数軸の点に置き換えるのが離散フーリエ変換(DFT)、その逆行列で周波数軸の点を時間軸の点に戻すのが逆離散フーリエ変換(IDFT)」という説明を見付け、やっと腑に落ちた理解の切欠が見付かった気がしています。

自分は複素フーリエ逆変換の式から逆離散フーリエ変換(IDFT)の式を導出しようとしたから駄目だったのかと・・・。もっとシンプルに、離散フーリエ変換での算出値を逆行列で元に戻す式にしたのが逆離散フーリエ変換(IDFT)だったのかと・・・。

もう少し熟考してみます。

お礼日時:2022/09/19 00:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!