• ベストアンサー

二つの波形の合致を調べる方法は?

波形解析について初心者の為、分かりづらいかもしれませんが宜しくお願い致します。 例えば、Excel等で単位の異なる二系列の折れ線グラフを描画したとします。 この二つのデータの波形が、どれくらい似ているかを調べるにはどの様な方法があるでしょうか。 解析ツール等を使うという方法ではなく、具体的な計算方法を教えて頂きたいのです。 二つの波形間を積分して、その面積を求めれば良いのか、フーリエ解析をすれば良いのか。。。等など通常はどのように解析しているのか、考えても良く分かりません。 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • tatsumi01
  • ベストアンサー率30% (976/3185)
回答No.1

時間的に伸縮はしていないと仮定して話をします。 二つの波形(ディジタル)を x(k),y(k) (k=0,1,2,...,N-1) とします。 二つの波形の相関は R = Σ x(k)y(k) で定義されます。Σは 0 から (N-1) までを取ります。 R が大きければ二つの波形は似ているのですが、残念なことに一方の波形の振幅が大きいとき、似ていなくても R が大きくなります。 そこで、類似度 S = R / (PX PY) を計算します。PX, PY は波形の二乗和の平方根です(自分自身との相関の平方根と言うこともできます)。 一般に 1 ≧ S ≧ -1 で、S = 1 になるのは、二つの波形が正定数係数を除いて一致するときです。したがって、S の大きさにより類似性が判定できます。 なお、以上は時間的にずれがない場合です。ずれがあり、しかも未知の場合は R = Σ x(k)y(k) の代わりに R = Σ x(k-d)y(k) をいろいろな d について計算し、R が最大になるような d が二つの波形のずれであると考えます。 二つの波形の間で時間的に伸縮のある場合は、長さを揃える(正規化)が必要です。 一番難しいのは、時間的に伸縮していて、しかもその伸縮が時間的に一様でないときです。音声認識でDTW(Dynamic Time Warping)と呼ばれる手法があり、技術として確立しています。動的計画法(Dynamic Programming)を使います。

shelly11
質問者

お礼

ご丁寧なご回答、本当にありがとうございました!! 数学的にどう計算して良いのか、さっぱり分からずでしたので、とても助かりました。 この方法で調べてみようと思います。

