• ベストアンサー

フーリエ変換後に実効値を求めるには?

ノイズ波の位相演算するためにフーリエ変換した後で、数サイクル前との複素数引き算をしてから、その「実効値」を求めたいのですが、どの式が正解なのでしょうか?  (1) √(実数^2+虚数^2)/(FFTデータ数/2)/√2  (2) √(実数^2+虚数^2)/√2  (3) √(実数^2+虚数^2)  (4) その他? なお、これまで(1)と認識して、基本波のみで算定していたのですが、どうも実測値より小さいようなのです。 波高値/√2=実効値とは思いますが、√2が必要なかったりするのでしょうか?

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

  • ベストアンサー
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.8

「FFT結果の1.92kHz以上に数値が現れる時」 3.84kHzでサンプリングした場合、FFTの結果で意味があるのは1.92kHzまでです。通常は1.92kHz以上の値は出力させないかと思います。1.92kHz以上の値を見ると、1.92kHzを境にしてそれ以下と対称な成分が表示されるかと思います。 サンプリングする前の信号に1.92kHz 以上の成分があった場合、折り返し雑音となって1.92kHz未満の成分と重なり混じりあって区別できなくなるので、サンプリング後のデータから1.92kHz以上の成分が混入したかどうかを判断することはできません。(例えば、3kHzの信号が混入すると、サンプリング後には0.84kHzの信号として現れるので、元からあった0.84kHzの成分とは区別できない。1.92kHz以上の成分を表示させると、3kHzのところに信号が出るけど、こちらも0.84kHzを入力しても現れる成分なので、これを見ても3kHzが混入した かどうかの判断はできません。)

osiete-2012
質問者

お礼

なるほど、まずはサンプリングfの1/2以上の部分はフィルターで十分カットしておく必要があるということですね。 そのうえ、FFT結果の1/2までを有効とし、1/2以上の対称分は無視するということですね。フィルターの性能を確認してみます。 最終的には、その前半分すべてを (1)√(実数^2+虚数^2)/(FFTデータ数/2)/√2 (→の合計) すると、実効値が出せるのでよいでしょうか。 なお、前回でも、FFTデータ数が128個の場合は実効値がほぼピッタリ合いましたが、FFTを64個で行うと合わなくなりました。1サイクル64点をFFT64点でするとダメなのでしょうか?

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

その他の回答 (8)

  • DCI4
  • ベストアンサー率29% (448/1540)
回答No.9

あまり理論的によく分かっていないのですが ★これみて やるほうがよいでっす 定番教科書←最初の解説本はこれあたり 科学技術出版社 http://www.kagaku.co.jp/1-20-01_fouhenkan.htm http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/index.htm http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap7/index.htm

osiete-2012
質問者

お礼

ありがとうございます。 やはり、理論が必要ですよね。頑張って勉強してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.7

サンプリング前に、サンプリング周波数の1/2以上の成分を十分除去するというのは >FFT結果の1/2以上の周波数成分(前半の対称分)を無視するということと同じでしょうか? ではありません。 例えば、1kHzサンプリングで800Hzをサンプリングすると、サンプリングされたデータには200Hzの成分として現れて、元々信号に含まれていた200Hzの成分と区別できなくなります。 これを防ぐために、予めサンプリング周波数の1/2以上の成分は十分除去しておく必要があります。

osiete-2012
質問者

お礼

なるほど、フィルターで除去が必要ということですね。 今回、サンプリングが3.84kHzなので1.92kHz以上をカットするLPFを入れているつもりなのですが、その時にFFT結果の1.92kHz以上に数値が現れる時は、十分カットできていないということでしょうか?それとも数%程度はあり得るということでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.6

>>周波数範囲全体について二乗和を計算する >とは、2乗平均平方根(rms)するということでしょうか? rmsの計算(二乗和平均の平方根をとる)です。 あと、大前提として、フーリエ変換する前のデータはサンプリング定理を満たしている(サンプリングする前に、サンプリング周波数/2 以上の周波数成分はカットされている)は満たしているとしています。 (これが満たされないと、折り返しノイズ(エリアス)の問題が出てきますので。)

osiete-2012
質問者

お礼

