超音波距離計は飽きたと言ったな、あれは(ry
FFTで作った相関器を試してみました。
DAC800kSPS、ADC50kSPS、パルス幅10.24msec、f40kHz、ΔF5kHz、サンプリング期間8192ポイント、という感じのパラメータです。
送信は十分に高い周波数で行っていますが、受信は40kHzの信号を50kSPSでサンプリングしています。明らかに元の波形は取れないわけですが、ちゃんと相関が取れています。崩れたなりの波形同士でちゃんと相関処理ができてるってことですかね。
今まではDACとADCの周波数が同じだったので、DACで送信した波形をADCの相関に使用していました。そのあたりの変更がちょっと面倒でした。
あとCMSIS DSP LibではFFTが4kポイントまでという制限、それからRAMが足りないという制限により、FFTは1kポイントで実行しています。
上の図では1.5m先の天井付近に鋭いピークがあります。
以前は天井で反射し、机で反射し、さらに天井で反射したようなタイミングのエコーがありましたが、今回はそれは見られません。ゴチャゴチャしてるどれかがそれなのかも。
サンプリング周波数が低いので、そのあたりの悪影響が意外と大きいかもしれません。
とりあえずパルス幅10.24msecで約140msecのサンプリングが可能でした(運が悪いとmallocでコケますが)。
140msecだと20m程度の距離に相当しますから、1回のパルスで20m程度の幅のエコーを検出できます。以前は5m程度までだったので、大幅な改善です。とはいえ、これはFFTとかは関係なく、サンプリング周波数が下がったのが大きな要因だと思いますが。
今回は全期間(140msec程度)をサンプリングした後にまとめて相関処理に入れていますが、なんとなく、計測時間よりも早く相関ができそうな気がします。ということは、ADCバッファの長さはせいぜい2048サンプル分有れば良いわけで、今は8192サンプル分を確保していますから、12KiB程度を開けることができます。
その分に結果を保存しながらサンプリングしながら、というふうにすれば、かなり長い期間のサンプリングも可能な気がします。
今の所、すべてのDAC/ADC転送が終わったのはDMAのカウンタをソフトウェアループで見て確認していますが、転送中に相関処理を行うならDMAの割り込み等を駆使する必要があります。そのあたりがかなり複雑になりそうですね。
0 件のコメント:
コメントを投稿