• ベストアンサー

信号の正規化と奇関数の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) をそのまま高速フーリエ変換するのに対するメリットは何なのでしょうか? わかりにくい文章で申し訳ないですが、どちらか一方でも説明していただければ嬉しいです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sinisorsa
  • ベストアンサー率44% (76/170)
回答No.4

No.3のものです。 補足します。 cos(t)をcos(πt/(N-1))としたとして、正規化は、 信号の全体的な傾きを平坦にする操作であるように 見えます。 cos(πt/(N-1))は、半周期分ですから、この信号の周波数は、 もとの信号の基本周波数の半分になりますので、 DFTの結果の直流分以外には、影響しないと考えられます。 ますます、cos(t)はcos(πt/(N-1))だと思えてきました。 いかがでしょうか。

tosu_ka
質問者

お礼

回答ありがとうございます。 なるほど、全体の傾きを平坦にし、無理なく両端を揃えることで、滑らかな周期関数にしているのですね! 確かにcos(πt/(N-1))とすると納得できます!

tosu_ka
質問者

補足

ふと疑問に思ったのですが、cos(πt/(N-1))は、もとの信号の基本周波数の半分ですが、奇関数に拡張することによって、基本周波数と同じになってしまうのではないでしょうか?

その他の回答 (9)

noname#101087
noname#101087
回答No.10

>位相特性を直線上にするのは、フーリエ変換後の実数部の値がゼロになるということと同義でしょうか。 「フーリエ変換後の実数部の値」つまり振幅には影響しないはず。 位相特性が、最少位相推移ではなく、直線状(Linear phase)になるのです。 なぜそうしているのか、ご質問だけからはわかりません。

tosu_ka
質問者

お礼

お礼が遅くなって申し訳ありません。 (1)はギブス現象を抑えるため、 奇関数にするのは、FFTをする際に、実部を考えずに、 虚部のみで計算できるため、プログラム上で、利点があると考えました。 皆さん回答ありがとうございました。

noname#101087
noname#101087
回答No.9

>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 次近似で除去する前処理、のようにもみえます。 原信号に何か余分な信号が重畳しちゃうんですかね。  

  • sinisorsa
  • ベストアンサー率44% (76/170)
回答No.8

回答No.5の者です。 計算違いでしたので、この回答は削除したいと思います。 No.6の方のおっしゃるとおり、線形位相になります。 振幅特性だけ求められればよいのかどうか? という疑問は残ります。

tosu_ka
質問者

お礼

再度回答ありがとうございます。 読んだ文献では、欲しい情報は振幅特性のみです。 線形位相というのがあまり理解できてないのですが、フーリエ変換後の実数部分がゼロになるということと同義でしょうか。

回答No.7

#1です。 現実の世界には波に虚数は無いので、工学的にはそういう操作をしないと役にたたないことだったと思います。

tosu_ka
質問者

お礼

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

noname#101087
noname#101087
回答No.6

>何のためにU(t)を奇関数の周期関数に拡張するのでしょうか? フーリエ変換後の位相特性を直線状(Linear phase)にするため、のような気がします。

tosu_ka
質問者

お礼

回答ありがとうございます。 位相特性を直線上にするのは、フーリエ変換後の実数部の値がゼロになるということと同義でしょうか。

  • sinisorsa
  • ベストアンサー率44% (76/170)
回答No.5

奇関数化についてDFTの式にあてはめてみました。 結果としては、 U(t)のDFTの結果F(k)について、k=2mのときには、 u(t)をそのままDFTした結果のU(m)の2倍になりました。 すなわち、 F(2m)=2U(m) kが奇数のときにはF(k)=0です。 さて、これは、何のためでしょう。DFTの点の数を2倍にして、 計算時間もかかり、出てくる結果は、そのままDFTしたのと 実質同じ? 普通は、Nを2倍にすると、周波数成分が細かく 見えるのですが、今回の場合には、それもありません。 なにもメリットが感じられないのですが。

  • sinisorsa
  • ベストアンサー率44% (76/170)
回答No.3

>u(t) = y(t) - (α*cos(t) + β)          …(1) この式のcos(t)のところは、cos(πt/(N-1))ではありませんか。 そうだとすると、(1)による変換は、t=0とt=N-1において、u(t)=0 となります。 離散フーリエ変換(DFT)(FFTはコンピュータの算法のこと) は信号が周期Nで周期的であることを想定しています。 したがって、信号の両端において、値が一致していない場合 不連続となります。これを避ける処理をしているように見えます。 後の処理で奇関数化している意味はわかりません。何か前提条件が あるのではないですか。 何を分析したいのか、分析結果をどのように解釈するのか ということも、何か前提があるのではないですか

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

