レーダの中身について実践編~距離、速度測定~

前回から時間が空いてしまいました。

前回はレーダの距離、速度推定について基礎の概念を説明しました。

今回はSimulinkを使って、実際にFCM方式で速度、距離を推定してみます。
使うツールボックスは以下のとおり

1. Phased Array Toolbox
2. DSP Toolbox

もちろんプレーンのSimulinkでも作れますが、色々と便利なのでツールボックスを使います。
今日はメモ書きみたいな絵が多くて、全体的に視覚情報はうんちです。
そのせいで今日は難解かも。。。

#電磁波の伝搬
前回は信号処理に絡む話ばかりでしたが、最低限レーダにおける電磁波の振る舞いも解説します。直感的にわかる話ばかりだと思いますので、頭に入れておきましょう。

まず、レーダの電波は、放射されてから帰ってくるまで、この図のような旅路を歩みます。

<img width="869" alt="スクリーンショット 2020-01-11 15.14.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/d310dd9c-0c90-b1ec-b779-996e2fd09c30.png">


1. 波形を生成(熱雑音混入)し、放射アンテナ(Tx)から空間全体に放射。
2. 電波は球面上に拡散していくので、ターゲットまでの距離$R$を往復する間に、電力は$1/16\pi R^2$に減少。($4\pi R^2$は半径$R$の球の表面積)
3. ターゲットに電波が衝突。一部の電波が反射される。
4. ターゲット間を往復する間に環境ノイズが混入。
5. 受信した電力は、LNA(ローノイズアンプ)で増幅。(熱雑音混入)
6. 信号処理

2は非常に重要な基本現象で、1Wの電力を放射した場合、どんなアンテナを用いても距離の2乗に比例して受信電力は減少します。皆さんの使っている携帯電話、パソコン、イヤホンなどなど、全ての無線機器はこの影響を免れられません。レーダや携帯電話の場合、時には送受間で数百メートル離れていることもあり、そういった機器の性能は常にSNとの戦いになります。

合わせて、レーダに受信されるノイズ源も示しました。距離によってSが下がるのに、さらにNが入ってきます。外部環境からは環境ノイズ(ありとあらゆるものから電磁波は放射されています。)を受信し、アンプなどの熱雑音も信号に入ってきます。一応LNAとか使って対策しますが、入ってくるものはしょうがないです。

#システムの概要
次にシステムモデルの概略を説明します。

処理のフローとしては
1. 信号を生成する
2. アンプで増幅して放射
3. ターゲットの距離、速度に応じて周波数と時間シフトを加え、伝搬距離に応じて信号を小さくする。
4. ターゲットは全部の電力を跳ね返すわけではないので、一部電力をレーダに跳ね返す。
5. 受信信号を増幅させる
6. 受信信号と送信信号をミキサで合成し、ビート信号を生成
7. 2重FFTにより距離と速度を推定

上で説明した外部環境部分もSimulinkブロックで模擬します。

2重FFTについてもう少し詳しく解説します。
前回の記事で、ビート周波数の初期位相が速度によって回転すると説明しました。

FCMの周期を何回も取得し、その初期位相差をFFTすることで、初期位相の回転を周波数として観測できます。
距離推定のFFTは1周期の変調分を時間方向にFFTします。速度推定は、そのFFTの結果を取得サンプル方向にFFTします。図にするとこんな感じ。

<img width="990" alt="スクリーンショット 2020-01-11 15.14.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/b9b40430-4003-bdd5-f566-0e4c6d6f5db8.png">

位相情報を取らないといけないので、FFTは複素数で行い複素数を吐き出させます。

#モデル作成
いよいよモデルを作成します。
動作を確認するだけなので、ツールボックスをゴリゴリに使います。全体像はこんな感じです。
<img width="751" alt="スクリーンショット 2020-01-11 15.07.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/c421ee09-18d9-9929-b050-ed7b4880214c.png">

もう少し見やすくしろよと言うツッコミは受け付けません。Simulink初学者を許してください。

##波形生成&放射
まず放射系です。放射するには変調信号とアンプが必要です。
信号生成にはPhased Array ToolboxのFMCW waveformを使います。(一般的にFCMはFMCWの種類の一つに分類されます)

<img width="709" alt="スクリーンショット 2020-01-11 14.24.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/1d5e71ac-3a1c-f903-8b2a-1dd724f5bc5c.png">

FMCWブロックの諸元は

- サンプル周波数: 信号処理にはビート周波数しか使わないので、とりあえずビート周波数に合わせた周波数でいいです。
- スウィープ時間: 変調の時間です。
- スウィープ帯域: 変調の帯域幅です。
- スウィープ方向: 変調の際に周波数を増加させる信号か、減少する信号か、増加減少を交互にするか選べます。
- スウィープインターバル: ビート周波数生成において中心周波数は関係ないので、高速化のためにFMCW waveformは0-BW間でスウィープするか、-BW/2-BW/2間でスウィープするかします。

