レーダーのエクリプシングと不感距離 — 送信中は受けられない

送信中は受信機がOFFになるため、近距離の目標からのエコーは受け取れないことを示す模式図

まずこの図で全体像をつかんでください。横軸はパルスを撃った瞬間からの時間で、1 周期が「送信中(赤)」「回復中(橙)」「受信窓(緑)」の 3 区間に割れています。エコーは点ではなくパルス幅 $\tau$ だけの長さを持つ帯なので、①のように丸ごと赤い区間に埋もれれば何も受からず、②のように半分だけ緑にかかれば一部しか受からず、③のように完全に緑に収まってはじめて全部が受かります。この「受かった割合」が、本記事の主役であるエクリプシング係数 $\eta$ です。

滑走路の端に立つ空港監視レーダーは、40 km 先の旅客機を確実に捉えます。ところが、そのレーダーの真下 200 m のところをヘリコプターが横切っても、画面には何も映りません。感度が足りないわけではありません。むしろ逆で、近すぎる目標からのエコーは強大です。それでも映らないのは、エコーが返ってきた瞬間、レーダーはまだ送信の真っ最中で、受信機のスイッチが切られているからです。

パルスレーダーは、1 本のアンテナを送信と受信で共用します。メガワット級のパルスを撃ち出している間、受信機の入り口はデュプレクサで叩き落とされ、耳をふさいだ状態になります。送信が終わってからも、リミッタや受信機の初段が飽和から立ち直るまでにわずかな時間がかかります。この「耳をふさいでいる時間」の間に往復してしまう距離の目標は、原理的に見えません。これが最小探知距離(minimum range, $R_{\min}$)です。

さらに厄介なのは、この不感帯が近距離だけの話では終わらないことです。パルスを一定周期で撃ち続ける以上、レーダーの時間軸は繰り返し周期 $T$ で折りたたまれています。遠方の目標のエコーも「次のパルスの送信中」に帰ってくることがあり、そのときはやはり受信できません。結果として、不感帯は最大無曖昧距離 $R_u = cT/2$ ごとに周期的に並びます。エコーの一部だけが送信期間にかぶる中間的な状態もあり、このとき受信できるエネルギーが目減りして SNR が落ちます。この現象をエクリプシング(eclipsing, 食)と呼びます。日食で太陽が月に隠されるのと同じ語感で、送信パルスがエコーを隠してしまうわけです。

エクリプシングと不感距離を理解しておくと、次のような場面で具体的に効いてきます。

  • 航空監視・防空レーダーの波形設計: 探知距離を伸ばすためにパルス幅を広げると平均電力は上がりますが、その分だけ $R_{\min}$ が伸び、エクリプシング損も増えます。どこで折り合いをつけるかは、この記事の式そのものです
  • 戦闘機の中/高 PRF パルスドップラーレーダー: デューティ比が 10〜50 % に達するため、エクリプシングは「たまに起きる損失」ではなく常時効く支配的な損失になります。PRF を複数持ち替える設計(PRF スタガ/PRF ダイバーシティ)はこの対策です
  • 気象レーダーの近距離欠測: レーダーサイト直上の降水が観測できない「コーン・オブ・サイレンス」の一部は、まさに送信パルス幅による不感距離です
  • 距離折り返しの解消: 複数 PRF で測った「見かけの距離」から真の距離を復元する処理は、中国剰余定理そのものです。不感帯回避と折り返し解消は、同じ複数 PRF 運用の表と裏です

本記事の内容

  • 単一アンテナ・送受切替がつくる「時間の穴」と、約 200 dB というダイナミックレンジの現実
  • 最小探知距離 $R_{\min} = c(\tau + t_r)/2$ の導出と数値例
  • 距離折り返し $R_u = c/(2\,\mathrm{PRF})$ と、不感帯が周期的に並ぶ仕組みの時間軸による説明
  • エクリプシング係数 $\eta(R)$ の定義と場合分けによる完全な導出(台形プロファイル)
  • 平均エクリプシング係数 $\bar{\eta} = 1 – (\tau + t_r)/T$ の導出
  • エクリプシング損の dB 表現($20\log_{10}(1/\eta)$ と $10\log_{10}(1/\eta)$ の使い分け)
  • Python 実装 1: 距離を掃引したときのエクリプシング係数プロファイル
  • Python 実装 2: 単一 PRF の不感帯と、3 種の PRF をスタガしたときの合成検出確率の比較
  • Python 実装 3: 中国剰余定理(CRT)による距離折り返しの解消と、測距誤差に対する脆さ
  • PRF・パルス幅の設計トレードオフとブラインドゾーンマップ

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

送信中は受けられない — 送受切替がつくる時間の穴

1 本のアンテナを取り合う送信機と受信機

レーダーの教科書は、たいてい「送信して、反射を受信する」と一言で済ませます。しかし実装の現場では、送信機と受信機が同じアンテナを取り合うところに最大の設計難所があります。

数字を並べると、その厳しさがはっきりします。地上監視レーダーの送信ピーク電力は 1 MW、すなわち $+90\ \mathrm{dBm}$ 程度になることがあります。一方、受信機が扱う最小の信号は熱雑音レベルの近くです。帯域 1 MHz、雑音指数 3 dB の受信機なら、雑音電力は

$$ N = kT_0B \cdot F = -174\ \mathrm{dBm/Hz} + 60\ \mathrm{dB} + 3\ \mathrm{dB} = -111\ \mathrm{dBm} $$

です。送信ピークと受信雑音床の差は $90 – (-111) = 201\ \mathrm{dB}$。ざっと 200 dB、つまり電力比で $10^{20}$ 倍です。

送信ピーク電力+90 dBmと受信機雑音床-111 dBmの201 dBの隔たりを示す棒グラフ

この図は縦軸が dBm の対数目盛なので、棒の高さの差がそのまま dB 差になっています。左端の送信ピークと右端の雑音床の間には 201 dB、電力比にして $10^{20}$ 倍の隔たりがあります。中央の棒は、デュプレクサで 80 dB 落としたあとに受信機入口へ漏れ込む電力で、それでもなお雑音床より 121 dB 大きい。紫の矢印が示すこの 121 dB の余剰こそが「送信中は受信機を殺すしかない」という設計判断の根拠です。この 2 つを同じ端子につないでおくことは、物理的に不可能に近いと言ってよいレベルです。

そこで、送受切替器(デュプレクサ)を入れます。サーキュレータと TR リミッタを組み合わせた構成が典型的で、送信中はアンテナ端子から受信機への経路を 60〜80 dB 程度アイソレーションします。しかし、80 dB 落としても $90 – 80 = +10\ \mathrm{dBm}$(10 mW)が受信機の入り口に漏れ込みます。雑音床 $-111\ \mathrm{dBm}$ に対して、なお 121 dB も大きい。低雑音増幅器(LNA)は一瞬で飽和し、下手をすれば焼き切れます。だから送信中は受信機を「保護のために殺す」しかありません。これがブランキング(blanking)です。

回復時間 $t_r$ — 送信が終わっても、すぐには聞こえない

送信が終わればすぐ受信できる、というわけにもいきません。理由は 2 つあります。

第 1 に、TR リミッタや PIN ダイオードスイッチの物理的な復帰に時間がかかります。ガス入り TR 管では放電したプラズマが消えるまで、半導体リミッタでもキャリアが掃き出されるまで、数百 ns から数 μs を要します。

第 2 に、飽和した増幅器と、送信で励振された回路のリンギングが収まるまで待つ必要があります。導波管や給電系の不整合点で反射した送信電力が遅れて戻ってくる(近距離のスプリアス反射)ことも、しばらくは受信波形を汚します。

この、送信終了から正常受信が可能になるまでの待ち時間を受信回復時間 $t_r$(recovery time)と書きます。実機では 0.5〜数 μs のオーダーです。

まとめると、繰り返し周期(PRI, pulse repetition interval)$T$ の 1 周期の中で、レーダーの時間軸は次の 3 つの区間に分かれます。

区間 時刻 状態
送信期間 $0 \le t < \tau$ 送信中。受信機はブランキング
回復期間 $\tau \le t < \tau + t_r$ 送信は終わったが、受信系がまだ使えない
受信窓 $\tau + t_r \le t < T$ ここだけがエコーを拾える

実機ではさらに、次の送信に備えたガード時間 $t_g$ を末尾に取り、受信窓を $[\tau + t_r,\ T – t_g)$ とすることもあります。以下では見通しを良くするために $t_g = 0$ とし、必要に応じて $T \to T – t_g$ と読み替えられるようにしておきます。

以下、本記事を通じて次の代表値を使います。S バンドの監視レーダーを想定した、素直な数値です。