「正規化」といってもいろいろな意味がありそうな気がします. あなたのいう「正規化」とはなんですか?

tosu_ka
質問者

補足

normalizedを正規化と訳したのですが、僕もここでいう正規化の意味をつかみかねています。 sinisorsaさんの回答にある、両端をゼロで揃えるということ、傾きを平坦にすることがnormalizedの意味かな、と思います。

回答No.1

正規化のところはよくわかりませんが。 奇関数に拡張するのは、 代表的なFFTアルゴリズムは複素数で計算するので、 実数部/虚数部で数値を与えられますが、実際は実部しかありません。 これに対応するのが偶関数/奇関数成分です。

tosu_ka
質問者

お礼

回答ありがとうございます。 なるほど、奇関数にすると、FFT後は虚数部のみになるんですね。 ただ、FFT後に実数部と虚数部がどちらも存在しても問題はないように思います。わざわざ奇関数にするメリットは感じられません…。 >実数部/虚数部で数値を与えられますが、実際は実部しかありません。 この部分がよくわからないのですが…。 ここでいう実部とは実数部のことでしょうか?

関連するQ&A

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

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

  • 偶関数と奇関数の積分

    こんにちは。複素フーリエ級数展開の問題で出てきた積分について、参考書に書いてあった説明がよくわからなかったので質問させていただきます。 問題となる波形は f(t)=t (0≦t≦2π) T(周期)=2π というものです。つまり波形はノコギリのような形をしています。 ここでの積分について参考書が説明している以下の内容がわかりません。 「t×exp(-jkt)dtを0から2πで積分するとき、奇関数tと偶関数cos(kt)の積は奇関数であり、その一周期の積分はゼロとなるのでt×(-j)sin(kt)を0から2πまで積分した値のみを考えればよい。」 自分が疑問に思ったのは「偶関数でも一周期積分したら0になるはず」という点です。 というのも、同じ偶関数でもcosktを一周期積分したらその値は0になりますよね。しかし「t×(-j)sin(kt)」 を一周期積分した値はちゃんと出てきます。「t×(-j)sin(kt)」と「cos(kt)」は同じ偶関数でも意味合いが違うのでしょうか。 また、奇関数は偶関数のように波形に関係なく一周期の積分はすべてゼロになると解釈してよろしいのでしょうか。 このあたりを理解できているとフーリエ級数展開の式を楽にすることができるので、非常に助かります。回答よろしくお願いいたします。

  • 偶信号・奇信号

    三角関数の信号を偶信号と奇信号に分解するにはどうしたらいいのでしょうか? (f)=sin(2πωt+θ) (f)=cos(2πωt+θ) ネットにあまり詳しく書かれていないのでよろしくお願いします。

  • FFTプログラムについて

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

  • 周期関数から偶関数成分と奇関数成分を作る説明

    周期関数から偶関数成分と奇関数成分を作る説明が理解できません。 (本より抜粋) f_p(t) = { (sin t)^2 (0<=t<π) { 0 (π<=t<2π) を周期2πで周期的に拡張した関数をf_s(t)とし、 f_e(t) = { f(t) + f(-t) } / 2 f_o(t) = { f(t) - f(-t) } / 2 の式からその偶関数成分f_e(t)と奇関数成分f_o(t)を作ってみよう。 0<=t<π で f_s(t) = (sin t)^2 π<=t<2π で f_s(t) = 0 である。 まず、0<=t<πを満たすtに対しては、π<=2π-t<2πなので(質問:何が?主語は何?)、 f_s(t) の周期性から f_s(-t) = f_s(2π-t) = 0が成り立ち、 f_e(t) = { f_s(t) + f_s(-t) } / 2 ←このf_s(-t)が0なので、f_s(t)だけ残るのは分かります = (1/2) (sin t)^2 f_o(t) = { f_s(t) - f_s(-t) } / 2 ←同上 = (1/2) (sin t)^2 となる。 また、π<=t<2πを満たすtに対しては、0<=2π-t<πなので(質問:何が?主語は何?)、 f_s(-t) = f_s(2π-t) = (sin (2π-t))^2 = (sin t)^2 が成り立ち、 f_e(t) = { f_s(t) + f_s(-t) } / 2 ←このf_s(t)が0なので、f_s(-t)だけ残るのは分かります = (1/2) (sin t)^2 f_o(t) = { f_s(t) - f_s(-t) } / 2 ←同上 = - (1/2) (sin t)^2 が得られる。 f_s(t)は、区間0<=t<=2πでの関数f_p(t)を周期2πで周期的に拡張したものである。 (1/2) (sin t)^2は周期2πの周期性を持つから、偶関数成分は f_e(t) = (1/2) (sin t)^2 であり、奇関数成分は f_o(t) = { (1/2) (sin t)^2 (0<=t<π) { - (1/2) (sin t)^2 (π<=t<2π) を周期2πで周期的に拡張したものとなっている。 …と書いてあるのですが、 まず、π<=2π-t<2πと0<=2π-t<πの主語は何でしょうか? そして、ここで何を説明しようとしているのか分かりません。 なぜ2π-t(つまりは-t+2π)を入れているのか分かりません。 そもそも、f_p(t)が(0<=t<π)と(π<=t<2π)で別々の関数になっているのが理解の妨げになっています。 もっと簡単に説明できませんか? いろいろ検索すると http://manabukano.brilliant-future.net/lecture/appliedmathF2/slide/Slide02_FourierSeries.pdf の14ページ目が見つかりました。 この図によると、負側(-π<=t<0)に拡張しているようです。 この本では 0<=t<π のときは π<=t<2π側 π<=t<2π のときは 0<=t<π側 に拡張しようとしているということでしょうか? 全然理解できません。 説明できる方、どうか説明をお願いします。

  • 周期関数を偶関数と奇関数の和で表すための前段階

    例題 周期Tの周期関数f(t)は必ず、同じ周期Tをもつ偶関数f_e(t)と奇関数f_o(t)の和の形、すなわち f(t) = f_e(t) + f_o(t) // (1.25) と書けることを示せ。 定義 偶関数 cos t, t^2など f(-t) = f(t) // (1.23) 奇関数 sin t, t - t^3など f(-t) = -f(t) // (1.24) [解] まずf(t)から f_e(t) = { f(t) + f(-t) } / 2 // (1.26a) f_o(t) = { f(t) - f(-t) } / 2 // (1.26b) によって、関数f_e(t), f_o(t)を作ると、(1.25)は確かに成り立つ。 …まだ続きはあるのですが、ここで質問です。 (1.26a)と(1.26b)の式の立て方と主旨がまったく分かっていません。 (1.26a)は f_e(t) = {偶関数+偶関数} / 2 ですか? (1.26b)は f_o(t) = {偶関数+奇関数} / 2 ですか? 両方とも2f(t)/2 = f(t)になることは分かっています。 偶関数と奇関数についても今まで使ってきて知っているつもりです。 この説明が分かりません。 必要であれば、(1.23)と(1.24)の左辺/右辺…という用語で説明願います。 具体例で教えていただけるとなお助かります。 よろしくお願いします。

  • フーリエ変換について(周期関数への拡張)

    ある非周期的な関数のスペクトルを見るためにフーリエ変換をしたいのですが、この非周期的な関数を周期的な関数へ拡張するにはどうすればよいのでしょうか?どの区間をとりだせばよいのか分かりません。どなたか教えてください。

  • 窓関数の処理の仕方によるFFT結果の違いについて

    ある1周期分のデータX(n)={X0,X1,・・・,Xn-1}があるとき(nは2の乗数)、ハミング窓関数K=0.54-0.46cos(2πn/N-1)を以下のように処理 (1)Y(n)=K*X(n) (2)Y(n)=K*X(n)+A (3)Y(n)=K*{X(n)+A} ただし、AはX(n)の平均値。 ここで、Y(n)をFFTした場合の違いについてシミュレーションしましたが、振幅スペクトルの結果が次のようになりました。  (1)と(2)は0次のみ異なる(1次以降は同じ)  (2)と(3)((1)と(3))は0次と1次が異なる(2次以降は同じ) 【質問1】 (2)と(3)の2次以降が同じになる理由はどうしてでしょうか。

  • 伝達関数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で用途に足りるのであればこちらを使用したいと思っています) よろしくお願いいたします。

  • フーリェ変換(特に一次元のFFT)

    フーリェ変換について勉強しているものです。このページ(http://www.kurims.kyoto-u.ac.jp/~ooura/fftman/ftmndl.html)で配布している、fft.tgz (71 KB)というファイルのdfst()という関数を使おうと思っているんですが、その関数の返り値(返り配列と言った正しい?)の詳しい意味がよくわからないのです。 --------------------------------------------------------- 以下の変換は : S[k] = sum_j=1^n-1 a[j]*sin(pi*j*k/n), 0<k<n このように分割される : S[2*k] = sum_j=1^n/2-1 (a[j]-a[n-j])*sin(pi*j*k/(n/2)), ◎ S[2*k+1] = sum'_j=1^n/2 (a[j]+a[n-j])*sin(pi*j*(k+1/2)/(n/2)) 注意:sum_■^▲はΣを表しており、■から▲までの部分和となっています。 nは要素数です。 ------------------------------------------------------ この◎の関数はどのような意味を持つのでしょうか?