• 締切済み

信号長が2の累乗以外のFFTがやりたいです

信号長が2^n以外で、高速にフーリエ変換することが出来る方法を探しております。 信号処理で、相互相関を扱っています。 しかし信号長が長いため下の関係を用いて、周波数領域で処理しようと思っています。 (xとyとの相互相関関数のフーリエ変換)=(X*)・Y (xのフーリエ変換したものの共役複素数)・(yのフーリエ変換したもの) しかし、信号長が2^nではないためゼロ詰めした場合の相互相関値には誤差が出てしまいます。 ですので、2^n以外の信号長で高速にDFT出来る方法を探しております。 その方法や、解説ページ、プログラムなど、御存じの範囲で構いませんので教えてください。 よろしくお願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

一般論でいくと, 信号長 n = p1・p2・...・pk と書ける (p1, p2, ... の中には同じものがあってもよい) ときに DFT なら n^2 時間かかるところ FFT では n(p1 + p2 + ... + pk) 時間になる, んだったかな? 本質的には, 各 pi に対し「大きさ pi のブロック」ごとに DFT のようなことをするだけだったはずです. う~ん, 自分で書いていてかなり不安なので, n = 6 = 2・3 くらいでチェックしてみてください.

tah-boh-
質問者

お礼

回答ありがとうございました。 結局、fftwという有名なアルゴリズムを知人に教えていただき、 それを使うことになりました。

