***
相関処理のデータを書き出したグラフ。
in magが入力波形の強度、out1 magとout2 magは出力波形の強度を示している。
ref magが元々の基準波形の強度を、ref mag (* wind)が窓関数を適用したあとの基準波形の強度を示している。ref windが窓関数を示している。
inとout、ref windは時間軸、refは周波数軸。
out1は基準波形をそのまま使い、out2は窓関数を通した基準波形を使用している。
窓関数は、今回はHammingを使った。また、長さは基準波形の8分の1の長さとし、範囲外はゼロで埋めている。これにより、高周波側の処理は切り捨てられている。
窓関数によるスケーリングはあるが、高周波側の切り捨ては、相関結果にはさほど影響はないように見える。実際のエコーが隣接するような状況ではどうなるかわからんが。
感覚的には、帯域幅分の領域だけ相関すれば良さそうな気がする。IFでDCに落としてるので、帯域幅数kHz分をカバーできればいいはず。IF40kSPSとすると、10分の1でも帯域幅8kHzが得られるはず。16分の1だと5kHzくらいなので、ちょっと狭いけど、素子の帯域幅があんまり広くないみたいなので、2kHzくらいで使うならあまり問題はなさそう。
窓関数を小さくするには、いくつかの利点がある。一番大きいのが、メモリ使用量の削減。8分の1しか使わないということは、基準波形のデータのうちの8分の7は捨ててもいい(保存しなくていい)データとなる。なんと8倍もお得!! 計算速度に関しても利点がある。
使えるメモリ使用量に余裕がないので、多少の性能変化は許容して、メモリ使用量が減るような工夫を行う必要がある。
基準波形もf32ではなくq15とかで持っても良さそう。そうすればメモリ使用量は半分になる。おそらくダイナミックレンジはさほど必要ではないだろうから、一旦f32で作った基準波形を、s8で保存しても良さそう。これならメモリ使用効率4倍。窓関数と合わせて32倍!
オンボードで相関処理しても、それを表示する手段がないので、どうやって活用するかという問題はあるが。
***
パラメータ変えつつ、遊び中。
40kHz、2kHz、パルス幅7.5ms、遅延10ms、IF40kSPS、4096ポイント、のグラフ。
refの頭切れてるのでグラフ化パラメータ間違ってるな……
パルス開始から受信開始までの遅延が10msなので、横軸に10を足したのが正しい時間。16msあたりと20msあたりに大きなピーク、18msあたりに少し低めのピークが見える。
部屋の構造的に、2.5mあたりと3.5mあたりに少し面積が大きく、2.8mあたりに少し面積の小さい障害物がある。他、細々したものが多数。
2.5m / 340m/s * 2 = 14.7ms、2.8m / 340m/s * 2 = 16.5ms、3.5ms / 340m/s * 2 = 20.5ms、という感じなので、実測値だいたい一致している。
out1とout2を比べると、鋭いピークが顕著に潰れてる。よくない。
周波数軸にHammingをかけてるので、帯域幅が狭いのが原因と思われ。必要なところだけ1、不要なところは0、な窓を用意すれば改善しそう(今回は用意するのが面倒だったのでサクッと作れるHammingを選んだ)。
しかし、PGA16倍でこの強度かぁ。10分の1くらいまではピーク見えそうだけど、それでも測距レンジ10m程度にしかならない。遠距離であればパルス幅長めに設定できるとはいえ、それでも20m届くか届かないか、くらいかなぁ。オペアンプもう1段通したい。F3的にはもう1個あるんだけど、Nucleo的には使えない。
***
日の出の時刻から1時間半くらい経過。窓閉めてると少し汗ばむ程度の暑さ。直射日光なしでこの暑さかぁ…… 昨日は昼間は凄まじく暑かった。。。夏までに暑さで死ぬんじゃねーか、というような暑さ。まだ窓開けてサーキュレーターで風回せば涼しくなるだけマシか。午後になると気温30℃くらいになるので回しても全然涼しくならないけど。
0 件のコメント:
コメントを投稿