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で質問しましょう!
似たような質問が見つかりました
- 政治 日本もラウンドアバウト交差点を増やすべきではないですか? 4 2023/06/26 23:27
- 心理学 心理学のカテゴリーで割り算の質問というのも変なのかもしれませんが数学的な関心ではないので、心理学にし 1 2022/07/24 10:08
- 高校 方程式の証明 5 2022/05/12 09:29
- 日本語 「名詞+的」で「形容動詞」? 9 2023/01/26 18:30
- 統計学 お世話になっています. x軸は時間(期間)y軸はある値に対する2つのグラフ比較をしますが、私個人の考 2 2023/03/30 11:42
- 工学 直流モーターを比例制御 積分制御 PI制御で動かすとするとき、入出力波形から求めたそれぞれのゲインと 1 2022/06/30 21:16
- その他(自然科学) この2つはどこが間違いでしょうか? 2. 植物の葉に含まれるクロロフィルは可視赤色域の波長帯を強く吸 2 2022/05/17 16:55
- 数学 三角関数の極限を「はさみうちの原理」で考える時の不等号について 1 2022/07/22 01:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- 物理学 微分方程式の物理現象への適用について 3 2023/05/14 12:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PLCとPCの通信
-
機械語のレジスタペアについて
-
レジスタマップって何ですか?
-
マイクロ秒で精度が出るタイマー
-
マイコンからSDカード内のテキ...
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
C言語で、メモリを解放しないで...
-
緯度、経度の 10進法と 60進法...
-
TCP/IP通信時のサーバーからの受信
-
VBSの処理中一旦処理を止めて再...
-
プログラミング ソースコード
-
小数点を含む数値かどうか判断...
-
MACで動く実行ファイルをWindow...
-
なんかC言語でプログラム書いて...
-
DoEvents関数って何?
-
Excel VBA で処理中断(DoEvents...
-
C# シリアル通信でデータ受信...
-
C++でシェルを起動
-
VB.NETをJavaに変換するツール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PLCとPCの通信
-
レジスタマップって何ですか?
-
シリアル通信でのデータ取りこぼし
-
マイコンからSDカード内のテキ...
-
フラッシュメモリへの書き込み
-
組み込みマイコンでのソフトウ...
-
TCNTとTIFRの意味
-
PICマイコンのCLRWDT動作について
-
SH7144でパルス幅を測定したい。
-
Octal D-type transparent latc...
-
マイクロ秒で精度が出るタイマー
-
2つのアナログ信号が一致して...
-
マイコンのCプログラミングで未...
-
PIC12F683でLEDをスイッチで点...
-
機械語のレジスタペアについて
-
ArduinoとXBeeを用いたRSSIの取...
-
PCからシリアル通信で外部ハー...
-
A/D変換について
-
アセンブラプログラム
-
ビット演算を学びたい
おすすめ情報