• ベストアンサー
  • 暇なときにでも

振幅を求めるのに最適な窓関数

サンプリング周期1usで収集した10万点(0.1秒間連続測定)のデータがあります。 これは正弦波信号+ノイズというもので、正弦波の周波数は約100kHzです。 この正弦波の時間的なゆらぎを求めたいので、例えば5万点づつにデータを分割し、その5万点にDFTを行ってピークとなる振幅を求める方法を考えました。 この場合5万点のデータ数だと周波数分解能は100Hzとなるため、もし本来の周波数が例えば100.03kHzだとするとその振幅情報は本来の振幅に比べてかなりずれてしまいます。 これは解析対象区間に含まれる正弦波の数が整数個でないことに起因するのですが、このような場合窓関数を使うように言われていますが、振幅の誤差が1%以下とするためにはどのような窓関数を使ったらよいでしょうか? または、別の方法で振幅を1%以下の精度で求められるという情報でも助かります。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数914
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.2
  • Julius
  • ベストアンサー率77% (168/216)

うーむ、どうやら私の回答は既に御存知のことのようで、 余り参考にならなかったようですね。 >Juliusさんの場合、方形窓を使用した時の振幅の誤差は最大で >どの程度になりますでしょうか? ごめんなさい。10年前なら数式をいじる根性がありましたが、 現在の能力ではどの程度の誤差になるか見積もれません。 ただ経験からいって、NMRではどのウィンドウズ関数を使っても、 数10パーセントの誤差はざらに出ます。 他のURLを見つけましたが、参考になりますか?

参考URL:
http://www.ericweisstein.com/research/thesis/node37.html

共感・感謝の気持ちを伝えよう!

質問者からのお礼

新しいURLにはたくさんの窓関数が載っていますね。 内容を細かくは見ていませんが、1つ1つ確かめてみようと思います。 Gaussianは他の信号処理でもノイズ除去効果が高いという話を聞いたことがあるので、可能性が高そうな気がします。 ありがとうございました。

関連するQ&A

  • 窓関数(方形窓)について

    EXCEL上でFFTをする際に窓関数を使用したいのですが、方形窓について教えてください。これは取り込んだデータにすべて1をかければよいのでしょうか?あと、方形窓を使用すると周波数分解能があがる?というようなことが調べたらのっていたのですが、どういうことなのでしょうか?どなたかお答え下さい。

  • 単振動+ホワイトノイズの時のFFTの振幅

    振幅ルート2(実効値1)の正弦波(周波数f)に標準偏差が0.1のガウシアンホワイトノイズが重畳したとき、FFTで算出される周波数fの振幅はどう変化するのでしょうか?(窓関数による誤差は無視した場合) よろしくお願いします。。 感覚的には(1^2+0.1^2)^0.5なのですが・・・・

  • ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値に

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(k=0~N-1) f(k)exp(-2πkni/N) を考えています。 また、離散フーリエ変換して得られるスペクトルは √(Re^2+Im^2) で計算します。 離散フーリエ変換を適用する関数を、 振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。 (この2つの信号は別々の信号で合成されていません。) サンプリング周波数を20[Hz]とした場合、サンプリングして得られるデータ列はそれぞれ、 直流: 「1, 1, 1, 1」 正弦波: 「0, 1, 0, -1」 となると想定されます。 (正弦波をサンプリングする場合は位相が関わってきますが、今回は気にしないで下さい。) このデータ列に対して上記の離散フーリエ変換を適用した場合、 得られるフーリエスペクトルの振幅値はそれぞれ、 直流: 「4」(直流のフーリエスペクトルの振幅値値) 正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値) となります。 (データ点数は上の通り4点) ここで質問なのですが、 離散フーリエ変換して得られるスペクトルの振幅値から元の関数の振幅値を求める場合、 フーリエスペクトルをサンプリングの総データ点数で割ることは数学的に納得できます。 しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、 直流: 「4 -> 1」 正弦波: 「2 -> 0.5」 となってしまい、直流は正しいのですが、正弦波の元の振幅値を正確に求めることは出来ません。 この例の場合、フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、 「フーリエスペクトルの振幅値*2/データ点数」 としてやらなければいけません。 上記のことに関して、なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。 当方、数学についてはあまり詳しくないため、簡単に説明して頂けると幸いです。

その他の回答 (1)

  • 回答No.1
  • Julius
  • ベストアンサー率77% (168/216)