$$ \tau = 10\ \mu\mathrm{s},\quad t_r = 2\ \mu\mathrm{s},\quad T = 320\ \mu\mathrm{s}\ (\mathrm{PRF} = 3.125\ \mathrm{kHz}) $$

デューティ比は $d = \tau/T = 3.125\ \%$ です。パルス圧縮を併用し、時間帯域積 100(圧縮後の分解能 15 m)を仮定します。

PRI 320μsが送信10μs・回復2μs・受信窓308μsに分割される様子と、対応する目標距離軸

代表値を実寸で描くと、送信と回復を合わせた「聞こえない時間」は 12 μs しかなく、320 μs のうち 96.25 % は受信窓です。時間の穴は比率で見れば小さいのです。上側の第 2 軸は「150 m / μs」の換算で目標距離を振ったもので、12 μs の穴が距離軸では 1.8 km、受信窓の終端 320 μs が 48 km に対応することが読み取れます。この 2 本の軸を行き来できるようになると、以降の議論はすべて見通しよく追えます。

ここまでで、レーダーの 1 周期が「聞こえない時間」と「聞こえる時間」に割れていることを確認しました。では、この時間の穴が距離軸の上でどこに現れるのか。次はそれを式にします。

最小探知距離 $R_{\min}$ の導出

往復時間と距離の対応

距離 $R$ にある目標からのエコーは、電波が往復する時間だけ遅れて戻ってきます。往復距離は $2R$、伝搬速度は光速 $c$ ですから、遅延は

$$ \begin{equation} t_R = \frac{2R}{c} \end{equation} $$

です。距離 150 m あたり 1 μs、と覚えておくと暗算が効きます($c \cdot 1\,\mu\mathrm{s}/2 = 150\ \mathrm{m}$)。

ここで重要なのは、エコーは点ではなく、送信パルスと同じ長さ $\tau$ の「幅を持った区間」だという点です。送信パルスが $[0, \tau)$ を占めるなら、そのエコーは時間軸上で $[t_R,\ t_R + \tau)$ を占めます。この幅こそが、これから議論するエクリプシングの主役になります。

受信できる条件

まず、エコーが 1 サンプルも欠けずに受信できる条件を書き下します。エコー区間 $[t_R, t_R+\tau)$ が受信窓 $[\tau + t_r,\ T)$ に完全に含まれればよいので、

$$ t_R \ge \tau + t_r \quad \text{かつ} \quad t_R + \tau \le T $$

の 2 条件です。第 1 条件に $t_R = 2R/c$ を代入して $R$ について解くと、

$$ \frac{2R}{c} \ge \tau + t_r \quad \Longleftrightarrow \quad R \ge \frac{c(\tau + t_r)}{2} $$

となります。したがって最小探知距離は次式で与えられます。

$$ \begin{equation} R_{\min} = \frac{c(\tau + t_r)}{2} \end{equation} $$

代表値を入れると、

$$ R_{\min} = \frac{3\times 10^8 \times (10 + 2)\times 10^{-6}}{2} = 1800\ \mathrm{m} $$

です。つまりこのレーダーは、1.8 km 以内の目標を完全な形では受信できません。さらに、エコーが 1 サンプルも受信窓にかからない「完全な不感帯」は、$t_R + \tau \le \tau + t_r$ すなわち $t_R \le t_r$ の範囲、距離にして

$$ R \le \frac{c\,t_r}{2} = \frac{3\times10^8 \times 2\times10^{-6}}{2} = 300\ \mathrm{m} $$

です。300 m 以内は文字通り何も映らず、300 m から 1800 m の間はエコーの一部だけが受信窓にかかる「部分的に見える」領域になります。

距離150m/300m/900m/1800m/3000mの目標のエコーが受信窓とどれだけ重なるかを並べた図

この図は 5 つの距離の目標について、エコー区間が時間軸のどこに来るかを並べたものです。薄い部分がエコー全体、濃い部分が実際に受信窓と重なって受かる分で、右側に $\eta$ の実測値を添えてあります。150 m と 300 m はエコーが丸ごと送信・回復区間に埋もれて $\eta=0$、900 m は後半 4 割だけが受かって $\eta=0.40$、そして 1800 m でようやく先頭が受信開始時刻 12 μs にちょうど届き $\eta=1$ になります。$R_{\min}=1800$ m という値が、幾何的にどこから来るのかがこの一枚で見て取れます。

この中間領域の扱いが、次節のエクリプシング係数です。

パルス幅を変えたときの $R_{\min}$

$R_{\min}$ はパルス幅にほぼ比例します。代表的な値を並べてみましょう($t_r = 2\ \mu\mathrm{s}$ で固定)。

パルス幅 $\tau$ $R_{\min}$ 用途の例
0.5 μs 375 m 短距離監視、船舶レーダーの近距離レンジ
1 μs 450 m 気象レーダーの標準パルス
10 μs 1.8 km 空港監視レーダー(本記事の例)
100 μs 15.3 km 長距離早期警戒レーダー
1 ms 150.3 km 弾道ミサイル警戒・宇宙監視レーダー

パルス幅0.1μs〜2msに対する最小探知距離の両対数プロット。用途別の代表点つき

両対数で描くと、$R_{\min}$ は $\tau$ が $t_r$ より十分大きい領域(およそ 10 μs 以上)では傾き 1 の直線、すなわち $\tau$ に正比例します。一方、$\tau \lesssim 1\ \mu\mathrm{s}$ の短パルス側では曲線が寝て、$c\,t_r/2 = 300$ m の床に漸近します。灰色破線(回復時間を無視した $c\tau/2$)との乖離がその床の正体で、短パルスレーダーでは $R_{\min}$ を決めているのはパルス幅ではなく回復時間のほうだとわかります。船舶レーダーの近距離性能を詰めるときに $t_r$ の短縮が効くのはこのためです。

長距離レーダーほど不感距離が伸びるのは、避けようのない構造です。探知距離を伸ばすには受信エネルギー $P_t \tau$ を稼ぐしかなく、ピーク電力に上限がある以上、$\tau$ を伸ばすことになるからです。

パルス圧縮では救えない

ここで、初学者が最も引っかかりやすい点を押さえておきます。「パルス圧縮を使えば実効パルス幅は $1/B$ に縮むのだから、$R_{\min}$ も縮むのでは?」という疑問です。

答えは No です。$R_{\min}$ を決めるのは、圧縮後の分解能 $c/(2B)$ ではなく、空中を実際に飛んでいる物理的なパルスの長さ $\tau$ です。チャープ変調をかけていようが位相符号化していようが、送信機は $\tau$ の間ずっと電波を出し続けており、その間ずっと受信機は殺されています。圧縮は受信後の信号処理であって、受信できなかったものを取り戻す手段ではありません。

むしろパルス圧縮レーダーのほうが状況は厳しくなります。パルス圧縮は「長いパルスで高い分解能」を実現する技術なので、$\tau$ を積極的に長く取るからです。時間帯域積 100 のチャープなら、分解能 15 m のために 10 μs のパルスを撃つ。分解能は 15 m なのに不感距離は 1.8 km、という一見奇妙な組み合わせが生まれます。

実務では、この穴を埋めるためにフィルパルス(fill pulse)や短パルスモードを併用します。長パルス $\tau_1$ と短パルス $\tau_2 \ll \tau_1$ を交互に、あるいは 1 つの PRI の中で続けて送信し、近距離は短パルスで、遠距離は長パルスで担当させます。マルチ波形設計と呼ばれる領域です。

さらに、送信スペクトルの裾やアンテナ近傍界の反射で近距離の受信が汚れる問題に対しては、STC(sensitivity time control, 感度時間制御)で受信利得を距離に応じて $R^{4}$ 的に立ち上げる手当てを併用します。ただし STC はダイナミックレンジ対策であって、不感距離そのものを縮める技術ではないことに注意してください。

ここまでは「近すぎる目標が見えない」話でした。ところが、レーダーの時間軸は $T$ ごとに折りたたまれています。次はこの折りたたみによって、遠方にも同じ穴が周期的にコピーされることを見ていきます。

距離折り返しが不感帯を周期的にコピーする

最大無曖昧距離

パルスレーダーは、あるパルスに対するエコーが返ってくる前に次のパルスを撃ってしまうことがあります。受信機は「今受け取ったエコーがどのパルスに対応するのか」を知らないので、遅延を素直に距離に換算すると誤ります。

エコーが必ず次の送信より前に戻る条件は $t_R < T$ であり、対応する距離が最大無曖昧距離です。