たびたびありがとうございます。 >FFTの結果をrms()とは、 複素数の絶対値(2乗和の平方根)を求めて、それを周波数範囲(64/2=32個)のrms(2乗和平均の平方根)をするということですね。 >サンプリング周波数/2以上の周波数成分はカットされていること とありますが、FFT結果の1/2以上の周波数成分(前半の対称分)を無視するということと同じでしょうか? それともローパスフィルターでカットされていれば、FFT結果の全域(右対称分も)でrmsが必要で無視してはいけないということでしょうか。

osiete-2012
質問者

補足

お礼(続) もしくは、 >FFTの結果をrms()とは、 先に32個の複素数の和をしてから、それを絶対値(2乗和の平方根)にするのではないでしょうか? 絶対値してから、32個のrms()とると大きすぎる値となりました。

全文を見る
すると、全ての回答が全文表示されます。
  • DCI4
  • ベストアンサー率29% (448/1540)
回答No.5

ノイズ波←標本化定理どうり 帯域制限された正弦波の合成とは限らない とは、FFTのデータ数(64点)に分解した結果のみの積算では、その隙間の値が入っておらず、グラフの面積には足りないいうことでしょうか? ☆回答 ちがいます DFT ですから ざっくり 注意点は以下となる (1)測定ノイズ波の帯域の制限 ノイズ波の帯域と サンプリングの関係が満たされていなければと言うこと 正しく帯域制限されてなければ ノイズ波の帯域により サンプリングしたノイズ波のデジタル時系列データには折り返し歪み分があるという意味 (2)また測定波形データーの打ち切り誤差が生ずる 無限につづく波形を有限個で切り取っている仕組み 検索キーワード; 窓関数 (3)FFTの式の 積分式を確認  ソフトにより FFTの関数により係数定義がちがう場合がある ・・・・・・・・・・・おしまい・・・・・・・・・

osiete-2012
質問者

お礼

すいません。あまり理論的によく分かっていないのですが、 (1)サンプリングについては、基本波1サイクルを64点に分解しています。帯域制限をしているつもりはないのですが、FFT結果の後半は同じ形のため"捨てる"ということでよいでしょうか。 (2)打ち切り誤差については、ハニング窓関数を入れていますが、その種類により値が変わるのでしょうか。 (3)FFTの積分式については確認する方法が分からないのですが、EXCELのFFT結果(実数・虚数)とMATLABのFFT結果(実数・虚数)では、全く同じでした。その絶対値を/32/√2した実効値では、基本波のみでは小さすぎるし、前半の総計では大きすぎるし、。。。

osiete-2012
質問者

補足

お礼(続々) あちらこちらでご助言ありがとうございます。 いろいろやっていくうちに単なる入力間違いもあったりして、ノーマル正弦波をFFT(128個で)した場合の実効値が下記の(1)の計算値の総和(前半のみ)でピッタリ合いました。 (1)√(実数^2+虚数^2)/(FFTデータ数/2)/√2 (→前半合計) ただ、FFTを128個で行えば、「f0分を除き」最初の3個のみに値が入り、その合計の(1)式でピッタリあったのですが、 FFTを64個で行うと、「f0分を含み」最初の3個に値が入ったのが、1個目のf0(直流)分が倍近くになってしまい、合わなくなりました。なお、2,3個目は128個の場合と値は同じです。基本波のみなので直流分はないと思うのですが、1サイクル分のFFTではダメなのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.4

FFTでは波形を各周波数の正弦波の集まり(分布)に分解しています。だもんで、実効値を計算するには求めたい信号の周波数範囲全体について二乗和を計算する必要があります。 

osiete-2012
質問者

お礼

やはり、一点だけの複素数の絶対値だけではダメなのですね。 ただ、FFT結果の中心値までで積算和しても逆に大きすぎるようなのですが、 >周波数範囲全体について二乗和を計算する とは、2乗平均平方根(rms)するということでしょうか? それとも、そのまま2乗和するのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • DCI4
  • ベストアンサー率29% (448/1540)
回答No.3

ノイズ波の位相演算するため。。。うんぬん  ~その実効値を求めたい ★回答 ノイズの実効値とは (4) その他? ☆ざっくり説明 実効値とは何ですか? 正弦波の場合 積分して計算すると https://www.onosokki.co.jp/HP-WK/c_support/faq/fft_common/fft_spectrum_4.htm 振幅 A の正弦波(A sin ω t)の実効値は、0.707 A(0.707 = 1/√2)となります。 正弦波のばあいだけでっす ノイズ←正弦波に完全分解すれば計算可能 ノイズ波←標本化定理どうり 帯域制限された 正弦波の合成とは限らないです ざっくり言えば 波形を積分して求める数値 数量でっす →その波形の区間 グラフの面積でっす 検索キーワード;雑音電力スペクトル など参照