私は化学屋ですが、NMRでフーリエ変換にお世話になって おりますので、答えてみます。 主成分周波数の振幅だけを求めたいのでしたら、 間違いなく方形窓でしょう。 参考URLでいくつかの窓関数の比較がされています。 ちなみに普段NMRでは、デフォルトでGaussianを使っております。 積分値がそれなりに正確に求まりますので、複数の位相の振幅を 求めるのであればガウス窓を用いるのがきっと良いのでしょう。 ところで誤差というのは振幅の誤差のことですよね? 周波数の誤差ではないですね?

参考URL:
http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap9/

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 >ところで誤差というのは振幅の誤差のことですよね? そうです。正弦波の振幅の変動を求めたいと考えております。 通常DFTによる周波数解析の場合、対象データ数が有限であることに起因する誤差を低減する方法として、いつくかの窓関数が考えられており、方形窓、Hanning窓,Hamming窓などはよく使われるものだということは知っております。 Juliusさんの場合、方形窓を使用した時の振幅の誤差は最大でどの程度になりますでしょうか? 自分の計算では、振幅の誤差なら方形窓よりHanning窓の方が小さく、それでも最大で15%程度の誤差がでるようです。 #周波数やサンプリング周期、対象データ数により変わるかもしれませんが。 尚、最初の質問で周波数分解能を100Hzと書きましたが、1/(1us*5万)=20Hzの間違いでした。