$$ \begin{equation} R_u = \frac{cT}{2} = \frac{c}{2\,\mathrm{PRF}} \end{equation} $$

代表値では $R_u = 3\times10^8 \times 320\times10^{-6}/2 = 48\ \mathrm{km}$ です。

$R > R_u$ の目標があると、受信機はその遅延を $T$ で割った余りとして観測します。真距離 $R$ に対する見かけの距離(apparent range)は

$$ \begin{equation} R_a = R \bmod R_u \end{equation} $$

です。真距離 137.4 km の目標は、$R_u = 48$ km のレーダーでは $137.4 – 2\times48 = 41.4$ km の位置に「second-time-around echo」として現れます。これが距離折り返し(range ambiguity)です。

エクリプシングが周期的に並ぶ理由

ここが本記事の要点です。受信できるかどうかを決めるのは真距離 $R$ ではなく、見かけの距離 $R_a$(= $T$ で割った余りの遅延 $t_a = t_R \bmod T$)です。なぜなら、レーダーの送信・回復・受信のパターン自体が周期 $T$ で繰り返されているからです。

したがって、$R_a$ が小さいところ、つまり

$$ R \approx 0,\ R_u,\ 2R_u,\ 3R_u,\ \dots $$

の近傍にいる目標はすべて、近距離目標とまったく同じ理由で受信できません。47 km を飛ぶ航空機は、レーダーから見れば「送信の真っ最中に帰ってくる」という意味で、200 m 先のヘリコプターと同じ扱いを受けるのです。

さらに注意深く見ると、不感帯は $R_u$ の手前側にも広がります。$t_a$ が $T$ に近い目標は、エコーの前半だけが今の受信窓に入り、後半が次の送信期間に飲み込まれます。$t_a > T – \tau$ で欠け始めるので、距離では $R_a > R_u – c\tau/2 = 48 – 1.5 = 46.5$ km から劣化が始まります。

まとめると、不感/劣化帯は各 $nR_u$ を中心として

$$ \left[\,nR_u – \frac{c\tau}{2},\ nR_u + \frac{c(\tau + t_r)}{2}\,\right] $$

に広がり、その幅は

$$ \Delta R_{\text{blind}} = \frac{c(2\tau + t_r)}{2} = \frac{3\times10^8\times 22\times 10^{-6}}{2} = 3300\ \mathrm{m} $$

です。48 km 周期で 3.3 km 幅の帯が刺さる、というイメージになります。全距離に占める割合は $3.3/48 = 6.875\ \%$。デューティ比 3.1 % のレーダーでも、距離軸の 7 % が損なわれるわけです。

真距離に対する見かけ距離の鋸歯状グラフと、48km周期で並ぶ不感/劣化帯

青い鋸歯が $R_a = R \bmod R_u$ の関係で、48 km ごとに $R_a$ がゼロへ折り返す様子が見えます。受信可否を決めるのは縦軸の $R_a$ であって横軸の $R$ ではないため、$R_a$ が小さくなる折り返し点の近傍(赤い帯)がそのまま不感/劣化帯になり、48 km・96 km・144 km と同じ幅 3.3 km でコピーされていきます。橙の点は真距離 137.4 km の機体で、$R_a = 41.4$ km の位置に「second-time-around echo」として現れることを示しています。0 km 付近の帯と 48 km 付近の帯が同じ形をしていることが、「近すぎて見えない」と「遠すぎて見えない」が同一の現象だという主張の視覚的な証拠です。

ここまでは「見えるか/見えないか」の白黒でした。しかし実際には、その中間、つまりエコーの一部だけが受信できる領域が帯の大半を占めています。次はこの中間状態を定量化しましょう。

エクリプシング係数の定義と導出

直感 — 開いたシャッターの前を通り過ぎる列車

エコーは長さ $\tau$ の列車、受信窓は開いた駅のホームだと思ってください。列車がホームにぴったり収まっていれば全車両を撮影できます。列車が入りきる前にシャッターが閉じたり、まだ入り口に頭を突っ込んだところで開いたりすると、写るのは一部の車両だけです。写った車両数の割合、それがエクリプシング係数です。

正式には、エコーのうち受信窓に重なっている時間の割合として定義します。

$$ \begin{equation} \eta(R) = \frac{1}{\tau}\left|\ [\,t_R,\ t_R + \tau\,) \cap \mathcal{W}\ \right|, \qquad \mathcal{W} = \bigcup_{k\in\mathbb{Z}} [\,kT + \tau + t_r,\ (k+1)T\,) $$

$|\cdot|$ は区間の長さ(測度)、$\mathcal{W}$ は周期的に並ぶ受信窓の集合です。定義から $0 \le \eta \le 1$ です。

場合分けによる導出

$T \ge 2\tau + t_r$(デューティ比がそこそこ小さい)と仮定します。この条件のもとでは、エコー区間が PRI の境界をまたぐのはたかだか 1 回なので、見かけの遅延 $t_a = t_R \bmod T$ だけで $\eta$ が書けます。4 つの場合に分かれます。

(i) $0 \le t_a \le t_r$ — 完全な食

エコーの終端 $t_a + \tau$ が受信開始時刻 $\tau + t_r$ 以下、すなわち $t_a \le t_r$ のとき、エコーは丸ごとブランキング区間に埋もれます。

$$ \eta = 0 $$

(ii) $t_r < t_a \le t_r + \tau$ — 立ち上がりの傾斜

エコーの先頭はブランキング中に到着しますが、後半が受信窓に入ります。重なりはエコー終端から受信開始時刻を引いた長さです。

$$ \left|[\,t_a, t_a+\tau) \cap [\tau + t_r,\ T)\right| = (t_a + \tau) – (\tau + t_r) = t_a – t_r $$

$\tau$ で割って、

$$ \eta = \frac{t_a – t_r}{\tau} $$

$t_a = t_r$ で $0$、$t_a = t_r + \tau$ で $1$ に達する一次関数です。

(iii) $t_r + \tau < t_a \le T - \tau$ — 完全受信

エコーが受信窓に丸ごと収まります。

$$ \eta = 1 $$

(iv) $T – \tau < t_a < T$ — 立ち下がりの傾斜

エコーの前半 $[t_a, T)$ は今の受信窓で受かりますが、後半 $[T,\ t_a + \tau)$ は次の PRI の送信期間 $[T, T+\tau)$ に飲み込まれます。$t_a + \tau < T + \tau$ なので、はみ出した分は全部失われます。したがって重なりは $T - t_a$ で、

$$ \eta = \frac{T – t_a}{\tau} $$

$t_a = T – \tau$ で $1$、$t_a \to T$ で $0$ に落ちる一次関数です。

以上をまとめると、$\eta(t_a)$ は「0 の平坦部 → 上り坂 → 1 の平坦部 → 下り坂」という台形状のプロファイルになります。

$$ \begin{equation} \eta(t_a) = \begin{cases} 0 & 0 \le t_a \le t_r \\[4pt] \dfrac{t_a – t_r}{\tau} & t_r < t_a \le t_r + \tau \\[8pt] 1 & t_r + \tau < t_a \le T - \tau \\[6pt] \dfrac{T - t_a}{\tau} & T - \tau < t_a < T \end{cases} \end{equation} $$

エクリプシング係数の台形プロファイルを4区間に分けて示した破断軸グラフ

台形の全体像です。$T = 320\ \mu\mathrm{s}$ に対して傾斜部はわずか 10 μs ずつしかないため、素直に描くと両端が潰れて見えません。そこで左端(0〜18 μs)と右端(302〜320 μs)を拡大した破断軸で示しています。左の (i) と (ii)、右の (iv) が導出した 4 区間にそのまま対応し、中央の (iii) が $\eta=1$ の広大な平坦部です。赤い破線が平均 $\bar{\eta}=0.9625$ で、平坦部($\eta=1$)のすぐ下にぴたりと張り付いていることが、「平均で見るとほとんど損していないように見える」という後述の落とし穴を先取りしています。

距離に直すには $t_a = 2R_a/c$ を代入するだけです。上り坂は $R_a \in (c t_r/2,\ R_{\min}]$、下り坂は $R_a \in (R_u – c\tau/2,\ R_u)$ に対応します。

平均エクリプシング係数

距離軸上で目標が一様に分布していると考えたとき、平均してどれだけのエコーを受け取れるのかを計算しておきます。台形の面積を求めるだけです。1 周期にわたる積分は、平坦部の長方形と 2 つの三角形の和になります。

$$ \int_0^T \eta(t_a)\,dt_a = \underbrace{0 \cdot t_r}_{\text{(i)}} + \underbrace{\frac{\tau}{2}}_{\text{(ii) 三角形}} + \underbrace{\left(T – \tau – (t_r + \tau)\right)}_{\text{(iii) 長方形}} + \underbrace{\frac{\tau}{2}}_{\text{(iv) 三角形}} $$