です。理想的にはここは連続信号で処理して、後段の信号処理で離散化するのが望ましいです。もしくはここでは高いサンプリング周波数にしておいて、信号処理でダウンサンプリングすると良いです。のちの距離推定の精度に関わります。

スウィープ時間は数十usくらいで処理します。他の諸元ですが、弊社の思想が意図せず反映されると嫌なので伏せます。

Transmitterはゲインと温度を入力します。

##レーダ-ターゲット間のモデル化
レーダ-ターゲット間では、上記のとおりノイズが入ったり、時間がシフトしたり色々します。
これを模擬してくれるのがFree Space ChannelとTargetです。

<img width="925" alt="スクリーンショット 2020-01-11 14.32.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/63be0d0b-fa47-ce4c-f350-ed9b10b40a9a.png">

主な諸元は以下のとおり

【Free Space Channel】

- 入力信号
- レーダの位置座標
- レーダの絶対速度
- ターゲットの初期位置座標
- ターゲットの絶対速度
- 搬送周波数: 搬送周波数は放射電波の中心周波数とほぼ同義です。

【Target】

- RCS: 物体が何割の電力を跳ね返すかと言う定数です。反射/入射の比と考えて問題ありません。
- 搬送周波数

Free Space Channelの入力にPlatformなどを使うと便利です。Platformは位置や速度を設定するだけのブロックです。

##ビート信号生成
受信してからビート信号を生成するまでです。
<img width="730" alt="スクリーンショット 2020-01-11 14.40.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/0fe6aef2-b0ab-966e-44d7-42b1924cdc19.png">

Receiver Preampは、受信電力を増加させるアンプで、熱雑音が混入します。諸元はTransmitterと同じ。

 Dechirpは、送信信号と受信信号を掛けて、ビート信号を生成するブロックです。処理としては、送信と受信のドット積をとっているだけです。Dechirpブロックはそれを配列状態で処理できます。

##距離速度推定
いよいよ本丸。距離速度推定を行います。

<img width="598" alt="スクリーンショット 2020-01-11 14.44.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/df15fbae-c5d3-08e6-e020-00242a098055.png">

1. 上からビート信号が入ってきます。
2. まずはBufferを使って、1変調周期分のビート信号(複素数)を行方向にキープし、1周期分たまったらNx1配列として後段に流します。
3. Nx1のビート信号を複素FFTします。これで距離推定が終わりです。(はやっ)
4. 距離FFT後のNx1配列を転置してBufferに入力します。速度FFTをするためにMサンプル分を行方向にキープします。MxN配列が出力されます。
5. 速度FFTをします。
6. 位相情報を含んだ出力がされるので、absブロックで大きさを求めます。
7. Matlab Functionのブロックで距離がマイナスの部分を切り落とします。
8. 転置して、NxMの配列に戻します。
9. $20\log_{10}$をとっていますが、これはdB表記するための処理です。
10. Matrix Viewerで可視化します。(simoutはワークスペースにデータを保存するブロックです)

これで1ターゲットのFCMレーダモデル(距離、速度推定)は完成です。試しに距離60m、速度40km/sのターゲットを置いてみます。

<img width="509" alt="スクリーンショット 2020-01-11 14.56.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/c78e34dc-bf94-91dd-1126-04889e186c79.png">

縦軸が距離、横軸が速度です。見事に推定できています!!

電波も波の重ね合わせが成り立つので、2ターゲットにするには、Free Spaceブロックを2つつくり、出力を合成すればできます。

<img width="502" alt="スクリーンショット 2020-01-11 15.02.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/71cafc24-e14a-dca5-1764-9f2114c3192a.png">

同じ距離にターゲットがいても平気です。

<img width="518" alt="スクリーンショット 2020-01-11 15.03.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/a61f1c88-21fb-c7e5-cc10-40d1cc4dc5f6.png">

当然距離が近いほど大きいピークが出るので、普通はローカットフィルタなどで近距離の電力を下げるなどします。

アニメーションにするとこんな感じ。等速運動のターゲットと、等加速度運動のターゲットがいます。
![testAnimated.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530192/17802896-0ceb-e69d-2382-53d29724f622.gif)


#まとめ
今回はSimulinkとツールボックスを使ってFCMレーダの処理をしました。実際に用いられるレーダよりも簡単な構成にしていますが、その動作が目で見てわかるって嬉しいですね。

この記事では、FFTの折り返しなどの説明を省略していますが、原理理解を優先してそのようにしています。実際にレーダを作りたい方は、個人で調べてみてください。チップメーカのページなどに詳しく書いてありますよ。

次回は方位推定ですが、少し時間がかかりそうです。。。少しお待ちください。