受信した信号からエコーを検出する方法について、あれこれ試行している。
ズボラな自分としては、放置環境での自動観測に向いた方法を実現したい。
自分にできるエコーの判断は...
- 単純に、閾値以上の信号をエコーとして判断。
- ノイズを誤検知しないよう、閾値をどうやって設定するかが難しい。。
これまで試した閾値
- 閾値=固定値
- 最初に試した方法。
- ノイズフロアが上昇したらアレもコレもエコーとしてカウントするので、放置環境での自動観測には向かない。
- 閾値=10分間の信号強度の平均+固定値
- ノイズフロアが上昇しても対応できるよう、1の改善版として試した方法で、そこそこ使えると思う。
- 本当は移動平均したいところやけど、現在のシェルをメインにして作ったプログラムやと、RAMディスクとかを使ってファイルを介して過去のデータを引き継ぐとかの細工が必要で面倒なんで、移動平均は使っていない。
今回 試した閾値
- 閾値=標準偏差 (5σ)
- 信号強度のグラフを見ていて思いついたのが、標準偏差を使う方法。
- ノイズの状態が安定してたら、チョコっと顔を出す弱めのエコーも検出できるんちう??!!って。。
- 今回はσの外に出たデータが欲しいデータになる。
- 自分の環境では、5σくらいがイイ感じ。
- バラツキが大きくなると破綻するので、変動係数が一定以上になったら、2の方法を使用する。
- 10分間に数10個という大量のエコーを受信するような環境でバラツキがどの程度になるか...いいデータが採れたら確認して変動係数を見直すなどの調整を。。
- 2よりチョット改善されてて、弱めのエコーもソコソコ検出できるようになった。
- 信号強度のグラフを見ていて思いついたのが、標準偏差を使う方法。
実装前の検討中(図の左,中) と 実装後(図の右) のデータ
図中の横破線 : 固定値(+0.007),σ~6σ
真面目に働いていた時は、実験データの検証によく使っていたけど、σの外に出るデータは見たくなかったなぁぁぁ。