三角形は底辺 $\tau$・高さ 1 なので面積 $\tau/2$、これが 2 つで $\tau$。長方形の底辺は $(T-\tau) – (t_r+\tau) = T – 2\tau – t_r$ です。足し合わせると、

$$ \int_0^T \eta\,dt_a = \tau + T – 2\tau – t_r = T – \tau – t_r $$

$T$ で割って平均を得ます。

$$ \begin{equation} \bar{\eta} = 1 – \frac{\tau + t_r}{T} = 1 – d – \frac{t_r}{T} \end{equation} $$

驚くほど素直な形です。平均エクリプシング係数は「1 からデューティ比と回復時間比を引いたもの」にすぎません。代表値では

$$ \bar{\eta} = 1 – \frac{12\ \mu\mathrm{s}}{320\ \mu\mathrm{s}} = 0.9625 $$

となります。同じ論法で、完全不感($\eta = 0$)となる距離の割合は $t_r/T = 0.625\ \%$、何らかの劣化を受ける($\eta < 1$)割合は $(2\tau + t_r)/T = 6.875\ \%$ です。前節で幾何的に求めた 6.875 % と一致しています。

ここまでで「どれだけのエコーが受け取れるか」が距離の関数として書けました。しかしレーダー技術者が本当に知りたいのは、それが SNR で何 dB の損失に相当するかです。次はその換算を行います。

エクリプシング損を dB で表す

マッチトフィルタ出力への影響

受信機は、送信波形に整合したマッチトフィルタ(相関器)を通してエコーを検出します。エコーの一部しか届かないとき、出力ピークはどうなるでしょうか。

送信波形を $s(t)$(長さ $\tau$、エネルギー $E$)とし、受信されたのはその一部 $s(t)\cdot \mathbb{1}_{\mathcal{W}}(t)$ だとします。フィルタ側は $s(t)$ 全体に整合したままなので、相関ピークは

$$ y_{\text{peak}} = \int s(t)\,\mathbb{1}_{\mathcal{W}}(t)\, s^*(t)\,dt = \int_{\mathcal{W}} |s(t)|^2 dt = \eta E $$

となります(振幅が一定のパルスを仮定)。出力振幅は $\eta$ に比例します。

一方、雑音側はどうでしょう。フィルタの形は変えていないので、出力雑音電力は $\eta$ に依存せず一定です。したがって、

$$ \begin{equation} \mathrm{SNR}_{\text{out}} = \eta^2 \cdot \mathrm{SNR}_{\text{out}}^{(\eta = 1)} \end{equation} $$

となり、エクリプシング損は電力比で $\eta^2$、dB では

$$ \begin{equation} L_e = 20\log_{10}\frac{1}{\eta}\ [\mathrm{dB}] \end{equation} $$

です。具体的な値を並べると次の通りです。

$\eta$ 損失 $20\log_{10}(1/\eta)$ 備考
1.00 0 dB 完全受信
0.75 2.50 dB 4 分の 1 が欠ける
0.50 6.02 dB 半分が欠ける
0.25 12.04 dB 大半が欠ける
0.10 20.00 dB ほぼ見えない

エコーが半分欠けただけで 6 dB、探知距離に換算すると $R \propto \mathrm{SNR}^{1/4}$ より $\sqrt{\eta} = \sqrt{0.5} = 0.707$ 倍、つまり 3 割も縮む計算です。エクリプシングが「軽微な劣化」ではないことがわかります。

エクリプシング係数に対する損失dB曲線と、探知距離の縮小率√ηの曲線

左のグラフは、整合フィルタを固定したときの $20\log_{10}(1/\eta)$(橙実線)と、フィルタ長を適応させたときの $10\log_{10}(1/\eta)$(青破線)を並べたものです。$\eta$ が 1 から下がり始めた直後はどちらも緩やかですが、$\eta < 0.3$ から急激に立ち上がり、$\eta = 0.1$ では 20 dB に達します。損失は $\eta$ に比例して増えるのではなく、対数的に暴れるという点が要注意です。右のグラフは同じことを探知距離で見たもので、$\mathrm{SNR} \propto \eta^2$ と $R \propto \mathrm{SNR}^{1/4}$ を合わせると $R \propto \sqrt{\eta}$ という平方根則になります。$\eta=0.25$ でも探知距離は半分にしか縮まない、という意味では距離のほうが鈍感です。

フィルタ長を適応させた場合

なお、受信機がエコーの欠損を知っていて、届いた部分 $\eta\tau$ だけに整合したフィルタを使えば話は変わります。このとき信号エネルギーは $\eta E$、雑音帯域は $1/(\eta\tau)$ に広がるので、出力 SNR は $\eta$ の 1 乗に比例し、損失は

$$ L_e’ = 10\log_{10}\frac{1}{\eta}\ [\mathrm{dB}] $$

に半減します。$\eta = 0.5$ なら 3.01 dB です。実機では距離ゲートごとに整合長を切り替えるのは負担が大きく、また $\eta$ を事前に知る必要があるため、設計値としては保守的な $20\log_{10}(1/\eta)$ を使うのが一般的です。以下の実装でも $\eta^2$ を採用します。

平均電力損

距離が一様分布のときの平均的な受信電力比は $\overline{\eta^2}$ です。台形の 2 乗を積分します。傾斜部では $\eta$ が $0$ から $1$ まで線形に変化するので、$x = t_a – t_r$ とおいて

$$ \int_{t_r}^{t_r+\tau}\left(\frac{x}{\tau}\right)^2 dx = \frac{\tau}{3} $$

これが上りと下りで 2 つ、平坦部は $T – 2\tau – t_r$ です。したがって、

$$ \begin{equation} \overline{\eta^2} = 1 – \frac{\frac{4}{3}\tau + t_r}{T} \end{equation} $$

代表値では $\overline{\eta^2} = 1 – (13.33 + 2)/320 = 0.9521$、dB にして $-0.213$ dB です。低デューティのレーダーなら、平均するとエクリプシング損は 0.2 dB 程度でしかありません。

ところが、戦闘機の高 PRF パルスドップラーレーダーのようにデューティ比が大きい場合は様相が一変します。$\tau = 30\ \mu\mathrm{s}$、$T = 100\ \mu\mathrm{s}$(PRF 10 kHz、デューティ 30 %)、$t_r = 1\ \mu\mathrm{s}$ とすると、

$$ \bar{\eta} = 1 – \frac{31}{100} = 0.69,\qquad \overline{\eta^2} = 1 – \frac{40+1}{100} = 0.59\ (-2.29\ \mathrm{dB}) $$

平均で 2.3 dB の損失、完全不感の距離割合は 1.0 %、$R_u$ はわずか 15 km、$R_{\min}$ は 4.65 km です。高 PRF レーダーで距離情報がほとんど使い物にならず、ドップラー(速度)主体の運用になる理由の一端がここにあります。

デューティ比に対する平均エクリプシング係数の直線グラフ。空港監視3.1%と戦闘機30%の比較

$\bar{\eta} = 1 – d – t_r/T$ と $\overline{\eta^2} = 1 – (4d/3 + t_r/T)$ はどちらもデューティ比 $d$ の一次式なので、グラフは単なる直線です。ただし傾きが $-1$ と $-4/3$ で異なるため、$d$ が大きくなるほど 2 本の間隔が開いていきます。この開きが「平均電力で見た損失」に相当します。左端の空港監視レーダー($d=3.1\ \%$)では 2 本がほぼ重なっていて損失 0.21 dB ですが、右へ進んで戦闘機の $d=30\ \%$ まで来ると $\bar{\eta}=0.69$ と $\overline{\eta^2}=0.59$ に開き、損失は 2.29 dB になります。同じ式の同じ直線上を右へ移動しただけで、エクリプシングの位置づけが「無視できる誤差」から「支配的な損失項」へ変わることが見て取れます。

平均値だけを見ていると「0.2 dB なら誤差」と思ってしまいますが、実際の脅威は平均ではなく特定の距離帯が丸ごと消えることです。次節では、それを検出確率という形で可視化します。

Python 実装 1: エクリプシング係数のプロファイル

まず、これまで導出した台形プロファイルを、定義(区間の交差の測度)から直接数値計算して確かめます。解析解を使わず愚直に交差を取ることで、場合分けが正しかったかを検証できます。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

