実現したいこと
ESP32を使ってセンシングしたのちに、波形データの立ち上がりからピーク(最大値)に達するまでの時間を算出したいと考えています(ESPのプログラム内で)
立ち上がりとピーク位置については、下記グラフの青の波形に示したピンク矢印の位置をイメージしています(低周波波形はピークが頭打ちのような形になるので定義が難しいですが、傾きがほぼゼロとなり、最大値をとる最初の点になるかと思います)
ベースが毎回一定でない(波形ごとに多少変動する可能性がある)、波形の周期が一定でないこともあり、どのようにアルゴリズム(プログラム)を組めばいいか苦慮しております。
アドバイスいただけましたらありがたいです。どうぞよろしくお願いいたします。
※生データはばらつきが大きいため、メディアン処理、移動平均処理を施しています。
今回時間データは保存していないため、便宜的にデータ取得順に1,2,3、、、とすることとしています。
処理後データ抜粋(上段:低周波波形データ(1波形ぶん切り出し)、下段:高周波波形データ(2波形ぶん切り出し)
[64,64,64,64,64,64,64,64,64,64,64,64,64,64.1,64.1,64.1,64.1,64.1,64.25,64.35,64.4,64.5,64.6,64.75,64.75,64.85,64.95,65.05,65.25,65.45,65.7,65.8,66,66.1,66.1,66.3,66.5,66.65,66.7,66.85,66.95,67.05,67.15,67.2,67.45,67.55,67.65,67.8,67.9,67.95,67.9,68.05,68.05,68.15,68.4,68.5,68.7,68.75,68.95,69.05,69.2,69.35,69.55,69.75,69.9,70,70.05,70.1,70.2,70.35,70.6,70.75,70.95,71.05,71.2,71.35,71.35,71.55,71.55,71.6,71.7,71.75,71.75,71.8,71.8,72,72.4,72.55,72.65,72.7,72.65,72.75,72.8,72.9,73,73.05,73.15,73.2,73.3,73.4,73.5,73.6,73.6,73.75,73.95,74,73.9,74,74,74.15,74.3,74.5,74.65,74.75,74.85,74.95,75.05,75.2,75.3,75.3,75.4,75.5,75.7,75.9,75.9,76.05,76.1,76.35,76.55,76.55,76.7,76.8,76.8,76.8,76.8,76.8,77,77.2,77.35,77.45,77.45,77.45,77.65,77.6,77.8,77.9,78,78,78.1,78.2,78.3,78.3,78.4,78.5,78.7,78.9,78.8,78.8,78.85,79.05,79.25,79.45,79.45,79.4,79.4,79.4,79.5,79.5,79.5,79.6,79.6,79.6,79.7,79.8,79.8,79.6,79.7,79.7,79.7,79.7,79.7,79.7,79.7,79.8,79.8,79.8,79.8,79.8,79.8,79.8,79.8,79.8,79.8,79.8,79.8,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,79.85,79.45,78.85,78.1,77.3,76.5,75.7,74.9,74.1,73.3,72.5,71.7,70.9,70.1,69.3,68.5,67.7,66.9,66.1,65.3,64.65,64.25,64.05,64,64,64,64] [64,64,64,64,64,64,64,64,64.1,64.35,64.95,65.75,66.55,67.35,68.15,68.95,69.8,70.75,71.7,72.7,73.7,74.65,75.45,76.25,76.85,77.15,77.25,77.3,77.2,76.95,76.35,75.55,74.75,73.95,73.15,72.35,71.5,70.55,69.6,68.6,67.6,66.65,65.85,65.05,64.45,64.15,64.05,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64.2,64.7,65.5,66.3,67.1,67.95,68.9,69.9,70.9,71.8,72.8,73.8,74.8,75.6,76.4,76.8,77,77.1,77.1,77.1,76.9,76.4,75.6,74.8,74,73.15,72.2,71.2,70.2,69.3,68.3,67.3,66.3,65.5,64.7,64.3,64.1,64,64,64,64,64,64,64,64,64,64,64]
試したことと問題点
ベースの値(今回は64くらい)が1波形ごとに多少変動することを考慮し、生データを微分してゼロになる箇所から立ち上がりおよびピーク位置を割り出すことを考えました。高周波の波形ではこの方法でうまく解析できそうですが、低周波波形では、波形の立ち上がりにかけてデータが多少乱れることと、なだらかに上昇していくために、微分による立ち上がりとピークの判別が難しいということがネックになっています。