osiete-2012
質問者

お礼

ありがとうございます。 >ノイズ波←標本化定理どうり 帯域制限された正弦波の合成とは限らない とは、FFTのデータ数(64点)に分解した結果のみの積算では、その隙間の値が入っておらず、グラフの面積には足りないいうことでしょうか? FFTから実効値を出すのは無理があるのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.2

補足 今使っているFFTがどのような形式で出力しているのか不明な場合には、一旦きれいな制限は信号を入れてみて、演算結果がどうなっているか、を確認されるのが良いかと思います。 その結果を見て、(とりあえずどういう形式で表示しているかは置いといて)換算係数を決定すれば、実務上はなんとかできそうに思います。

osiete-2012
質問者

お礼

なるほど、分かってる正弦波を入れてみるのですね。計算した正弦波を作ってやってみます。実効値から逆算して波形を作るのが難しそうですが。

全文を見る
すると、全ての回答が全文表示されます。
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.1

その変換の出力がどのように計算されて表示されているかによるかと思います。 単に、実効値(または振幅)で表示されているなら、必要な帯域幅内で 実部^2+虚部^2 を積算し、それの√(または1/2して√)で良いかと思います。 周波数密度で出力(縦軸の単位に1/√Hzが含まれる)されている場合には、(実部^2+虚部^2)*データの周波数幅 を積算することになるかと思います。

osiete-2012
質問者

お礼

さっそくにありがとうございます。 >その変換の出力がどのように計算されて表示されているかによるか 今のところ、実機の内部の演算式が詳細までわからないので、模擬しようとしているのですが、フーリエ変換後に位相角と実効値を出すのですが、その結果の縦軸(スペクトル?)の単位は分かっていません。 まず位相角は、fft()後の基本波成分の実数と虚数からangle()もしくはatan2()を使って出しています。続いて、実効値はrms()を使うと分かりやすいのですが、複素数の引き算後となるため、 √(実数^2+虚数^2)/(FFTデータ数/2)/√2 で出そうとしていました。rms()に対すると、基本波のみでなくすべての成分を積算する必要があるのでしょうか?

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