# 日本語フォント設定
for cand in ["Hiragino Sans", "Yu Gothic", "Noto Sans CJK JP", "IPAexGothic", "Meiryo"]:
    if any(cand == f.name for f in matplotlib.font_manager.fontManager.ttflist):
        plt.rcParams["font.family"] = cand
        break
plt.rcParams["axes.unicode_minus"] = False

c = 3.0e8          # 光速 [m/s]
tau = 10e-6        # 送信パルス幅 [s]
t_r = 2e-6         # 受信回復時間 [s]
T = 320e-6         # PRI [s]  (PRF = 3.125 kHz)

def eclipsing_factor(R, T, tau, t_r, c=3.0e8):
    """定義どおり、エコー区間と周期的な受信窓の交差長を数える"""
    R = np.atleast_1d(R).astype(float)
    eta = np.zeros_like(R)
    for i, Ri in enumerate(R):
        a, b = 2 * Ri / c, 2 * Ri / c + tau     # エコー区間 [a, b)
        s = 0.0
        for k in range(int(np.floor(a / T)), int(np.floor(b / T)) + 1):
            w0, w1 = k * T + tau + t_r, (k + 1) * T   # 第k周期の受信窓
            s += max(0.0, min(b, w1) - max(a, w0))
        eta[i] = s / tau
    return eta

R_u = c * T / 2
R_min = c * (tau + t_r) / 2
print(f"最大無曖昧距離 R_u   = {R_u/1e3:.2f} km")
print(f"最小探知距離   R_min = {R_min:.0f} m")
print(f"完全不感距離         = {c*t_r/2:.0f} m")

実行すると、$R_u = 48.00$ km、$R_{\min} = 1800$ m、完全不感距離 300 m と表示されます。導出した式と一致しており、実装の入り口としては問題ありません。$R_u$ が 48 km ということは、この設計では 48 km ごとに不感帯が刺さることを意味します。

続いて、距離を掃引して $\eta$ とエクリプシング損を描きます。

R = np.linspace(0, 3 * R_u, 300001)
eta = eclipsing_factor(R, T, tau, t_r)

# 数値平均と理論式の照合
print("平均 eta   数値 %.6f / 理論 %.6f" % (eta.mean(), 1 - (tau + t_r) / T))
print("平均 eta^2 数値 %.6f / 理論 %.6f" % ((eta**2).mean(),
                                            1 - (4*tau/3 + t_r) / T))

fig, ax = plt.subplots(2, 1, figsize=(11, 7), sharex=True)
ax[0].plot(R / 1e3, eta, lw=1.2, color="tab:blue")
ax[0].set_ylabel("エクリプシング係数 $\\eta$")
ax[0].set_title("距離に対するエクリプシング係数($\\tau$=10μs, $t_r$=2μs, PRF=3.125kHz)")
for n in range(4):
    ax[0].axvline(n * R_u / 1e3, color="gray", ls=":", lw=0.8)
ax[0].axhline(1 - (tau + t_r) / T, color="tab:red", ls="--", lw=1.0,
              label="平均 $\\bar{\\eta}=1-(\\tau+t_r)/T$")
ax[0].legend(loc="lower right"); ax[0].grid(alpha=0.3)

loss = -20 * np.log10(np.maximum(eta, 1e-3))
ax[1].plot(R / 1e3, loss, lw=1.2, color="tab:orange")
ax[1].set_ylim(60, -2); ax[1].set_ylabel("エクリプシング損 [dB]")
ax[1].set_xlabel("真距離 [km]"); ax[1].grid(alpha=0.3)
plt.tight_layout(); plt.show()

出力される平均値は、$\bar{\eta}$ が数値 $0.962497$ に対し理論 $0.962500$、$\overline{\eta^2}$ が数値 $0.952080$ に対し理論 $0.952083$ で、いずれも 5 桁以上一致します。場合分けによる導出が正しかったことの、これ以上ない確認です。

真距離0〜144kmのエクリプシング係数と、対応する損失dBの2段グラフ

グラフからは 3 つのことが読み取れます。第 1 に、$\eta$ は 0 km、48 km、96 km、144 km を中心にして深い切れ込みを持ち、それ以外ではきれいに 1 に張り付いています。つまり損失は「薄く広く」ではなく「狭く深く」効きます。第 2 に、切れ込みは左右非対称です。手前側($R_u$ の直前)は幅 1.5 km($c\tau/2$)、奥側は幅 1.8 km($R_{\min}$)で、回復時間 $t_r$ の分だけ奥側が広がっています。第 3 に、下段の dB 表示を見ると、切れ込みの底では損失が 20 dB を軽く超えます。平均 0.21 dB という数字がいかに実態を隠しているかがよくわかります。

台形の細部を確かめるために、1 周期分だけを拡大した図も描いておきます。

Rz = np.linspace(R_u - 4e3, R_u + 4e3, 40001)
ez = eclipsing_factor(Rz, T, tau, t_r)

plt.figure(figsize=(10, 4.2))
plt.plot(Rz / 1e3, ez, lw=1.6, color="tab:blue")
plt.axvspan((R_u - c*tau/2)/1e3, R_u/1e3, color="tab:orange", alpha=0.18,
            label="下り坂:エコー後半が次の送信に飲まれる")
plt.axvspan(R_u/1e3, (R_u + c*t_r/2)/1e3, color="tab:red", alpha=0.25,
            label="完全不感:幅 $c\\,t_r/2$ = 300 m")
plt.axvspan((R_u + c*t_r/2)/1e3, (R_u + c*(tau+t_r)/2)/1e3,
            color="tab:green", alpha=0.18, label="上り坂:エコー前半がブランキング中")
plt.xlabel("真距離 [km]"); plt.ylabel("エクリプシング係数 $\\eta$")
plt.title("不感帯の内部構造($R_u$=48 km 近傍の拡大)")
plt.legend(fontsize=9); plt.grid(alpha=0.3); plt.tight_layout(); plt.show()

Ru=48km近傍を拡大したエクリプシング係数。下り坂1.5km・完全不感300m・上り坂1.5kmの内訳

拡大図では、導出した台形の 4 区間がそのまま現れます。46.5 km から 48.0 km にかけて $\eta$ が 1 から 0 へ直線的に落ち、48.0 km から 48.3 km までは完全にゼロ、そこから 49.8 km にかけて直線的に 1 へ戻ります。帯の全幅は 3.3 km で、$c(2\tau + t_r)/2$ の計算値と一致します。傾斜が直線になるのは、送信パルスの振幅が一定(矩形包絡線)だからで、テーパをかけた波形では傾斜も曲線になります。

不感帯の形が分かったので、次はこれが検出性能にどう跳ね返るか、そして PRF をばらつかせると何が起きるかを見ていきます。

Python 実装 2: 検出確率と PRF スタガリング

検出確率のモデル

エクリプシング損を「検出できるか」という最終的な指標に落とし込みます。ここでは最も標準的な設定、すなわち非変動目標(Swerling 0 / Marcum ケース)を二乗検波で検出するモデルを使います。

雑音電力を 1 に正規化すると、検波後の統計量 $x$ は自由度 2 の非心カイ二乗分布(非心度 $2\cdot\mathrm{SNR}$)に従います。しきい値 $\gamma$ に対する誤警報確率と検出確率は、

$$ P_{fa} = e^{-\gamma},\qquad P_d = Q_M\!\left(\sqrt{2\,\mathrm{SNR}},\ \sqrt{2\gamma}\right) $$

です。$Q_M$ はマーカム Q 関数で、SciPy では scipy.stats.ncx2.sf(2*gamma, df=2, nc=2*SNR) として直接計算できます。$N$ パルスをコヒーレント積分した場合は $\mathrm{SNR} \to N\cdot\mathrm{SNR}_1$ と置き換えるだけです。

エクリプシングは受信振幅を $\eta$ 倍するので、$\mathrm{SNR} \to \eta^2 N\,\mathrm{SNR}_1$ とします。加えて、レーダー方程式より単一パルス SNR は距離の 4 乗に反比例します。

$$ \mathrm{SNR}_1(R) = \mathrm{SNR}_1(R_{\text{ref}})\left(\frac{R_{\text{ref}}}{R}\right)^4 $$

import numpy as np
from scipy.stats import ncx2
import matplotlib.pyplot as plt

P_fa = 1e-6
gamma = np.log(1.0 / P_fa)            # しきい値(正規化): 13.8155

def Pd(snr_lin):
    """非変動目標・二乗検波の検出確率(マーカムQ)"""
    return ncx2.sf(2 * gamma, df=2, nc=2 * snr_lin)

