2018年12月8日土曜日

超音波の周波数

 超音波風向風速計に使っているのはSTM32F405RGTだが、超音波パルスやADCサンプリングレートは、コアクロックの整数分の1にしか設定できない(実際には、コアクロックが2分の1に分周され、それを更に整数分の1に分周する)。
 変態的なチップだと固定小数点のPLLが入ってて整数比倍に増幅できたりするらしいのだが。


 で、できれば超音波パルスとFFTステップを近くしたい。
 どれくらいの値にするか?

 試しにC#でそれっぽい範囲を総当たりしたところ、超音波が39.77272...kHzで、ADCが1.2727...Mspsと0.8484...Mspsの2通りが一番エラーが少ないらしい。
 FFTが1024ポイントの場合、前者は約1242.89Hz、後者が約828.598Hzで、それぞれ32倍、48倍すると39.77272...kHzになり、エラーがゼロとなる。
 超音波は230Hzほど低いところに出ていて、経験則的に今使ってる超音波素子は40kHzより少し高めの部分が一番ゲインが高いわけだが、まぁ誤差の範囲だろう。

 他に、超音波40.385kHz、ADC1.2923MspsでFFTエラーがゼロ、という設定もある。
 ただ、こちらはADC周波数が若干高めになる。

 もっとも、ADC周波数が高い分にはADC計測時間が短くて済むから、ADCがその速度でサンプリングできるなら、あえて遅くする必要はないのだが。

***

 相関を行わないなら、実部のみのFFTで済む。やったー、メモリ4分の1で良いぞ~!と思ったのに、RFFTは入力と出力で違う配列を与えてやらなきゃいけないので、結局CFFTと同じメモリが必要になる。
 もっとも、基準波形を保存しないでいい分、メモリ消費量は2分の1にできるが。

***

 波形の安定待ちに約1msec、ADCサンプリングで約1msec、FFTの処理で約0.5msec、他に細々な処理を加えても、1chあたり4msec程度で計測できそうだ。6ch計測すると25msec程度かな。休みなく回せば40Hzで計測できる。
 実際には他の処理もいろいろあるが、それでも10Hz程度は取れそう。自然風なら10Hzで取れれば十分だろう。

 取らぬ狸の皮算用とならぬよう…

0 件のコメント:

コメントを投稿