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

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

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

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

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

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

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

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

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

質問者からのお礼

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

その他の回答 (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をかける理由を)教えて頂けないでしょうか。

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

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(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をかける理由を)教えて頂けないでしょうか。 当方、数学についてはあまり詳しくないため、簡単に説明して頂けると幸いです。

  • 標本化定理(サンプリング定理、ナイキストノ定理)について

    標本化定理(サンプリング定理、ナイキストノ定理)について教えてください。 ”あるアナログ的な信号をデジタルデータにサンプリングする場合、原信号の各周波数成分をすべて正確にサンプリングするためには、原周波数の2倍以上のサンプリング周波数が必要となる。これを標本化定理という。”というのが基本的な説明だと思います。 この中で『2倍以上の』という表現がありますが、この点が疑問になっています。 例えば、20kHzのSin波を40kHzでサンプリングしたとして、サンプリングする点が丁度サイン波の振幅0の点だった場合、元のSin波の周波数は分かりますが、振幅は一意に決められないと思います。原信号を振幅も含めて復元するには、『2倍より大きい』周波数でサンプリングする必要があると考えるべきでしょうか?『2倍以上』という表現は厳密には正しくないと考えて良いのでしょうか? また、そもそもサンプリング定理は振幅情報を再現しないということであれば、疑問は解消されるのですが、その点はどうなんでしょうか?? どなたかご教授の程お願いいたします。

  • FFTを使って異なるサンプリング周波数での周波数強度について

    100Hzのsin波に対してFFTを行い周波数スペクトルを出したときのことです。 解析条件 サンプリング周波数・・・・44.1kHz , 22.1kHz FFTの点数・・・32768点 窓関数・・・ハニング窓関数 まず、サンプリング周波数44.1kHzで解析を行い、100Hzにメインローブが現れていました。 次に、サンプリング周波数22.1kHz以外は同様の解析条件で解析を行ったのですが、サンプリング周波数44.1kHzに比べて、100Hzのスペクトル強度が下がっていました。また、サイドローブは44.1kHzに比べて上がっていました。 スペクトル強度がサンプリング周波数によって変化するというのはありえるのでしょうか? それとも、私の組んでいるプログラムが間違っているという事なのでしょうか?どなたかご教授下さい。よろしくお願いします。

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

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

  • 振幅スペクトル グラフ

    振幅スペクトルが X(Ω)={1, |Ω|<ΩB,0, |Ω|>=ΩB である連続信号x(t)を考える.連続時間信号に含まれる最大周波数が10kHzの時,(a)32kHz,(b)16kHzでサンプリングした際のグラフの描き方を教えてもらえませんか?範囲は-50kHz~50kHzです.ΩBは原信号の最大角周波数です.周波数領域での位相がゼロである信号を仮定する.

  • 20kHz正弦波をCDで再生するとどうなりますか

    デジタル音響の開発者または詳しい方への質問です。 今更ですが、CDにおける高周波成分の再現性について疑問があります。 サンプリング周波数の1/2以下の周波数しか記録・再生できないというサンプリング定理については、ある程度理解しているつもりです。 また、サンプリング周波数の1/2以上の信号をAD変換するとエリアシングが発生するということも、原理として理解しています。 疑問は44.1kHzで20kHzないしそれに近い周波数の信号をサンプリングして記録し、記録したデータをDA変換した場合、どの程度忠実に原波形が再現できるかということです。 20kHzを44.1kHzでサンプリングすると、1周期に2.205回しかサンプリングできません。サンプリングデータを直線でつないでも、原周波数成分は残るものの、正弦波とはかけ離れた波形になってしまいます。 20kHzまで聞こえる人は稀ですし、聞こえても相当減衰しているので、音楽再生では大きな問題にならないかもしれませんが、13kHzだと大抵の人は聞こえるし、感度もある程度あります。13kHzの場合、1周期のサンプル数は約3.4個になりますが、これでも正弦波とはかなり違います。 仮に、まずまず正弦波に近いと言えるのが1周期5サンプル以上だとすると、44.1kHzで正弦波として記録再生できるのは、せいぜい9kHz程度ということになってしまいますが、なにか考え違いをしているでしょうか? あるいは、高度なデジタル信号処理技術によって、20kHzないしそれに近い周波数も正弦波に近い形で再現できるのでしょうか? サンプリング周波数の1/2に近い高周波信号の記録・再生について図解しているサイト等があればURLをご提示いただけると幸いです。 当方、↓このようなサイトは見つけました。 http://www2.oninet.ne.jp/ts0905/deeg/deeg11.htm

  • 1bitΔΣ型DA変換のノイズ成分について

    表題に関連して、以前何度か質問させて頂いております。理解は少しずつ進んでいると思うのですが、まだ十分わかっておりません。再度の質問をお許しください。オーディオ関連の質問ですが、音質の善し悪しとは無関係の純粋に技術的な興味ですのでこちらのカテゴリで質問させて頂きます。 << 背景 >> 疑問の発端は、1bitΔΣ型DA変換が何故fs/f以上の分解能が得られるのか、という点です。例えば10kHzの正弦波を3Mbpsのビットストリームで表現しようとする場合、fs/fは300倍しかありませんが、現実には16bitを超える分解能を実現できています。何故そんなことができるのか、オーディオ用のΔΣ型DA変換が登場した何十年か前からずっと疑問に思っておりまして、これを理解したいと思っています。 前回ここで質問させて頂き、1bitΔΣ型DA変換ではノイズシェーピングのフィードバック動作によって10kHzの正弦波が毎周期同一とはならず、その結果高い分解能を得ているらしい、という所までわかってきました。今回の質問は、このノイズシェーピング動作が低周波のノイズを発生することにならないか、という疑問に関するものです。 << 質問 >> 3Mbpsの単純なPDMでは2^16通りの振幅の10kHzの正弦波を表現できませんら、1bitΔΣ型DA変換ではノイズシェーピングのフィードバック動作により10kHzの正弦波に低周波の揺らぎを与ているのだと思います。そうだとして、ノイズシェーピングのフィードバック動作によって生じる低周波の揺らぎは、スペクトルとしては低周波の成分を持たず、その後理想のLPFを通せば理論的には揺らぎは除去されて、10kHzの、振幅を調整された、安定した正弦波になるのでしょうか? ======================= 低周波の成分を持たない低周波の揺らぎというのは、AM変調された高周波のようなものを想像しています。 << 補足 >> アナログ信号をデジタル化する場合、横(時間)軸と縦(振幅)軸を量子化すると思います。時間軸の量子化はサンプリング定理で説明されますが、縦(振幅)軸を量子化について説明したものは少ないような気がします、縦(振幅)軸にもサンプリング定理のような説明があると良いのですが。

  • 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とかにしてデータを小さくしたらいいんですか?でもそれだとデータが整数じゃなくなってしまいますよね?どうしたら振幅を変えられるのでしょうか?どなたかご教授願います。

  • フーリエ変換の振幅について教えてください。

    エクセルアドインを使って下記サイン波をフーリエ変換しました。 振幅3mm、周波数4Hz、サンプリング周波数256Hzの波形であり、 つまり、フーリエ変換したい波形は3×SIN(2×PI()×4)です。 アドインでフーリエ変換を行い、出てきた複素数の絶対値つまり√(実部^2+虚部^2)を計算すると3を示すと思っていたのですが、実際は周波数4Hzで384 という値になりました。 周波数分析して周波数4Hz時の振幅が3となるようにするには振幅はどう計算すればよいのでしょうか?またいろいろな振幅や周波数の混ざったランダム波でも各周波数での振幅を求めるにはどう計算したらよいのでしょうか?素人ですが教えてください。