# 60 km で 24 パルス積分後 SNR = 20 dB になるように基準を置く
R_ref, N_total = 60e3, 24
snr1_ref = 10 ** (20 / 10) / N_total
snr1 = lambda R: snr1_ref * (R_ref / R) ** 4
print("単一パルスSNR @60km = %.2f dB" % (10 * np.log10(snr1_ref)))
print("Pd(SNR=13dB) = %.4f" % Pd(10 ** 1.3))

単一パルス SNR は 60 km で 6.20 dB、参考として SNR 13 dB のときの $P_d$ は 0.8744 と表示されます。教科書の $P_d$–SNR 曲線($P_{fa}=10^{-6}$ で $P_d=0.9$ に必要な SNR は約 13.2 dB)とよく合っており、検出モデルとして妥当です。

単一 PRF とスタガ PRF の比較

ここからが本題です。PRI を 3 種類用意します。基本単位 $u = 5\ \mu\mathrm{s}$ の整数倍で

$$ T_1 = 63u = 315\ \mu\mathrm{s},\quad T_2 = 64u = 320\ \mu\mathrm{s},\quad T_3 = 65u = 325\ \mu\mathrm{s} $$

とします。$(63, 64, 65)$ は互いに素で、後の中国剰余定理でそのまま使えます。対応する $R_u$ は 47.25 km、48.00 km、48.75 km と少しずつずれるので、不感帯の位置も少しずつずれます。

比較を公平にするため、総パルス数を固定します。単一 PRF では 24 パルスを 1 つの PRF で使い、スタガでは 8 パルスずつを 3 つの PRF に割り振ります。スタガ側は 1 PRF あたり $10\log_{10}3 = 4.77$ dB の積分利得を失う、という代償を正しく織り込むためです。

c = 3.0e8; tau = 10e-6; t_r = 2e-6
PRIs = np.array([315e-6, 320e-6, 325e-6])
R = np.linspace(300.0, 60e3, 60000)

# 単一PRF(T=320us, 24パルス)
eta_single = eclipsing_factor(R, 320e-6, tau, t_r)
pd_single = Pd(24 * snr1(R) * eta_single ** 2)

# スタガ3PRF(各8パルス)
N_s = 8
etas = np.array([eclipsing_factor(R, T_i, tau, t_r) for T_i in PRIs])
pds = np.array([Pd(N_s * snr1(R) * e ** 2) for e in etas])

p_any  = 1 - np.prod(1 - pds, axis=0)                     # 1 of 3
p_2of3 = (pds[0]*pds[1]*(1-pds[2]) + pds[0]*pds[2]*(1-pds[1])
          + pds[1]*pds[2]*(1-pds[0]) + pds[0]*pds[1]*pds[2])  # 2 of 3

sel = R > 3e3
for name, p in [("単一PRF", pd_single), ("スタガ 1 of 3", p_any),
                ("スタガ 2 of 3", p_2of3)]:
    print("%-14s 最小Pd=%.4f  Pd<0.5の距離割合=%.2f%%"
          % (name, p[sel].min(), 100 * np.mean(p[sel] < 0.5)))

実行結果は次のようになります。

方式 3〜60 km での最小 $P_d$ $P_d < 0.5$ となる距離の割合
単一 PRF(24 パルス) 0.0000 1.76 %
スタガ 1 of 3(各 8 パルス) 0.7137 0.00 %
スタガ 2 of 3(各 8 パルス) 0.0012 2.67 %

この表は本記事で最も重要な結果です。単一 PRF では、48 km 付近に $P_d$ が実質ゼロまで落ち込む帯が存在し、3〜60 km の 1.76 % がまともに検出できません。ところがスタガして「3 つの PRF のうち 1 つでも検出すればよい」という判定にすると、最小 $P_d$ が 0.71 まで持ち上がり、$P_d < 0.5$ の距離は 1 つも残りません。1 PRF あたりの積分パルス数が 3 分の 1 に減って 4.8 dB 損しているにもかかわらず、です。

一方で「3 つのうち 2 つで検出」という条件にすると、状況はむしろ悪化します($P_d<0.5$ が 2.67 %)。理由は明快で、ある距離が 1 つの PRF で完全に食われているとき、2-of-3 を満たすには残り 2 つの両方で検出しなければならず、しかもそれぞれの SNR は 4.8 dB 落ちているからです。不感帯対策としては 1-of-M(OR 判定)でなければ意味がないという、設計上の重要な教訓です。もっとも 1-of-M は誤警報も M 倍に増えるので、実際には PRF ごとのしきい値を上げて総 $P_{fa}$ を保つ調整が要ります。

個別の距離での内訳を見ると、仕組みがさらにはっきりします。

距離 $\eta$(315/320/325 μs) 単一 PRF $P_d$ 1 of 3 2 of 3
47.25 km 0.00 / 0.50 / 1.00 1.0000 1.0000 0.9210
48.00 km 0.30 / 0.00 / 0.50 0.0000 0.8973 0.0832
48.75 km 0.80 / 0.30 / 0.00 0.8955 1.0000 0.0760

47.25 km では 1 番目の PRF が全滅、48.00 km では 2 番目が、48.75 km では 3 番目が全滅しています。どの距離でも死ぬのは 1 つだけで、残りが必ず生き残る。これが PRF スタガの本質です。3 つの不感帯が同じ距離に重なるのは $\mathrm{lcm}(63,64,65)\cdot u$ に対応する遥か遠方であり、実用上は現れません。

3つのPRFそれぞれのエクリプシング係数が48km付近で少しずつずれた谷を作る様子

表の内容をそのまま図にしたのがこれです。3 本の台形の谷が 47.25 km・48.00 km・48.75 km と 750 m ずつずれて並んでおり、どの縦線を引いても $\eta=0$ に落ちているのは高々 1 本だけであることが確認できます。黒い点線は 3 つのうち最良の $\eta$、すなわち 1-of-3 判定が実質的に使う値で、最も悪い 48.15 km 付近でも 0.4 を保っています。谷が 750 m ずつずれるのは PRI 差 5 μs が距離量子 $q = 750$ m に対応するからで、この「ずらし幅」の設計こそが PRF セット選定の中身です。

plt.figure(figsize=(11, 5))
plt.plot(R / 1e3, pd_single, lw=1.3, label="単一PRF(320μs, 24パルス)")
plt.plot(R / 1e3, p_any, lw=1.6, label="スタガ3PRF:1つ以上で検出")
plt.plot(R / 1e3, p_2of3, lw=1.2, ls="--", label="スタガ3PRF:2つ以上で検出")
plt.axhline(0.5, color="gray", ls=":", lw=0.9)
plt.xlabel("真距離 [km]"); plt.ylabel("検出確率 $P_d$")
plt.title("PRFスタガリングによる不感帯の解消($P_{fa}=10^{-6}$, 総パルス数24で公平比較)")
plt.legend(); plt.grid(alpha=0.3); plt.tight_layout(); plt.show()

単一PRFとスタガ3PRFの検出確率を全距離と48km近傍の拡大で比較したグラフ

左の全距離図を見ると、3 本の曲線は 60 km までほぼ 1.0 に張り付いており、落ち込みは 48 km 付近にただ 1 本の細い切れ込みとして現れます。損失は「薄く広く」ではなく「狭く深く」効くという前節の主張が、検出確率という最終指標でもそのまま成り立っているわけです。右の拡大図で内訳を見ると、単一 PRF(青)は 47.5 km で崖のように $P_d$ が落ち、48.7 km まで実質ゼロのまま戻りません。対して 1-of-3(橙)は谷底でも 0.71 で踏みとどまり、しきい値 0.5 を一度も割りません。2-of-3(緑破線)は谷がむしろ左右に広がり、単一 PRF より悪い区間ができています。

なお、この SNR 設定(60 km で 24 パルス積分後 20 dB)では、$R^{-4}$ による自然な低下は 60 km までは現れません。単一 PRF の 60 km での積分後 SNR は 20.0 dB、スタガ側は 1 PRF あたり 15.2 dB で、いずれも $P_d \approx 1$ を保つ余裕があるからです。スタガが払っている $10\log_{10}3 = 4.8$ dB の代償は、この距離範囲では $P_d$ の低下としてではなくマージンの目減りとして現れています。より遠くまで探知しようとすれば、その 4.8 dB が先に効いてスタガ側から $P_d$ が崩れ始めます。スタガは「最悪値を守る代わりに探知距離の余裕を少し削る」トレードオフだと理解しておくのが正確です。

ここまでで、複数 PRF が不感帯を埋めることを確認しました。ところで、複数 PRF を持つと副産物としてもう 1 つ強力な武器が手に入ります。折り返した距離を復元できるのです。

距離折り返しの解消 — 中国剰余定理

問題設定

