• 締切済み

離散フーリエ変換による復元でのK(z)=0となる場合の対処方法

g = x*k 上の式から、既知のgとkとからxを求める際に、 x = IFFT( FFT(g)/FFT(k) ) とすればよいとあります。 ただ、kによっては、K(z)=FFT(k)において、 あるzでK(z)=0となる場合があると推測されます。 離散フーリエ変換でやってみましたが、 「0割り」となり計算不能でした。 どこがまずいのでしょうか? 教えていただければ幸いです。

みんなの回答

  • hot-IC
  • ベストアンサー率87% (7/8)
回答No.3

逆フィルタ(逆システム)を求める問題ですね. 他の方が解答されているように,とんでもない値が出てくる事の方が多いです. フーリエ変換を使った方法は,解が安定で無い事が知られています. kのモデルが分かっているなら,入出力関係からパラメーター推定ができるはずです. 適応フィルタを使って逆フィルタを求める方法もあるようです. http://www.tk.elec.waseda.ac.jp/~koba/class_info/signal/S8.pdf

参考URL:
http://www.tk.elec.waseda.ac.jp/~koba/class_info/signal/S8.pdf
すると、全ての回答が全文表示されます。
  • uyama33
  • ベストアンサー率30% (137/450)
回答No.2

g = x*k ここで、kは入力、gは出力とします。 入力kは、変換xを受けて、出力gとなる と考えます。  変換は、 入力を各周波数成分の和と考えたときに 各周波数成分の対して独立に作用すると考えます。  入力にある周波数成分が存在しないなら 出力にもその周波数成分は存在しないと考えます。  フーリエ変換では入力を各周波数成分に 分けるのですから、ある成分に関して  入力が0のときは、 その周波数成分に関する出力も0 従って、K(z)=0ならば、G(z)=0であるべきだと考えます。 このとき、 G(z)/K(z)=0/0で不定形ですが、 簡単に計算するには0と置くのが良いと思います。  ただし、zの前後での商の値を調べて 近似をしても良いかとは思いますが、 計算が大変です。  さらに、離散フーリエ変換では コンピュータの誤差によって K(z)は0に近い値をとっても計算誤差によって 0ではないことがほとんどです。  計算誤差同士の商で とんでもない値が出てくる 事のほうが多いです。

すると、全ての回答が全文表示されます。
  • m0r1_2006
  • ベストアンサー率36% (169/464)
回答No.1

記号がややこしいので, 数列 k[m] の fft を K[n] と 数列 g[m] の fft を G[n] とすると, 数列 X[n] を K[n] = 0 の添え字 n に対して,X[n] = 0 として, それ以外で,X[n] = G[n]/K[n] でこさえて, x = ifft(X)

mc555
質問者

補足

ありがとうございます。 それで、ちょっとわからない点があります。 『・・・,X[n] = 0 として,』とありますが、 どうしてゼロとしてよいのでしょうか? 簡単に説明できるようでしたら、 回答いただければ幸いです。

すると、全ての回答が全文表示されます。

関連するQ&A