アプリ版:「スタンプのみでお礼する」機能のリリースについて

FFTによるフーリエ変換はコード数も100行もないものだと思います。おそらく標準プログラムというものもあるのだろうと思いますが。その内容に関する確認の質問です。
手順ですが、例えば、256個の実数データがある場合、まず、256個の複素数型の配列の実部にそのデータを格納して、虚部はゼロのままFFTにかけます。そうすると、フーリエ変換後は位相と絶対値に分離される(実部と虚部に分かれるのと同等の意味)ので前半分の128までが意味のあるデータとなり、後半は無意味というか、前半分の対称になっていると思います。

では逆フーリエ変換して元のデータを取り出す場合、その無意味に思える部分はそのまま温存して逆変換フーリエ変換に流し込む、ということになるものでしょうか。無意味な後半をゼロにしたくなるような気分なのですが。そうではなく、逆フーリエのときは使うから無意味ではない、ということになるでしょうか。また、この場合、逆フーリエ変換で出てきたデータ(複素数)は実部が元データ、虚部はゼロということ(すなわち最初に完全に一致している)で間違いないでしょうか。

また、フーリエ変換されたデータ(周波数空間)として意味がある前半の128個だけという風に考えたとします。そうすると、周波数空間でいろんな仕事をしてスペクトルのデータを改変とか操作したあと、また元の実データに逆変換するとき、後半は一切編集する必要はないまま逆フーリエ変換にかける、ということになるのでしょうか。それはおかしな気がするですね。後半も逆変換には必要になるから(?)です。
どうでしょうか。よろしくお願いします。

A 回答 (2件)

No.1へのコメントについてです。



 実数値関数f(x)をFFTして得た結果の一部分をいじったものを逆変換したら、一般に複素数値関数になる。これは、No.1でご説明したことから明らかでしょう。だから、もし逆変換して実数値関数を得たいのなら、実部が偶関数、虚部が奇関数になるようにいじらなくちゃいけません。
 FFTは周期的離散関数(デルタ関数の列)のフーリエ変換であり、その結果もまた周期的離散関数です。(離散というのは「f(x)はxが整数のとき以外は0で、xが整数nの時にはδ(x-n)の複素数倍である」ということですが、ま、これはご質問とは関係ない。で、)周期的というのは、FFTのデータ点数をNとするときどんなxについてもf(x)=f(x+N)だということ。これはfをFFTして得た関数Fについても同じです。つまりF(-k) = F(N-k)という関係があります。
 なので、F(k)の値をpにセットするのなら、(実部が偶関数、虚部が奇関数になるように)F(N-k)はpの共役複素数にセットしなくちゃいけません。
    • good
    • 0
この回答へのお礼

懇篤な回答ありがとうございます。
”実部が非ゼロで虚部がゼロ(実数といってもいい)の場合、フーリエ変換し出力された複素数配列は実部が偶関数、虚部が奇関数となる”ので、”フーリエ成分について何か操作してそのあと逆変換して実数データ(虚部ゼロ)としたいならば、実部を偶関数、虚部を奇関数となるようにせよ”、ということですね。ノイズ処理とかだと前半のある成分をゼロにするわけですからもちろん、後半もそうしなければならないということですね。ゼロは±ゼロと同じなので対応部分をゼロにしなければならないと。そうなるはずだと思っていました。式を見てじっくり考えたら当然そうなるってことがわかるのでしょうね。私はユーザなので使い方さえ間違わなければいいかなと思っています。実部ゼロで虚部非ゼロという純虚数の系列を与えたらiをかけることになるだけと考えたら、実部が正負逆の奇関数で、虚部が偶関数となりそうですね。

お礼日時:2019/02/13 01:01

> 256個の複素数型の配列の実部にそのデータを格納して、虚部はゼロのままFFT



それは実数値関数をFFTするってことです。複素数値の関数だって扱えるアルゴリズムに「たまたま虚部が0」の関数を突っ込んだということにすぎません。

> 前半分の128までが意味のあるデータとなり、後半は無意味というか、前半分の対称

実数値関数をFFTすると、結果の実部は偶関数、虚部は奇関数になります。
純虚数の値をとる関数をFFTすると、結果の実部は奇関数、虚部は偶関数になります。

 このことの一つの応用例を挙げますと:ふたつの実数値関数f, gをFFTして変換結果F, Gを得たい場合に(f + ig)をFFTするんです。結果としてF+iGが得られますが、その実部を偶関数と奇関数に分離し、虚部も偶関数と奇関数に分離してやれば、Fの実部と虚部、Gの実部と虚部が得られますから、一度のFFTで二つの実数値関数が処理できちゃうわけです。
(なお「偶関数と奇関数に分離」ってのは
   f(x) = (f(x)+f(-x))/2 + (f(x)-f(-x))/2
ということですよん)

なので、

> 無意味な後半

と思うのは早とちりじゃないのかなと思います。

 なお、逆フーリエ変換ってのはフーリエ変換と(定数倍を除いて)全く同じ計算であり、ただしヨコ軸の向きが逆転します。つまりf(x)をFFTしてさらにFFTすると、K f(-x)が出てくる。(定数Kがいくらになるかは宿題にしておきましょう。)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。計測データなので1つの実数の系列がスタートです(虚部がゼロの複素数)。確かに2つの実数時系列のフーリエ変換を1回のFFTで済ませる場合、そういう手があります。今回はそこまで考えておらず、1つの実数の系列だけを考えています。FFTが本来の力を発揮していないとも言えるかも知れませんが。例えばFFTの結果の1~256の複素数で例えば、25~55までを実部・虚部ともゼロとしたとします(その周波数帯はエラーだった見なして)。そしてそれを逆フーリエすれば、その帯域を削除した時系列になると言えるでしょうか。129~256(後半)はそのままで。対象なので後半の対応部分もゼロにするべきなのではないかと思うのですが。

お礼日時:2019/02/11 03:25

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