PRF $i$ で観測される見かけの距離は、真距離を $R_{u,i}$ で割った余りです。

$$ R_{a,i} = R \bmod R_{u,i}, \qquad R_{u,i} = \frac{cT_i}{2} $$

余りだけが複数与えられて、もとの数を当てる。これは中国剰余定理(Chinese Remainder Theorem, CRT)が扱う古典的な問題そのものです。

CRT を適用するには、距離を整数に量子化する必要があります。PRI を共通の単位 $u$ の整数倍 $T_i = m_i u$ に取ったので、距離の量子単位を

$$ q = \frac{cu}{2} = \frac{3\times10^8 \times 5\times10^{-6}}{2} = 750\ \mathrm{m} $$

とすれば、$R_{u,i} = m_i q$ となり、余りは $q$ 単位の整数 $a_i = \lfloor R_{a,i}/q \rceil \bmod m_i$ で表せます。

中国剰余定理

$m_1, m_2, \dots, m_L$ が対ごとに互いに素であるとき、連立合同式

$$ x \equiv a_i \pmod{m_i}\quad (i = 1,\dots,L) $$

は $M = \prod_i m_i$ を法として一意な解を持ちます。解の構成は次の通りです。まず $M_i = M/m_i$ とおきます。$m_i$ は他のすべての $m_j$ と互いに素なので、$M_i$ と $m_i$ も互いに素であり、逆元 $y_i \equiv M_i^{-1} \pmod{m_i}$ が存在します。このとき

$$ \begin{equation} x = \left(\sum_{i=1}^{L} a_i M_i y_i \right) \bmod M \end{equation} $$

が解です。正しさは簡単に確認できます。$j \ne i$ ならば $M_j$ は因子 $m_i$ を含むので $M_j \equiv 0 \pmod{m_i}$、よって和のうち $i$ 番目の項だけが残り、$x \equiv a_i M_i y_i \equiv a_i \pmod{m_i}$ となります。

我々の設定では $m = (63, 64, 65)$ で、$63 = 3^2\cdot 7$、$64 = 2^6$、$65 = 5\cdot 13$ ですから対ごとに互いに素です。$M = 63\times64\times65 = 262{,}080$、拡張された無曖昧距離は

$$ R_u^{\text{CRT}} = M q = 262{,}080 \times 750\ \mathrm{m} = 196{,}560\ \mathrm{km} $$

にもなります。個々の PRF では 48 km しか測れないのに、3 つ束ねると地球から月までの半分の距離まで曖昧さがなくなる。これが CRT の威力です。

実装

import numpy as np

c = 3.0e8
u = 5e-6
m = np.array([63, 64, 65])         # PRI = m * u
PRIs = m * u
R_u = c * PRIs / 2                 # [47.25, 48.00, 48.75] km
q = c * u / 2                      # 距離量子 750 m

def crt(a, m):
    """中国剰余定理: x ≡ a_i (mod m_i) を満たす最小の非負整数 x"""
    M = int(np.prod(m)); x = 0
    for ai, mi in zip(a, m):
        Mi = M // int(mi)
        yi = pow(Mi, -1, int(mi))         # Python 3.8+ のモジュラ逆元
        x = (x + int(ai) * Mi * yi) % M
    return x

for R_true in [30.0e3, 137.4e3, 250.0e3, 402.35e3]:
    R_a = np.mod(R_true, R_u)                       # 各PRFでの見かけ距離
    a = np.round(R_a / q).astype(int) % m           # 量子化した余り
    R_hat = crt(a, m) * q                           # CRT による粗推定
    n = np.round((R_hat - R_a) / R_u).astype(int)   # 折り返し回数
    R_fine = np.mean(n * R_u + R_a)                 # 見かけ距離で精密化
    print(f"真距離 {R_true/1e3:8.2f} km | 見かけ {np.round(R_a/1e3,2)} "
          f"| 余り {a} | CRT {R_hat/1e3:8.2f} km | 精密化 {R_fine/1e3:8.3f} km")

出力は次のようになります。

真距離    30.00 km | 見かけ [30.  30.  30. ] | 余り [40 40 40] | CRT    30.00 km | 精密化   30.000 km
真距離   137.40 km | 見かけ [42.9 41.4 39.9] | 余り [57 55 53] | CRT   137.25 km | 精密化  137.400 km
真距離   250.00 km | 見かけ [13.75 10.    6.25] | 余り [18 13  8] | CRT   249.75 km | 精密化  250.000 km
真距離   402.35 km | 見かけ [24.35 18.35 12.35] | 余り [32 24 16] | CRT   402.00 km | 精密化  402.350 km

3 つの結果が読み取れます。第 1 に、真距離 30 km のように $\min_i R_{u,i}$ より近い目標では 3 つの見かけ距離が完全に一致し(余りがすべて 40)、CRT も自明に 30 km を返します。「3 つの PRF で同じ距離に見える=折り返していない」という直感的な判定規則の数学的裏付けがこれです。第 2 に、137.4 km や 402.35 km では見かけ距離がばらばら(42.9 / 41.4 / 39.9 km)ですが、CRT はきちんと真値を復元します。第 3 に、CRT が返すのは量子単位 $q = 750$ m の粗い値(137.25 km)ですが、折り返し回数 $n_i$ さえ確定すれば $R = n_i R_{u,i} + R_{a,i}$ で元の測距精度に戻せます(137.400 km)。CRT は「距離を測る」道具ではなく「何周したかを当てる」道具だと理解しておくと間違えません。

CRT は測距誤差にきわめて脆い

ここで、実務家が必ず知っておくべき弱点に触れます。CRT は代数的に厳密ですが、入力の余りが 1 でもずれると答えが遠くへ飛ぶという性質があります。$a_i$ を 1 だけ間違えると、$x$ は $M_i y_i \bmod M$ だけ移動し、これは一般に $M$ の中でランダムな位置になります。近い値に落ち着くという保証がまったくないのです。

測距誤差の標準偏差 $\sigma$ を振って成功率を調べてみましょう。あわせて、実機で広く使われる一致法(coincidence algorithm)も比較します。一致法は、1 番目の PRF の折り返し回数 $n_1$ を 0 から順に仮定して候補距離 $R_c = n_1 R_{u,1} + R_{a,1}$ を作り、他の PRF の見かけ距離との不一致量が最小になる候補を選ぶ、という素朴な探索です。

import numpy as np

def coincidence(R_a, R_u, R_max=200e3):
    """一致法:候補距離を掃引して他PRFとの残差二乗和が最小のものを選ぶ"""
    best_cost, best_R = np.inf, 0.0
    for n1 in range(int(R_max / R_u[0]) + 1):
        R_c = n1 * R_u[0] + R_a[0]
        if R_c > R_max:
            break
        cost = 0.0
        for i in range(1, len(R_u)):
            d = (R_c - R_a[i]) % R_u[i]
            d = min(d, R_u[i] - d)        # 円周上の距離
            cost += d ** 2
        if cost < best_cost:
            best_cost, best_R = cost, R_c
    return best_R

rng = np.random.default_rng(1)
print("測距誤差σ   CRT成功率   一致法成功率")
for sigma in [0, 30, 100, 200, 375, 750]:
    ok_c = ok_r = 0
    for _ in range(2000):
        R_t = rng.uniform(5e3, 180e3)
        R_a = np.mod(R_t, R_u) + rng.normal(0, sigma, 3)   # 測定値(誤差つき)
        a = np.round(R_a / q).astype(int) % m
        if abs(crt(a, m) * q - R_t) < q:
            ok_c += 1
        if abs(coincidence(np.mod(R_a, R_u), R_u) - R_t) < q:
            ok_r += 1
    print(f"{sigma:6.0f} m   {ok_c/20:8.1f}%   {ok_r/20:8.1f}%")

結果は次の通りです。

測距誤差 $\sigma$ CRT の成功率 一致法の成功率
0 m 100.0 % 100.0 %
30 m 93.5 % 100.0 %
100 m 76.9 % 100.0 %
200 m 55.9 % 99.1 %
375 m($= q/2$) 27.4 % 83.5 %
750 m($= q$) 7.0 % 48.4 %

測距誤差σに対するCRTと一致法の折り返し解消成功率を比較した棒グラフ

赤(CRT)と青(一致法)の差が、誤差が増えるほど開いていきます。CRT は $\sigma = 0$ では 100 % ですが、$\sigma$ が量子 $q = 750$ m の 13 % にあたる 100 m になるだけで 76.9 % に転落し、$\sigma = q/2 = 375$ m では 27.4 % と実用外です。一方の一致法は $\sigma = 200$ m でも 99.1 % を保ち、$\sigma = q/2$ でもまだ 83.5 % あります。代数的に厳密な手法が、数値的には最も脆いという逆説がはっきり出ています。

