
ADCでデータa[n],b[n]を取り込み、「取り込んだ信号が一定以上になってから一定期間」の2つの信号が同じか違うかを比較したいです。
ただし、まったく同じ信号ではないためa[n]-b[n]だと0にはなりません。(ノイズや測定誤差)
また、a[n]とb[n]は多少位相がずれているため、位相を合わせる作業も必要です。(これは現在何とかやってますが、完全に一致はしませんので、それでも比較できる方法があれば・・・)
今現在は積分して誤差1割まで許容してますが、似た波形でも1割以上の誤差になることも結構あり、困っています。(特に小さい波形の場合は一致する確立が低い)
また、積分では面積が似ているかどうかを判断しているだけなので、やりたいことと少し違うかな?と思ってます。
このように波形の形状を比較する場合は普通はどのような処理をするのでしょうか?
人間が波形を見て波形を比較し、似ているか似ていないかを比較するのはいったいどのような原理なのか分かればいいのですが。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
> コヒーレンシという手法がいまいちよく分からないです。
> 単純に各周波数ごとの値を比較する事でしょうか?
コヒーレンシまたはコヒーレンスというのは、二つの信号がどの程度一致しているかを表す指標のようなもので、1であれば完全に一致、0であれば全く一致しないことを意味します。検索エンジンでざっと調べたのですが、あまりよい情報が得られませんでした。一応参考URLを挙げておきますので、のぞいてみてください。
実際問題として、コヒーレンシが1になることはないのですが、古い記憶をたどると、測定誤差やノイズの影響より、FFTを行う際にエイリアシング除去用に用いた窓関数の影響が最も大きかったような気がします。
# ほとんどC/C++とは関係のない話題になってしまいましたね。
参考URL:http://www.hulinks.co.jp/support/flexpro/v7/data …
># ほとんどC/C++とは関係のない話題になってしまいましたね。
すいません。物理とか化学とかだとプログラムでやるのに一ひねりしないと出来ない様な回答がくるのでは?と思ったもので。
URLの内容を調べてみようと思います。
窓関数の影響の方が大きいと言うのであれば問題なさそうですね。
ありがとうございました。
No.6
- 回答日時:
ご質問内容だけでは直ちにどんな方法がよいのかわからないので、いくつか試してみるしかないと思います。
で、やり方についてはニューメリカルレシピ・イン・シー Numerical Recipes in C (技術評論社)という本があるのでそれを読んでください。サンプルコードがありますから、それですぐに試せます。
ノイズがあってということだとロバスト性が欲しいと思いますのでノンパラメトリック法の中で選択した方が良いかもしれません。
統計学上意味のある相関係数が求められます。
ありがとうございます。
>ニューメリカルレシピ・イン・シー
この本が近くの書店で見当たらなかったため、ネットで注文する事になりそうです。安い本ではないのでちょっと躊躇しています。(かったは良いけど使えないのでは見ても理解できないのでは駄目なので)
とりあえずコヒーレンス関数のプログラムをDLしたら出来そうな気がしたので、今はコヒーレンス関数の方向で進めています。
No.5
- 回答日時:
それぞれの信号の微分を(サンプル間の差da[n]=a[n]-a[n-1], db[n]=b[n]-b[n-1])求めて、
da[j]とdb[k]をずらして比べて一致(誤差範囲も考慮)する場所を探してみるとかしてみたらどうでしょう?
No.4
- 回答日時:
ありがとうございます。
コヒーレンスの方がなかなか分からなくて相互相関関数まで行かなかったんですが、先に相互相関関数をやってみました。
すると、同相のサイン波はMAX0.5のサイン波、方形波とサイン波だとMAX0.6のサイン波、1の直流同士だと1の直流、0の直流同士だと0の直流となりました。
サイン波同士よりも方形波とサイン波の方が値が大きくなるのはちょっと困るんですが、これはどうすればいいのでしょうか?
No.3
- 回答日時:
位相がずれていなければ、ADCにかける前に差動回路にかけるのですが・・・。
回答になってなくてすみません。
それは一応a[n]-b[n]でも出来るんですが、やはり位相がずれているためそれだと比較にならないんです。また、位相を合わせてから計算しても立ち上がりが急な波形の場合、多少の位相のずれでインパルスが出てしまい、判断に困ってしまうためそれは断念しました。
また、信号が一致していることを確認した後にはa[n]とb[n]を使う予定があるため、ADCに入れる前に差動を通してしまうとADCが3個必要になってしまうため、それはちょっと出来ないんです。
説明不足ですいませんでした。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AVRマイコンの型番
-
逆コンパイルと逆アセンブルの...
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
アプリケーションが終了するま...
-
COBOLのS9タイプからXタイプへ...
-
.NetのBackgroundWorkerクラス...
-
メモリが不足しています(VBA)
-
スレッドにて同一メモリの書き...
-
プロセスIDからウィンドウハ...
-
openGLで物体を半透明にして表...
-
フレームワーク「4.8.1」で、[S...
-
OSPFでプロセスを分ける意義に...
-
if ( a & b == b )
-
CWnd::OnTimerのスレッドの取得
-
Winsockで接続待ちタイムアウト...
-
C言語からC#への変換ツール
-
VC++2005 CStringをshortに変換
-
VB6のAdressOfをVB.NETに変換し...
-
php
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レジスタマップって何ですか?
-
組み込みマイコンでのソフトウ...
-
PLCとPCの通信
-
シリアル通信でのデータ取りこぼし
-
古い計量機器からのrs232cを使...
-
USBハブの自作について
-
C言語によってシリアル通信をお...
-
PIC12F683でLEDをスイッチで点...
-
I2C I/OエクスパンダPCA9539動...
-
マイコンからSDカード内のテキ...
-
Octal D-type transparent latc...
-
TCNTとTIFRの意味
-
H83052 シリアル通信 A/D変換...
-
メモリースループットとは?
-
FPGA や CPLD は何に使うん...
-
デジタルマルチメータの自動計...
-
geko201とマイコンのシリアル通...
-
PICマイコンをアセンブラでAD変...
-
機械語のレジスタペアについて
-
FATの故障? 1ファイル内の文字化け
おすすめ情報