- ベストアンサー
フーリエ変換後に実効値を求めるには?
ノイズ波の位相演算するためにフーリエ変換した後で、数サイクル前との複素数引き算をしてから、その「実効値」を求めたいのですが、どの式が正解なのでしょうか? (1) √(実数^2+虚数^2)/(FFTデータ数/2)/√2 (2) √(実数^2+虚数^2)/√2 (3) √(実数^2+虚数^2) (4) その他? なお、これまで(1)と認識して、基本波のみで算定していたのですが、どうも実測値より小さいようなのです。 波高値/√2=実効値とは思いますが、√2が必要なかったりするのでしょうか?
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
「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が混入した かどうかの判断はできません。)
その他の回答 (8)
- DCI4
- ベストアンサー率29% (448/1540)
あまり理論的によく分かっていないのですが ★これみて やるほうがよいでっす 定番教科書←最初の解説本はこれあたり 科学技術出版社 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
お礼
ありがとうございます。 やはり、理論が必要ですよね。頑張って勉強してみます。
- foobar
- ベストアンサー率44% (1423/3185)
サンプリング前に、サンプリング周波数の1/2以上の成分を十分除去するというのは >FFT結果の1/2以上の周波数成分(前半の対称分)を無視するということと同じでしょうか? ではありません。 例えば、1kHzサンプリングで800Hzをサンプリングすると、サンプリングされたデータには200Hzの成分として現れて、元々信号に含まれていた200Hzの成分と区別できなくなります。 これを防ぐために、予めサンプリング周波数の1/2以上の成分は十分除去しておく必要があります。
お礼
なるほど、フィルターで除去が必要ということですね。 今回、サンプリングが3.84kHzなので1.92kHz以上をカットするLPFを入れているつもりなのですが、その時にFFT結果の1.92kHz以上に数値が現れる時は、十分カットできていないということでしょうか?それとも数%程度はあり得るということでしょうか?
- foobar
- ベストアンサー率44% (1423/3185)
>>周波数範囲全体について二乗和を計算する >とは、2乗平均平方根(rms)するということでしょうか? rmsの計算(二乗和平均の平方根をとる)です。 あと、大前提として、フーリエ変換する前のデータはサンプリング定理を満たしている(サンプリングする前に、サンプリング周波数/2 以上の周波数成分はカットされている)は満たしているとしています。 (これが満たされないと、折り返しノイズ(エリアス)の問題が出てきますので。)
お礼
たびたびありがとうございます。 >FFTの結果をrms()とは、 複素数の絶対値(2乗和の平方根)を求めて、それを周波数範囲(64/2=32個)のrms(2乗和平均の平方根)をするということですね。 >サンプリング周波数/2以上の周波数成分はカットされていること とありますが、FFT結果の1/2以上の周波数成分(前半の対称分)を無視するということと同じでしょうか? それともローパスフィルターでカットされていれば、FFT結果の全域(右対称分も)でrmsが必要で無視してはいけないということでしょうか。
補足
お礼(続) もしくは、 >FFTの結果をrms()とは、 先に32個の複素数の和をしてから、それを絶対値(2乗和の平方根)にするのではないでしょうか? 絶対値してから、32個のrms()とると大きすぎる値となりました。
- DCI4
- ベストアンサー率29% (448/1540)
ノイズ波←標本化定理どうり 帯域制限された正弦波の合成とは限らない とは、FFTのデータ数(64点)に分解した結果のみの積算では、その隙間の値が入っておらず、グラフの面積には足りないいうことでしょうか? ☆回答 ちがいます DFT ですから ざっくり 注意点は以下となる (1)測定ノイズ波の帯域の制限 ノイズ波の帯域と サンプリングの関係が満たされていなければと言うこと 正しく帯域制限されてなければ ノイズ波の帯域により サンプリングしたノイズ波のデジタル時系列データには折り返し歪み分があるという意味 (2)また測定波形データーの打ち切り誤差が生ずる 無限につづく波形を有限個で切り取っている仕組み 検索キーワード; 窓関数 (3)FFTの式の 積分式を確認 ソフトにより FFTの関数により係数定義がちがう場合がある ・・・・・・・・・・・おしまい・・・・・・・・・
お礼
すいません。あまり理論的によく分かっていないのですが、 (1)サンプリングについては、基本波1サイクルを64点に分解しています。帯域制限をしているつもりはないのですが、FFT結果の後半は同じ形のため"捨てる"ということでよいでしょうか。 (2)打ち切り誤差については、ハニング窓関数を入れていますが、その種類により値が変わるのでしょうか。 (3)FFTの積分式については確認する方法が分からないのですが、EXCELのFFT結果(実数・虚数)とMATLABのFFT結果(実数・虚数)では、全く同じでした。その絶対値を/32/√2した実効値では、基本波のみでは小さすぎるし、前半の総計では大きすぎるし、。。。
補足
お礼(続々) あちらこちらでご助言ありがとうございます。 いろいろやっていくうちに単なる入力間違いもあったりして、ノーマル正弦波を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)
FFTでは波形を各周波数の正弦波の集まり(分布)に分解しています。だもんで、実効値を計算するには求めたい信号の周波数範囲全体について二乗和を計算する必要があります。
お礼
やはり、一点だけの複素数の絶対値だけではダメなのですね。 ただ、FFT結果の中心値までで積算和しても逆に大きすぎるようなのですが、 >周波数範囲全体について二乗和を計算する とは、2乗平均平方根(rms)するということでしょうか? それとも、そのまま2乗和するのでしょうか。
- DCI4
- ベストアンサー率29% (448/1540)
ノイズ波の位相演算するため。。。うんぬん ~その実効値を求めたい ★回答 ノイズの実効値とは (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)となります。 正弦波のばあいだけでっす ノイズ←正弦波に完全分解すれば計算可能 ノイズ波←標本化定理どうり 帯域制限された 正弦波の合成とは限らないです ざっくり言えば 波形を積分して求める数値 数量でっす →その波形の区間 グラフの面積でっす 検索キーワード;雑音電力スペクトル など参照
お礼
ありがとうございます。 >ノイズ波←標本化定理どうり 帯域制限された正弦波の合成とは限らない とは、FFTのデータ数(64点)に分解した結果のみの積算では、その隙間の値が入っておらず、グラフの面積には足りないいうことでしょうか? FFTから実効値を出すのは無理があるのでしょうか。
- foobar
- ベストアンサー率44% (1423/3185)
補足 今使っているFFTがどのような形式で出力しているのか不明な場合には、一旦きれいな制限は信号を入れてみて、演算結果がどうなっているか、を確認されるのが良いかと思います。 その結果を見て、(とりあえずどういう形式で表示しているかは置いといて)換算係数を決定すれば、実務上はなんとかできそうに思います。
お礼
なるほど、分かってる正弦波を入れてみるのですね。計算した正弦波を作ってやってみます。実効値から逆算して波形を作るのが難しそうですが。
- foobar
- ベストアンサー率44% (1423/3185)
その変換の出力がどのように計算されて表示されているかによるかと思います。 単に、実効値(または振幅)で表示されているなら、必要な帯域幅内で 実部^2+虚部^2 を積算し、それの√(または1/2して√)で良いかと思います。 周波数密度で出力(縦軸の単位に1/√Hzが含まれる)されている場合には、(実部^2+虚部^2)*データの周波数幅 を積算することになるかと思います。
お礼
さっそくにありがとうございます。 >その変換の出力がどのように計算されて表示されているかによるか 今のところ、実機の内部の演算式が詳細までわからないので、模擬しようとしているのですが、フーリエ変換後に位相角と実効値を出すのですが、その結果の縦軸(スペクトル?)の単位は分かっていません。 まず位相角は、fft()後の基本波成分の実数と虚数からangle()もしくはatan2()を使って出しています。続いて、実効値はrms()を使うと分かりやすいのですが、複素数の引き算後となるため、 √(実数^2+虚数^2)/(FFTデータ数/2)/√2 で出そうとしていました。rms()に対すると、基本波のみでなくすべての成分を積算する必要があるのでしょうか?
お礼
なるほど、まずはサンプリングfの1/2以上の部分はフィルターで十分カットしておく必要があるということですね。 そのうえ、FFT結果の1/2までを有効とし、1/2以上の対称分は無視するということですね。フィルターの性能を確認してみます。 最終的には、その前半分すべてを (1)√(実数^2+虚数^2)/(FFTデータ数/2)/√2 (→の合計) すると、実効値が出せるのでよいでしょうか。 なお、前回でも、FFTデータ数が128個の場合は実効値がほぼピッタリ合いましたが、FFTを64個で行うと合わなくなりました。1サイクル64点をFFT64点でするとダメなのでしょうか?