関連するQ&A

  • 2次元データの複素フーリエ変換するコードの作成

    数値計算等の2次元や3次元の空間データ(実数)をFFTによって複素フーリエ変換する実際のプログラム化についてお尋ねします。プログラムの実装ということなので実際的な質問で長文になっています。すみません。 まず、手持ちに1次元のFFTプログラムがあるということを前提とします(逆フーリエ変換すると、元の実数の系列が出ることは確認済のコード)。そして2次元配列の実数のデータがあるとします。この2次元のデータを2次元の複素フーリエ成分に変換することが目的です。(私の分野では波数空間への展開ということになり、複素数ですから位相情報も含まれることになります。) 例えば、x,y方向に16x16のデータあるとすると、 do j=1,16 ここでjを固定してi:1~16の実数データについて1次元のFFTをかける。 このとき、FFTにかける16個の実数データを複素数の実部に入れて、虚部はゼロとする。 FFTの出力も複素数となっている。 ここで出てくる複素フーリエ変換の結果は実部・虚部で前半(0~7)であり、後半(8~15)はその対称とか点対称(符号が逆)とかになっている(虚部をゼロとしているから)。それを複素数の2次元配列として保存する。 enddo 次いで、 do i=1,16 iを固定してj方向にFFTをかける。このとき、FFTに放り込むデータは上記の複素フーリエ変換の出力結果である2次元データを使う。具体的には複素数の2次元データをj方向の1次元の複素数配列にコピーしてFFTをかけて、その出力結果を新たな2次元配列の複素数に保存する。 enddo この結果、得られた2次元の複素数のデータが、私の所望のデータである、ということです。 式が指し示すとおりのことをすればいいのだ、ということに尽きるのだろうと思いますが、アルゴリズム的にアンバランスのように見えてこれでいいのかなと思えてしまいます。最初に虚部をゼロにするというようなこととかです。そのため確信が持てません。また、結果を見てもわかりにくい面があります。 このような考え方で実装するということいいのでしょうか。全く間違っているでしょうか。もしその場合、考え方の間違いを指摘して頂けると助かりますが(根本的な間違いだったら指摘しようがないということにもなりますが。) また、例えば、始めから実数の2次元配列をすぐに2次元複素数の実部に入れて、虚部をゼロとしてそこからコード方がすっきりするのかなと思いますが。 この辺が確定すると、3次元は同じことということになります。 サンプルコードがネットに出ているという面もありますが、自分でやる方が組み込みやすいのでお尋ねしました。 長文で申し訳ありませんが、よろしくお願いします。

  • ラプラス変換とフーリエ変換について教えて下さい。

    ラプラス変換とフーリエ変換の違いは後者が虚数だけなのに対して、前者はそれを拡張して複素数に使えるようにしたものであるということ分かるのですが、その使い分け方がさっぱり分かりません。 ・一般的に微分方程式を解くときにはラプラス変換を用いますが、これをフーリエ変換でしないのはなぜなのでしょうか? ・逆格子ベクトルを作るときや、スペクトラムアナライザーではフーリエ変換を使いますが、これをラプラス変換でしてはいけないのでしょうか? ・計算機用にフーリエ変換にはFFTというものがありますが、ラプラス変換を離散的にしたZ変換の計算機用に速くしたものがないのはなぜなのでしょうか? よろしくお願い致します。

  • 複素フーリエ変換の位相について

    画像のとおり位相0度から始まるA列の正弦波を複素フーリエ変換しました。 その実部、虚部のグラフがReal、Imagです。 虚数のみ正弦波の周波数のところにピークがあって、実部は0です。つまりこれは位相が90度又は-90度という事になります。 試しに45度から始まる正弦波を複素フーリエ変換すると、上記は-45度になりました。 フーリエ変換の位相というのはそれぞれの周波数成分を正弦波として開始時の位相を求めるものと思っていましたが、実は余弦波だとしているという事なのでしょうか?

  • フーリエ変換--フーリエ変換分光法の原理の証明

    画像の2段目の式(B(t)のフーリエ変換)はどのようになるのでしょうか。 A(オメガ)となってほしいのですが, どのように計算すればよいでしょうか。 ちなみにこの式はフーリエ変換分光法において, 「得られたインターフェログラムをフーリエ変換することで, 試料のスペクトルとなる」ということを証明するための式です. 数式中のB(t)をインターフェログラム, A(オメガ)を光源のパワースペクトルと考えています. ----------画像中の数式について--------------- 1段目の積分記号の右にあるRのような文字は複素数の実部を示す記号です. iは虚数, tは時刻, ωは角周波数を示しています. なお, A(オメガ)は実数関数とします. 以上よろしくお願いいたします.

  • フーリエ変換後のスペクトルについて

    ある波f(x)をフーリエ変換するとF(w)になるとします。 その時、F(w)を縦軸F(w)、横軸wでプロットしたものが「f(x)のスペクトル」ですよね。 そこで質問です。 (1)もしF(w)に虚数が含まれている場合にはスペクトルはどういう意味になるのでしょうか。先と同じくプロットできないですよね。 (2)F(w)の値が負となる角周波数wの値の波は位相を180度ずらしたもの、という解釈で正しいでしょうか。 二点お願いします。

  • FFTデータ数が少ないと直流成分が大きく変動する?

    FFTの振幅スペクトルから実効値算出のために単一正弦波をFFTしてみると、(1)のように計算データ点数が少ない場合、窓関数の位置によって「0Hz直流成分」のFFT結果値が大きく変動してしまいます。((2)(3)は窓関数がどの位置でも問題ありません。) この(1)(1サイクル64点=FFTデータ数64個)のような計算の場合、どのように実効値算出すればよいでしょうか?  また、正常な場合でもこれらのサンプル間隔(0、30Hz、60Hz等)の"すき間の部分”は考慮しなくても、全て計算結果に出力されているということでよいでしょうか? 単一正弦波(60Hz)   ((最大値5388.9v=実効値3810.5v)、サンプリング3.84KHz=1サイクル64点)   (実効値換算式=前半の√(実数^2+虚数^2)の合計/(FFTデータ数/2)/√2) (1)FFTデータ数 64個⇒0Hz(0.00~1905.2)???、60Hz(1905.2),120Hz(952.6)、180Hz(0.0)、          ⇒合計( ??? ) (2)FFTデータ数128個⇒0Hz(0.0), 30Hz(952.6),60Hz(1905.2),90Hz(952.6), 120Hz(0.0)、          ⇒合計(3810.4) ≒実効値 (3)FFTデータ数256個⇒0Hz(0.0),15Hz(0.0),30Hz(0.0)、                45Hz(952.6),60Hz(1905.2),75Hz(952.6), 90Hz(0.0),           ⇒合計(3810.4) ≒実効値

  • フーリエ変換

    画像中の2段目の式(B(t)のフーリエ変換)はどのようになるでしょうか. 1段目の式はB(t)の定義を表し, 3段目の式は2段目の式がこうなってほしいなぁという私の願望です. なお, tは時刻, オメガは角周波数, iは虚数, デルタは定数とします. また, Rは虚数の実部を指す記号とします. A(オメガ)は実数関数で偶関数とします. 以前も同様の質問をしたのですが, そのときの回答者様の回答を参考に自分なりに計算した結果, 2段目の式は, A(オメガ)cos(デルタ), となりました. しかし, この2段目の式はある物理現象を表したものなのですが, その物理現象の実験結果から考えると, B(t)のフーリエ変換は画像の3段目の式になってほしいのです. やはり2段目の式はA(ω)cos(デルタ)なのでしょうか. 何かの仮定やうまい計算方法を利用すれば, 3段目の式が答えになるのでしょうか. お力を貸して頂ければ嬉しいです. 宜しくお願いします.

  • FFT処理後のデータの変換について

    時間-加速度波形を、例えば、EXCELでのFFT処理でもって、 実数+虚数とし、これをIMABSという関数で実数化して (周波数-)パワースペクトル?に変換することができますが、 これを、(周波数-)加速度にさらに変換するにはどうすればよいのでしょうか。 FFTアナライザなどFFTをリアルタイムでかけられる機器はありますが、 FFT処理後、どのような過程(計算)を得て、Y軸はdBそして加速度等に標記されているのでしょうか。 教えていただけないでしょうか。

  • 複素数と実数が混在するように見える式について

    時系列解析で、自己相関係数のフーリエ変換がパワースペクトルになるというウィナーキンチンの関係というものがあります。その式では複素数が含まれているので、実数を入力として複素数が含まれている式で計算された出力結果は普通は複素数ということになります。しかし、自己相関係数は実数の系列で、パワースペクトルも実数になると思います(実部と虚部の2乗和なので)。実数に複素数を絡ませて変換して出てきたものが実数になるということになってしまいます。ここが理解できないのですが、どのように考えていくのでしょうか。絶対に虚部がゼロになるから、ということなのでしょうか。 一般にFFTによるスペクトル変換では実数列は複素数の実部にあてて変換する(例えば虚部はゼロにしておくとか)ので複素数から複素数を入出力するということで理解できます。 実際にプログラムでの処理を考えているので概念的な説明だけでは実装することできません。 なお、私は常に標準的なFFTでフーリエ変換しているので複素数での入出力ということなので実数となる系列では先に進めないという感じなのですが。もし出力が実数ということになったとき実部がそれ、虚部がそれ、実部と虚部の2乗和がそれ、というのならわかるのですが。 よろしくお願いします。

  • 【エクセル】株価をフーリエ変換し、波を三つ作りたい

    ※実際はドル円ですが、タイトルの文字数制限の関係で株価と表記することにします エクセルで株価の終値のデータ、128個用意したものをFFTしました。 A0=FFTの実部÷128 // 解析する周期2L=128 A1~A127=FFTの実部÷(128÷2) // 解析する周期2L÷2=128÷2 B1=(-1)*FFTの虚部÷(128÷2) // 解析する周期2L÷2=128÷2 振幅A゜1~A゜63(ナイキスト周波数を考慮して前半A゜0~A゜63のうち、A゜0を除いた)についての棒グラフを作成(→振幅スペクトルのグラフ) ※振幅A゜nはフーリエ係数Anと区別するために別の記号を用いた 振幅スペクトルで大きいほうから3つ(取り出し方はVLOOKUPで取り出したとする)を取り出し、それぞれの波を株価グラフ(折れ線)上に描きたいのですが、どうすれば良いのでしょうか? そこだけが分かりません。 画像が荒くてすみません。