関連するQ&A

  • DTFTとDFT、FFTについて

    離散時間フーリエ変換(DTFT)と 離散フーリエ変換(DFT) 及び高速フーリエ変換(FFT)について 比較的詳しく紹介されているサイトを探しています。 ご存知の方がおられましたら教えてください。 よろしくお願いします。

  • 信号の正規化と奇関数のFFTについて

    信号処理に関する文献を読んでいてわからないところが二つあります。 非常に困っているので、どちらかでも答えていただけたら嬉しいです。。 サンプル数 N(2の累乗数) の信号 y(t) (0<=t<=N-1)を高速フーリエ変換する際の操作なのですが、 まず、 u(t) = y(t) - (α*cos(t) + β)          …(1) α = 1/2( y(0)- y(N-1),β = 1/2( y(0) + y(N-1) ) と u(t) を計算すると、u(t) は y(t) を正規化したものとなる。 とあるのですが、(1)式で何故正規化したといえるのでしょうか? 次に、 この正規化したu(t)と対称な信号u'(t) u'(t) = -u(N-t) を使い、u(t)の右側にu'(t)を連結するように U(t) = u(t) :(0 <= t <= N-1) u'(t) :(N <= t <= 2N-1)  ( u'(t+N) = u'(t)とします) とした関数U(t)をつくり、 U(t) = U( t + 2*N*k) (k整数) として、U(t) を奇関数の周期関数に拡張します。 そしてU(t)にFFTを適用するみたいなのですが、 何のためにU(t)を奇関数の周期関数に拡張するのでしょうか? もとの y(t) もしくは正規化(?)した u(t) をそのまま高速フーリエ変換するのに対するメリットは何なのでしょうか? わかりにくい文章で申し訳ないですが、どちらか一方でも説明していただければ嬉しいです。よろしくお願いします。

  • 伝達関数H(z)を求める際の入力信号

    伝達関数H(z)を求める際の入力信号 Z変換を使って、 X(z)=H(z)Y(z)なる ある未知のシステムの伝達関数H(z)を求めたいのですが、 どなたか詳しい方がいらっしゃいましたら、ご回答お願いします。 <1> x(t)は任意シグナルを入力でき、y(t)が十分な分解能で得られるとすると、 x(t)にはどのような信号を入れるのが適当なのでしょうか。 (x(t)->X(z)、y(t)->Y(z)が可能として) ・ホワイトノイズのような信号が適当なのでしょうか? ・矩形波を入れた場合とホワイトノイズを入れた場合では結果は異なってくるのでしょうか? <2> Z変換を使わずにDFT(離散フーリエ変換)でも未知のシステムH(z)がある程度推定できるのでしょうか?その際に失われる情報はあるのでしょうか? (DFTのほうが手軽に行えるため、DFTで用途に足りるのであればこちらを使用したいと思っています) よろしくお願いいたします。

  • 自己相関関数とパワースペクトル密度関数、フーリエ変換について。

    自己相関関数とパワースペクトル密度関数、フーリエ変換について。 パワースペクトル、パワースペクトル密度と自己相関関数についての質問です。 (tは時間、hは次数、fは周波数として) ある信号x(t)の自己相関関数r(h)をフーリエ変換すると、その信号のパワースペクトル密度関数p(f)になるとネットにあったのですが、パワースペクトル密度関数p(f)と、信号x(t)をそのままフーリエ変換して得たパワースペクトルX(f)はどう違うんでしょうか。 ちなみに数学的な話というよりはコンピュータ上の処理(離散値)で考えています。 もともとパワースペクトルが『自己相関関数の離散フーリエ変換として定義される』と本にはあったのを読みました。 しかし同じ本の中に、『自己相関関数のフーリエ変換は正しくはピリオドグラムと言い、パワースペクトルとはピリオドグラムの平均値で求められる』とも書いてありました。 パワースペクトルとパワースペクトル密度関数はいったいどう違うのか…?とずっと考えているのですが分かりません。 あと(自己、相互)相関関数と(自己、相互)相関係数にはどのような関係があるのですか。回答よろしくお願いします。 前回1つ回答頂いたんですが解決できなかったのですみません、もう一度お願いします。

  • 信号処理についての相談

    最近, 信号処理について勉強しているのですが, いまいち差別化ができていません. フーリエ変換, 高速フーリエ変換, MAR, VAR, 時間周波数解析 これらの特徴や利点, 欠点, どのような処理の時に用いればよいのか, これらを解りやすく教えて頂けないでしょうか?

  • 音源方向の検出

    ロボットなんかに使われている音源方向の検出について勉強しています。 ある一方向からの音声を二つのマイクで受音し、その到達時間差で音声の方向を推定するので、二つの受音信号をx1(n)とx2(n)としますと、それらの相互相関をとればいいです。 ここからが分からないところなんですが、別の方法の一つに、線形予測法でx1(n)とx2(n)の予測誤差をそれぞれ求め、その値が正→+1、負→-1、零→0のように符号付き2進数に変換し、その変換した信号の相互相関をとるという方法もあるらしいんですが、この方法の利点はマルチビットの計算がなくなるという以外にもあるのでしょうか?

  • FFTプログラムについて

    こんにちは。 一周期の三角波についての高速フーリエ変換して、そのすペクトラムのグラフのプログラムの組み方が分かりません。高速フーリエ変換自体が良く分からないので、勉強方法や分かりやすい参考書があったら教えてください。

  • 離散フーリエ変換(DFT)について。

    離散フーリエ変換(DFT)について。 次の有限長N=4のディジタル信号の離散フーリエ変換(DFT)の周波数スペクトルを求めよ。[F[0],F[1],F[2],F[3]]=[-1,1,-1,2] について。 算出した所、 DFTは F[0]=1 F[1]=j F[2]=-5 F[3]=-jと算出できましたが正解でしょうか。 よろしくお願いいたします。

  • FFTの見方

    非常に初歩的な質問になります。 高速フーリエ変換について、少し勉強しています。 基本的な本を読んで理解をしているつもりだったのですが、フーリエ変換とは時間軸に対して観測したデータを周波数軸に変換して表現した物と認識しています。 では、時間軸で振幅の差は周波数軸に変換した場合、どこに現れるのでしょうか? 例えば、ある信号で同じ周波数のデータがあるとします片方は高振幅、もう一方は低振幅この違いはFFTにかけるとどうなるのでしょうか? 大変漠然とした質問になってしまっていますが、よろしくお願いします。

  • フーリエ変換を用いた画像処理_DFT,FFT

    こんにちは,私は現在フーリエ変換を勉強しておりまして,2次元高速フーリエ変換のプログラムを作成してみました.確認のため,フーリエ変換後のデータを逆変換して,元データの再構成を試みたところ,データが上下左右反転していることがわかりました.とあるネット上の解説では,「DFTを行うと上下左右が反転することがある…」と見かけたのですが,その情報も少なく,こちらとしては納得のいく解釈にはつながりません.どなたかなぜ逆変換時のデータが上下左右反転してしまっているのかわかる方はいらっしゃいませんか.