関連するQ&A

  • フーリエスペクトルの振幅について

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの 振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(k=0~N-1) f(k)exp(-2πkni/N) を考えています。 また、離散フーリエ変換して得られるスペクトルは √(Re^2+Im^2) で計算します。 離散フーリエ変換を適用する関数を、 振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。 (この2つの信号は別々の信号で合成されていません。) サンプリング周波数を20[Hz]とした場合、 サンプリングして得られるデータ列はそれぞれ、 直流: 「1, 1, 1, 1」 正弦波: 「0, 1, 0, -1」 となると想定されます。 (正弦波をサンプリングする場合は位相が関わってきますが、 今回は気にしないで下さい。) このデータ列に対して上記の離散フーリエ変換を適用した場合、 得られるフーリエスペクトルの振幅値はそれぞれ、 直流: 「4」(直流のフーリエスペクトルの振幅値値) 正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値) となります。 (データ点数は上の通り4点) ここで質問なのですが、 離散フーリエ変換して得られるスペクトルの振幅値から 元の関数の振幅値を求める場合、 フーリエスペクトルをサンプリングの総データ点数で割ることは 数学的に納得できます。 しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、 直流: 「4 -> 1」 正弦波: 「2 -> 0.5」 となってしまい、直流は正しいのですが、 正弦波の元の振幅値を正確に求めることは出来ません。 フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、 「フーリエスペクトルの振幅値*2/データ点数」 としてやらなければいけません。 上記のことに関して、 なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。

  • H8マイコンでの正弦波の電圧振幅

    現在H8マイコンを用いて趣味で電子工作をしている者です。スピーカーを鳴らすために、H8マイコンのD/Aコンバータを用いて正弦波を発生させたいと考えております。私が持っている参考書では正弦波は以下のように発生させるものだと書いてあります。 unsigned char sindata[128] ={127,133,139,146,152,158,164,170, 176,181,187,192,198,203,208,212, 217,221,225,229,233,236,239,242, 244,247,249,250,252,253,253,254, 254,254,253,253,252,250,249,247, 244,242,239,236,233,229,225,221, 217,212,208,203,198,192,187,181, 176,170,164,158,152,146,139,133, 127,121,115,108,102,96,90,84, 78,73,67,62,56,51,46,42, 37,33,29,25,21,18,15,12, 10,7,5,4,2,1,1,0, 0,0,1,1,2,4,5,7, 10,12,15,18,21,25,29,33, 37,42,46,51,56,62,67,73, 78,84,90,96,102,108,115,121}; と定義して、(254が振幅の一番上、0が振幅の一番下、127がちょうど真ん中になります)このデータを割り込みを使って、自分の使いたい周波数の正弦波を出す、ということになっています。 ここでふと思ったのが、この正弦波は振幅5V(H8マイコンの動作電源が5V)しか出ないのではないんじゃないかと。振幅を変えるためにはどうしたらいいんでしょうか?上記の128個のデータを全て書き直すしかないのでしょうか?それとも×3/5とかにしてデータを小さくしたらいいんですか?でもそれだとデータが整数じゃなくなってしまいますよね?どうしたら振幅を変えられるのでしょうか?どなたかご教授願います。

  • 電流の振幅

    100Ωの抵抗器に周波数50Hz、実効値2Aの正弦波交流電流を流した時の 電流の振幅の求め方を教えて下さい。 出来れば、抵抗器の端子間電圧の実効値と周波数も教えて頂きたいです。 回答よろしくお願いします!

  • 振幅と周波数の関係について

    振幅と周波数の関係について 周波数とは1秒間の振動数の事ですよね?でしたら周波数をどんなに変えても振幅は変化することは無いということで正しいのでしょうか?

  • FFTを使って信号から特定の周波数を抜き去る方法

    FFTを用いてある時系列データから特定の周波数の成分を抜き去ろうと思っていますが、 うまくいかないのでお伺いします。 調べてみると、スペクトルを出すとき、例えば同じ振幅で周波数の異なるの正弦波を 10個入れても全て同じ振幅にならず、振幅の大きさにばらつきが出ていて周波数成 分の成分の推定がうまくいっていないようです。FFTの2乗のデータを小さな周波数区 間で積分してスペクトル密度にしても、先ほどの10個の正弦波の振幅がそろわない のと、周波数推定が悪くなりうまく、引き去れなくなっています。 よくある状況だと思いますが、どういう工夫が必要なのでしょうか。 ちなみに、FFTのルーチンはnumerical recipeとFFTWの二つで試しました。

  • 発振回路の『正弦波』出力について

     とても困っているので質問させていただきます。  RC発振回路を作成して低周波正弦波を出力させる、というものなのですが、『なぜ正弦波が出力されるのか』が分かりません。  RC発振回路を載せているいくつかの本やWebサイトに当たった所、発振の振幅条件や発振周波数決定の周波数条件については書かれており理解できたのですが、肝心の『なぜ正弦波出力になるのか』が分かりません。  例えば回路に電源を入れた際の過渡現象などによるゆらぎが、発振に成長すると思うんですが、そのゆらぎがどう変化して正弦波に整えられるのか、その過程が知りたいのです(参考書などではいきなり正弦波グラフが描かれてたりして、それについて全く解答が無い)。  なお、実際には当方は、増幅器にはトランジスタを用いた反転増幅器、位相器にはCRハイパスフィルタ3段で180度位相を変える進相型を用いています。  詳細な式や文献、Webサイト、論文等でも良いですので、教えていただければ幸いです。

  • 離散フーリエ変換の周波数分解能

    失礼します。 DFT(離散フーリエ変換)について質問させてください。 DFTの周波数分解能は時間領域でのデータが持つ幅の逆数で決まりますが、 この周波数分解能で表現されなかった周波数成分はどこに行くのか教えていただけないでしょうか? DFTでの離散的な周波数の間にある成分はどこへ行くのか? 単純に考えて、DFTは形としては級数和なので、 それらの成分はどこかに畳み込まれているように思うのですが、 表現されない周波数成分の情報は消されたりするのでしょうか? よろしくお願い致します。

  • エクセルで周波数の解析?

    いくつかの周波数の正弦波のデータがあるのですが、これをエクセルでグラフにしました。これから、位相とそれぞれの振幅を調べたいのですが、エクセルでこれは計算できるのでしょうか?可能ならどのように行うといいのでしょうか・

  • 伝達関数の縦軸(振幅)の意味は?

    モード解析のために、ハンマリング試験とランダム加振試験で伝達関数(FRF)を 算出しました。しかしこの縦軸の意味がわかりません。 まず伝達関数の振幅が、入力と応答の振幅比だというのはわかります。 すなわち正弦波を与えた時の応答と入力の最大振幅の比だというところまではいい のだと思います。しかし構造物を正弦波加振した時の応答は、当初過渡的な応答を 示した後に定常応答(=調和振動)に収束するものと振動学で習いました。 とすると、この伝達関数の振幅は応答のどの数値を用いて算出されているのでしょうか? 1.応答が調和振動に収束した後の、正弦波応答の最大振幅 2.インパルス応答の減衰波形における、窓区間内の全ての周期の最大振幅の平均値 3.それ以外 込み入った質問ですが、よろしくお願いします。

  • 周波数応答

    制御理論において周波数応答というのがありますが、 周波数応答とは正弦波を入力したとき、その正弦波の周波数によって 順次変化する定常時の出力のことですよね? さらに、伝達関数の周波数応答を調べれば周波数特性が得られ、 システムの安定、不安定が班別できるようになる ということなのですが、 正弦波を入力した場合だけしか考えなくて良いのですか? このままだと、正弦波を入力した場合の システムの安定、不安定しか班別できなくて、 正弦波をいくつも重ね合わせたような不規則な 波の入力をしたときの周波数応答が分からない と思うのですが・・・。

専門家に質問してみよう