- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バタフライ演算を用いたフィルタ(数式)の畳み込みについて)
バタフライ演算を用いた音の空気減衰の畳み込みについて
このQ&Aのポイント
- バタフライ演算によるFFTおよびIFFTのプログラムを用いて、音の空気減衰の理論式を畳み込みたいと考えています。
- FFTで原信号を周波数領域に変換し、減衰量をパーセンテージに変換して、理論式を乗算する手法を試していますが、うまくいきません。
- 虚数の値が0ではない数になる原因は、FFTによって得られた値のサンプリング周波数と、理論式の周波数軸が一致していないためと考えられます。具体的な解決方法は不明です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>IFFTを行うと、虚数の値が0ではない数になってしまっています。 もっとも考えられる原因は、全ての周波数範囲にわたって演算してしまっているということでしょうか。サンプリング周期がT0のとき、ナイキスト周波数1/(2T0) より上のデータは演算してはいけません。 正確に言うと、実数列をFFTすると、ナイキスト周波数(1/2T0)より低い周波数の成分と、ナイキスト周波数以上の成分は、ちょうど真ん中で折り返した形で複素共役になります。 で、 >周波数ごとの減衰量を乗算する、 という処理をしたいのであれば、ナイキスト周波数(1/2T0)以下の部分についてのみ行って、それ以上は、折り返して複素共役になるようにします。そうしておけば、IFFTしても実数列が得られるはずです。 ただ、 >理論式は横軸が周波数、縦軸が音圧レベルの減衰量のグラフで表されるもので、周波数の関数になっています。 とのことですが、群遅延(位相)は周波数にかかわらず一定ということでしょうか。そうでないならば、ゲインだけ合わせても、時間波形としては実際と合わないことになってしまいます。(ある程度の傾向くらいはつかめるかもしれませんが) http://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B の「実数列のDFT」ってところなどを参照
お礼
>全ての周波数範囲にわたって演算してしまっているということでしょうか。 周波数を折り返して演算してみたところ、 虚数項がうまく0になり、出力信号も期待されるものが得られました。 的確なアドバイス、ありがとうございました!