関連するQ&A

  • 二つのデータの波形が似てるかどうかの判定方法

    以前、物理学の方で質問させて頂いたのですが、教えて頂いた方法で上手くできなかった為、こちらの方で再質問させていただきます。 波形解析について初心者の為、分かりづらいかもしれませんが宜しくお願い致します。 例えば、Excel等で単位の異なる二系列の折れ線グラフを描画したとします。 この二つのデータの波形が、どれくらい似ているかを調べるにはどの様な方法があるでしょうか。 解析ツール等を使うという方法ではなく、具体的な計算方法を教えて頂きたいのです。 二つの波形間を積分して、その面積を求めれば良いのか、フーリエ解析をすれば良いのか。。。等など通常はどのように解析しているのか、考えても良く分かりません。 どうぞ宜しくお願い致します。

  • 波形のギャップ分析の手法

    ざっくばらんな質問で申し訳ありません。 二つの同じ時系列で進んでいる波形があります。 この二つの波形は単位が異なり、(例えば片方が0~100、もう片方が0~0.1の間の値をとります) 波形が大きく異なる箇所を見つけたいのです。 どれ位違ったら、大きく異なる箇所とするか。。。等色々と問題はあると思いますが、思いつく計算方法等を教えて頂けると助かります。 どうぞ宜しくお願い致します。

  • 音声波形データのグラフ化について

    音声波形データのグラフ化について 開発環境:Visual C# 入力音声データ:ステレオ 16bit 44100HzのWAVデータ 目標:Windows Form上に音声の波形データをグラフ描画(折線グラフ)し、波形エディタのようなガイドライン機能を付加する。 まず、グラフ化を行う際、1秒間に44100個のデータがある場合、データのプロット数が非常に多くなってしまい、秒数次第では波形の全体描画にとても時間がかかってしまうと思うのですが、こういった場合、どのようにグラフ化するとよいのでしょうか? また、波形上に波形エディタのようにガイドラインを表示して、ガイドラインの時間における音声データの出力値も表示したいと思っております。 ガイドラインの移動はトラックバーによる移動を考えているのですが、プロット数が多くなると、上記の問題により再描画が追いつかず、スムーズなガイドライン移動ができません。 現在、グラフライブラリであるNPlotやZedGraphを使用して、グラフ描画を行ってみたのですが、どちらもプロット数が多くなると、描画自体にとても時間がかかるようになってしまい、ガイドラインの移動なんて出来たものではありません。 良いやり方、また、参考になるサイト、サンプルなどありましたら、 どうか教えていただきたく、よろしくお願い致します。

  • 2つの波形の重なり部分の面積を求めるには

    (x,y)座標の表形式のUV可視スペクトルデータが2つ(波形A,波形B)あります.例えば, 波形Aは,xの範囲が400~700nmで2nmきざみ, 波形Bは,xの範囲が500~1000nmで0.3nmきざみ,とします. 波形Aと波形Bは,ともに500~700nmのx領域をカバーしていますが,全く同一のx座標を持つデータ点そのものはあまりありません. このとき,波形Aと波形Bの重なり部分の面積(500~700nm)をできるだけ簡単に求めるにはどうしたらよいでしょうか?解析的に求めるのではなく,市販のプログラム(Igor,Origin,Excelなど)を用いてよいので,近似的な面積を簡単に出す方法を探しています. x座標が一致したデータ点を持つ2つの波形であれば,各点で計算すればExcelでも簡単にできます.x座標が一致しないとお手上げです.2つの波形を1つのグラフにプロットして印刷し,共通部分を切り抜いて重さを測ることならできるのですが,もっといいやり方がきっとあるはずだと思うのです.

  • 折れ線グラフの描画方法

    折れ線グラフの描画方法で悩んでいます。 jfreechartを使おうと思ったのですが、調べてみたところ折れ線グラフを2本以上描画できないと書いてあるホームページがあり、どうしても2本以上のグラフを比較する必要があるので使えそうにありません。 何か良い方法はないでしょうか。

    • ベストアンサー
    • Java
  • Excelグラフで面積を求める方法を教えてください。

    Excelグラフで面積を求める方法を教えてください。 Excel2003を使用していますが、面グラフを作成した時、その塗りつぶした面積を計算させる方法はありませんか? もしくは、グラフの作り方を変えて簡単に作成できる方法はありますか? 今の作り方は、1時間ごとに数値を記入し、それをプロットして折れ線グラフをつくり、 手計算で面積を求めています。

  • 波形の処理について[フーリエ解析]

    現在、数値解析により地盤モデルに振動を与えたときの地表面での鉛直変位波形の解析を行っています。 そこで1つ疑問があります。 鉛直変位波形からある周波数のみの波形を取り出す場合、フーリエ変換-フィルター処理-逆変換をするとある周波数の波の時刻成分が失われると思うのですが、時刻成分が失われない方法はないでしょうか? よろしくお願いします。

  • エクセルの棒グラフで0の時、系列名を表示しない方法

    エクセルで積み上げ棒グラフと折れ線グラフの2種類のグラフを作成しています。 折れ線グラフの方は問題ないのですが積み上げ棒グラフの系列名を表示させると 数値が0の場合も系列名が表示されて重なり合ってすごく見づらくなってしまっています。 ツールのオプションでプロット設定を変更しても何も変化ありません。 0の所は系列名を表示されないようにするにはどうしたらいいでしょうか? どうぞ宜しくお願い致します。 エクセル2000を使用しています。

  • Excel 折れ線グラフのデータ描画時間を改善したい

    Excel 折れ線グラフのデータ描画時間を改善したい Excel 2003を使用しています。 15000行20列ほどのデータを折れ線グラフとして表示していますが 系列が20と、データ数が膨大なためグラフの描画時間がかかってしまいます。 グラフデータを図面化するなどといった方法で、 なんとか描画時間を少なくしてExcelオープン時の負担を軽くしたいのです。 よい方法をご存知の方は教えてください。 よろしくお願いします。

  • 矩形グラフ(オシロやロジアナのような)を作成する方法

    WindowsXpSp3 Excel2002Sp2 ChartSpace(OWC11) を使用しています。 Excel上のフォームで、ChartSpaceを使用してグラフを表示させています。 現状、折れ線グラフでの表示は問題なくできています。 折れ線グラフですとポイントとポイントをつなぐ線が斜めになります(当然ですが)。 これを、オシロスコープの波形やロジックアナライザーの波形のように矩形で表示する方法がありますでしょうか(図を添付します)。 色々と調べたり試してみたつもりなのですが、うまくいきませんでした。 「不可能」という回答でもいいですし、「こういった方法、こういったツールでできる」という回答でもいいです。 よろしくお願いします。