測距誤差がわずか 100 m(量子単位 750 m の 13 %)入るだけで、CRT の成功率は 77 % まで落ちます。誤差が $q/2$ に達すれば 27 % と、ほぼ使い物になりません。一方、一致法は $\sigma = 200$ m でも 99 % を保ちます。連続量のまま残差を評価しているので、多少の誤差では順位が入れ替わらないためです。

この結果は、教科書が CRT を紹介しながら実機では一致法(あるいはその発展形であるクラスタリング法)を使う理由をそのまま説明しています。CRT は「複数 PRF でどこまで曖昧さが解けるか」という上限を示す理論として価値があり、実装は誤差に強い探索型に譲る、という役割分担です。なお、量子 $q$ を小さくすれば CRT の分解能は上がりますが、$m_i$ が大きくなって同じ誤差でも余りの誤りが増えるため、脆さは改善しません。ロバスト CRT と呼ばれる、余りの誤差を許容する変種も研究されています。

複数 PRF が不感帯と折り返しの両方を同時に解決することが分かりました。最後に、これらを踏まえた波形設計のトレードオフを整理しておきます。

設計トレードオフとブラインドゾーンマップ

3 つの量が同時には立たない

パルスレーダーの波形設計は、次の 3 者が真正面から衝突します。

  1. 探知距離:受信エネルギー $\propto P_t \tau N$ を稼ぎたい → $\tau$ を長く、PRF を高く(=単位時間あたりのパルス数を増やす)
  2. 不感距離とエクリプシング損:$R_{\min} = c(\tau + t_r)/2$、劣化距離割合 $=(2\tau + t_r)/T$ → $\tau$ を短く、$T$ を長く(PRF を低く)
  3. 距離/速度の曖昧さ:$R_u = c/(2\,\mathrm{PRF})$ は PRF を低く、盲速 $v_b = \lambda\,\mathrm{PRF}/2$ は PRF を高くしたい

1 と 2 は $\tau$ の取り合い、2 と 3 は $T$ の取り合いです。そして 3 の内部でも、距離の曖昧さと速度の曖昧さが正反対の PRF を要求します。この最後の対立がレーダーのブラインドスピードとスタガPRFを理解するで扱った盲速の問題であり、本記事の不感距離と数学的に双対な関係にあります。距離軸で $R_u$ ごとに穴が空くのと、速度軸で $v_b$ ごとに穴が空くのは、同じ「周期的サンプリングによる折り返し」の 2 つの顔です。

用途別に見ると、次のような住み分けになります。

方式 PRF 距離 速度 主な用途
低 PRF 0.3〜3 kHz 曖昧さなし 盲速多数 地上監視・航空管制
中 PRF 3〜30 kHz 曖昧 曖昧 戦闘機の全方位捜索(複数 PRF 必須)
高 PRF 30〜300 kHz 強く曖昧 曖昧さなし 前方接近目標の探知

中 PRF は距離も速度も曖昧という一見最悪の選択ですが、複数 PRF を束ねて両方の曖昧さを解けば、クラッタ抑圧と全方位探知を両立できます。エクリプシングと盲速をどちらも複数 PRF で殺す、という設計思想です。

ブラインドゾーンマップ

設計者が実際に見るのは、PRF と距離の 2 次元平面に $\eta$ を描いたブラインドゾーンマップです。この図の上で、いくつかの PRF を選んだときに全距離が誰かにカバーされるかを確認します。

import numpy as np
import matplotlib.pyplot as plt

prf_grid = np.linspace(2.0e3, 10.0e3, 400)
R_grid = np.linspace(200.0, 60e3, 800)
Z = np.zeros((len(prf_grid), len(R_grid)))
for i, prf in enumerate(prf_grid):
    Z[i] = eclipsing_factor(R_grid, 1.0 / prf, tau, t_r)

plt.figure(figsize=(11, 5.5))
plt.pcolormesh(R_grid / 1e3, prf_grid / 1e3, Z, shading="auto", cmap="viridis")
plt.colorbar(label="エクリプシング係数 $\\eta$")
for prf in (1/315e-6, 1/320e-6, 1/325e-6):
    plt.axhline(prf / 1e3, color="white", ls="--", lw=1.0)
plt.xlabel("真距離 [km]"); plt.ylabel("PRF [kHz]")
plt.title("ブラインドゾーンマップ(暗い筋=受信できない距離。白破線=採用した3PRF)")
plt.tight_layout(); plt.show()

PRF2〜10kHzと距離0〜60kmの平面上にエクリプシング係数を描いたブラインドゾーンマップ

このマップでは、暗い($\eta$ が小さい)筋が原点から放射状に伸びる双曲線群として現れます。$n$ 番目の筋は $R = n\,c/(2\,\mathrm{PRF})$ という曲線で、PRF が高いほど筋の間隔が詰まり、遠距離では筋が密集していきます。白破線で示した 3 つの PRF は互いに近接していますが、各水平線を横切る暗い筋の位置は少しずつずれており、3 本すべてが同時に暗くなる距離が 60 km 以内に存在しないことが目で確認できます。PRF の選定とは、要するにこの図の上で暗い筋が重ならない水平線の組を選ぶ作業です。

なお、実務ではこのマップにドップラー軸(クラッタ抑圧ノッチと盲速)も重ねた 3 次元的な検討を行い、距離とドップラーの両方で穴が塞がる PRF セットを探します。ここまで来ると解析解では手に負えず、数値探索と最適化の領域になります。関連する統計的な扱いはレーダークラッタの統計分布(レイリー・ウェイブル・K分布)を理解するも参考になります。

最後に、そもそも送受の時間を分けなくてよい方式もあることに触れておきます。送信アンテナと受信アンテナを物理的に分ければ、原理的にはブランキングが不要になります。FMCW(連続波)レーダーの原理と実装を解説で扱う FMCW レーダーは、まさにこの発想で連続波を使い、不感距離をほぼゼロにしています。車載レーダーが数十センチ先のバンパーを見られるのはこのためです。ただし送受間のアイソレーションを稼ぐのが難しく、送信漏れ込みと位相雑音が新たな制約になります。「送信中は受けられない」という制約は、消えたのではなく別の形に姿を変えているだけです。

まとめ

本記事では、パルスレーダーの不感距離とエクリプシングを、時間軸の構造から検出確率まで一本の線でつないで解説しました。

  • 不感距離の起源は送受切替です。送信ピークと受信雑音床の差が約 200 dB あるため、送信中は受信機をブランキングするしかありません。送信終了後も回復時間 $t_r$ が必要です
  • 最小探知距離は $R_{\min} = c(\tau + t_r)/2$。パルス圧縮を使っても、$R_{\min}$ を決めるのは圧縮後の分解能ではなく空中を飛ぶ物理的なパルス長 $\tau$ です
  • 不感帯は周期的にコピーされます。受信可否を決めるのは真距離ではなく見かけ距離 $R_a = R \bmod R_u$ なので、$nR_u$ の近傍すべてに同じ穴が空きます。帯の幅は $c(2\tau + t_r)/2$
  • エクリプシング係数 $\eta$ は台形プロファイルになり、平均は $\bar{\eta} = 1 – (\tau + t_r)/T$、平均電力は $\overline{\eta^2} = 1 – (4\tau/3 + t_r)/T$ という簡潔な形に落ちます
  • 損失の dB 表現は、整合フィルタを固定するなら $20\log_{10}(1/\eta)$。$\eta = 0.5$ で 6.0 dB、探知距離にして 3 割減です。平均は低デューティで 0.21 dB ですが、局所的には 20 dB を超えます
  • PRF スタガが不感帯を消します。総パルス数を固定した公平な比較でも、単一 PRF の最小 $P_d$ が 0 だったのに対し、3 PRF の 1-of-3 判定では 0.71 まで持ち上がりました。ただし 2-of-3 では逆効果で、OR 判定でなければ意味がありません
  • 距離折り返しは中国剰余定理で解けます。$(63,64,65)$ の PRI 比で無曖昧距離は 48 km から 196,560 km へ拡張されます。ただし CRT は測距誤差に脆く($\sigma=100$ m で成功率 77 %)、実務では一致法(同条件で 100 %)が使われます

不感距離とエクリプシングは、レーダー方程式には現れない「時間軸の制約」です。レーダー方程式が教えるのは平均的な感度であって、特定の距離帯が構造的に消えることは教えてくれません。両方を合わせて初めて、レーダーの実際の探知性能を語れるようになります。

次のステップとして、以下の記事も参考にしてください。