前回から時間が空いてしまいました。
前回はレーダの距離、速度推定について基礎の概念を説明しました。
今回はSimulinkを使って、実際にFCM方式で速度、距離を推定してみます。
使うツールボックスは以下のとおり
- Phased Array Toolbox
- DSP Toolbox
もちろんプレーンのSimulinkでも作れますが、色々と便利なのでツールボックスを使います。
今日はメモ書きみたいな絵が多くて、全体的に視覚情報はうんちです。
そのせいで今日は難解かも。。。
#電磁波の伝搬
前回は信号処理に絡む話ばかりでしたが、最低限レーダにおける電磁波の振る舞いも解説します。直感的にわかる話ばかりだと思いますので、頭に入れておきましょう。
まず、レーダの電波は、放射されてから帰ってくるまで、この図のような旅路を歩みます。
- 波形を生成(熱雑音混入)し、放射アンテナ(Tx)から空間全体に放射。
- 電波は球面上に拡散していくので、ターゲットまでの距離$R$を往復する間に、電力は$1/16\pi R^2$に減少。($4\pi R^2$は半径$R$の球の表面積)
- ターゲットに電波が衝突。一部の電波が反射される。
- ターゲット間を往復する間に環境ノイズが混入。
- 受信した電力は、LNA(ローノイズアンプ)で増幅。(熱雑音混入)
- 信号処理
2は非常に重要な基本現象で、1Wの電力を放射した場合、どんなアンテナを用いても距離の2乗に比例して受信電力は減少します。皆さんの使っている携帯電話、パソコン、イヤホンなどなど、全ての無線機器はこの影響を免れられません。レーダや携帯電話の場合、時には送受間で数百メートル離れていることもあり、そういった機器の性能は常にSNとの戦いになります。
合わせて、レーダに受信されるノイズ源も示しました。距離によってSが下がるのに、さらにNが入ってきます。外部環境からは環境ノイズ(ありとあらゆるものから電磁波は放射されています。)を受信し、アンプなどの熱雑音も信号に入ってきます。一応LNAとか使って対策しますが、入ってくるものはしょうがないです。
#システムの概要
次にシステムモデルの概略を説明します。
処理のフローとしては
- 信号を生成する
- アンプで増幅して放射
- ターゲットの距離、速度に応じて周波数と時間シフトを加え、伝搬距離に応じて信号を小さくする。
- ターゲットは全部の電力を跳ね返すわけではないので、一部電力をレーダに跳ね返す。
- 受信信号を増幅させる
- 受信信号と送信信号をミキサで合成し、ビート信号を生成
- 2重FFTにより距離と速度を推定
上で説明した外部環境部分もSimulinkブロックで模擬します。
2重FFTについてもう少し詳しく解説します。
前回の記事で、ビート周波数の初期位相が速度によって回転すると説明しました。
FCMの周期を何回も取得し、その初期位相差をFFTすることで、初期位相の回転を周波数として観測できます。
距離推定のFFTは1周期の変調分を時間方向にFFTします。速度推定は、そのFFTの結果を取得サンプル方向にFFTします。図にするとこんな感じ。
位相情報を取らないといけないので、FFTは複素数で行い複素数を吐き出させます。
#モデル作成
いよいよモデルを作成します。
動作を確認するだけなので、ツールボックスをゴリゴリに使います。全体像はこんな感じです。
もう少し見やすくしろよと言うツッコミは受け付けません。Simulink初学者を許してください。
##波形生成&放射
まず放射系です。放射するには変調信号とアンプが必要です。
信号生成にはPhased Array ToolboxのFMCW waveformを使います。(一般的にFCMはFMCWの種類の一つに分類されます)
FMCWブロックの諸元は
- サンプル周波数: 信号処理にはビート周波数しか使わないので、とりあえずビート周波数に合わせた周波数でいいです。
- スウィープ時間: 変調の時間です。
- スウィープ帯域: 変調の帯域幅です。
- スウィープ方向: 変調の際に周波数を増加させる信号か、減少する信号か、増加減少を交互にするか選べます。
- スウィープインターバル: ビート周波数生成において中心周波数は関係ないので、高速化のためにFMCW waveformは0-BW間でスウィープするか、-BW/2-BW/2間でスウィープするかします。
です。理想的にはここは連続信号で処理して、後段の信号処理で離散化するのが望ましいです。もしくはここでは高いサンプリング周波数にしておいて、信号処理でダウンサンプリングすると良いです。のちの距離推定の精度に関わります。
スウィープ時間は数十usくらいで処理します。他の諸元ですが、弊社の思想が意図せず反映されると嫌なので伏せます。
Transmitterはゲインと温度を入力します。
##レーダ-ターゲット間のモデル化
レーダ-ターゲット間では、上記のとおりノイズが入ったり、時間がシフトしたり色々します。
これを模擬してくれるのがFree Space ChannelとTargetです。
主な諸元は以下のとおり
【Free Space Channel】
- 入力信号
- レーダの位置座標
- レーダの絶対速度
- ターゲットの初期位置座標
- ターゲットの絶対速度
- 搬送周波数: 搬送周波数は放射電波の中心周波数とほぼ同義です。
【Target】
- RCS: 物体が何割の電力を跳ね返すかと言う定数です。反射/入射の比と考えて問題ありません。
- 搬送周波数
Free Space Channelの入力にPlatformなどを使うと便利です。Platformは位置や速度を設定するだけのブロックです。
##ビート信号生成
受信してからビート信号を生成するまでです。
Receiver Preampは、受信電力を増加させるアンプで、熱雑音が混入します。諸元はTransmitterと同じ。
Dechirpは、送信信号と受信信号を掛けて、ビート信号を生成するブロックです。処理としては、送信と受信のドット積をとっているだけです。Dechirpブロックはそれを配列状態で処理できます。
##距離速度推定
いよいよ本丸。距離速度推定を行います。
- 上からビート信号が入ってきます。
- まずはBufferを使って、1変調周期分のビート信号(複素数)を行方向にキープし、1周期分たまったらNx1配列として後段に流します。
- Nx1のビート信号を複素FFTします。これで距離推定が終わりです。(はやっ)
- 距離FFT後のNx1配列を転置してBufferに入力します。速度FFTをするためにMサンプル分を行方向にキープします。MxN配列が出力されます。
- 速度FFTをします。
- 位相情報を含んだ出力がされるので、absブロックで大きさを求めます。
- Matlab Functionのブロックで距離がマイナスの部分を切り落とします。
- 転置して、NxMの配列に戻します。
- $20\log_{10}$をとっていますが、これはdB表記するための処理です。
- Matrix Viewerで可視化します。(simoutはワークスペースにデータを保存するブロックです)
これで1ターゲットのFCMレーダモデル(距離、速度推定)は完成です。試しに距離60m、速度40km/sのターゲットを置いてみます。
縦軸が距離、横軸が速度です。見事に推定できています!!
電波も波の重ね合わせが成り立つので、2ターゲットにするには、Free Spaceブロックを2つつくり、出力を合成すればできます。
同じ距離にターゲットがいても平気です。
当然距離が近いほど大きいピークが出るので、普通はローカットフィルタなどで近距離の電力を下げるなどします。
アニメーションにするとこんな感じ。等速運動のターゲットと、等加速度運動のターゲットがいます。
#まとめ
今回はSimulinkとツールボックスを使ってFCMレーダの処理をしました。実際に用いられるレーダよりも簡単な構成にしていますが、その動作が目で見てわかるって嬉しいですね。
この記事では、FFTの折り返しなどの説明を省略していますが、原理理解を優先してそのようにしています。実際にレーダを作りたい方は、個人で調べてみてください。チップメーカのページなどに詳しく書いてありますよ。
次回は方位推定ですが、少し時間がかかりそうです。。。少しお待ちください。