都会の繁華街でラジオを聴いていると、目的の放送局にかぶさるように別の局の音声が混ざって聞こえた経験はないでしょうか。あるいは、携帯電話で通話中に近くで強力な業務無線が送信されると、突然通話が途切れることがあります。これらの現象は、受信機が処理できる信号の「大きさの範囲」に限界があることに起因しています。微弱な信号は雑音に埋もれて聞こえず、強すぎる信号は回路の非線形性によって歪みを生み出します。この「最小信号から最大信号までの処理可能な範囲」こそがダイナミックレンジです。
ダイナミックレンジの概念を定量的に理解すると、次のような実用的な問題を解決できるようになります。
- 携帯電話基地局の受信機設計: 基地局は、すぐ近くにいる端末(強信号)と数 km 先の端末(微弱信号)を同時に処理しなければなりません。十分なダイナミックレンジがなければ、近傍端末の強信号が遠方端末の微弱信号を妨害してしまいます(近遠問題)。
- 衛星通信地上局: 目的衛星の信号は極めて微弱($-130$ dBm 程度)ですが、隣接する他の衛星や地上局からの強い信号も同時にアンテナに入ってきます。受信機のダイナミックレンジが不十分だと、これらの強信号によるスプリアスが目的信号を覆い隠します。
- 電子戦・SIGINT(信号情報): 広帯域受信機で多数の信号を同時受信する際、相互変調歪みによるスプリアス信号が「偽の信号」として誤検出の原因になります。
- スペクトラムアナライザやSDR: 測定器の線形性が不十分だと、測定対象ではないスプリアス成分が画面上に現れ、正しいスペクトル解析ができなくなります。
本記事の内容
- ダイナミックレンジの直感的な理解と分類
- 非線形デバイスのテイラー展開モデル
- 利得圧縮と 1 dB 圧縮点(P1dB)の導出
- 相互変調歪み(IM3)の数学的導出
- 3 次インターセプトポイント(IP3 / IIP3 / OIP3)の定義と導出
- スプリアスフリーダイナミックレンジ(SFDR)の定義と計算
- カスケード接続における IP3 の合成計算
- ブロッキングと感度抑圧のメカニズム
- Python による非線形特性・IP3・カスケード IP3 の可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
ダイナミックレンジとは
日常のアナロジーで理解する
ダイナミックレンジという言葉は、音響・映像・通信などさまざまな分野で使われますが、本質的なイメージは共通しています。
コンサートホールで演奏を聴く場面を想像してください。ピアニッシモ(極めて小さな音)は客席のざわつきや空調のノイズに埋もれてしまう可能性があります。一方、フォルティッシモ(極めて大きな音)はホールの壁の反射や自分の耳の限界によって歪んで聞こえることがあります。このとき「聴き取れる最も小さな音」から「歪まずに聴ける最も大きな音」までの範囲が、いわば人間の聴覚のダイナミックレンジです。
受信機でも全く同じことが起きます。信号が小さすぎると受信機内部の雑音に埋もれて検出できません。信号が大きすぎると増幅器やミキサーなどのアクティブデバイスが飽和し、信号波形が歪みます。この歪みは、元の信号には存在しなかった新しい周波数成分(スプリアス成分)を生み出し、隣接チャネルの信号に干渉します。
定量的な定義
ダイナミックレンジ(DR: Dynamic Range)は、受信機が正しく動作できる入力信号電力の範囲として定義されます。
$$ \text{DR} = P_{\text{max}} – P_{\text{min}} \quad [\text{dB}] $$
ここで $P_{\text{max}}$ は許容される最大入力信号電力、$P_{\text{min}}$ は最小検出可能信号電力(MDS: Minimum Detectable Signal)です。dB で表記しているため、差がそのままダイナミックレンジの値になります。
$P_{\text{min}}$ は雑音指数(NF)と帯域幅で決まり、前提記事の雑音指数の理論で詳しく扱いました。一方、$P_{\text{max}}$ は受信機の非線形特性で決まります。この「上限」を規定するのが、これから学ぶ 1 dB 圧縮点と 3 次インターセプトポイントです。
ダイナミックレンジの分類
受信機のダイナミックレンジにはいくつかの定義があり、用途によって使い分けられます。
| 名称 | 下限 | 上限 | 用途 |
|---|---|---|---|
| ハードウェアDR | MDS(雑音床) | 1 dB 圧縮点(P1dB) | 単一信号の処理範囲 |
| スプリアスフリーDR(SFDR) | MDS(雑音床) | IM3 が雑音床に等しくなる入力レベル | 複数信号環境での実用範囲 |
| ブロッキングDR | MDS | 感度抑圧が 1 dB になる入力レベル | 妨害波耐性の評価 |
ハードウェアダイナミックレンジは「1つの信号だけがあるとき、どこまで大きくできるか」を表します。しかし現実の電波環境では、目的信号以外にも多数の信号が同時に入力されます。そのため、複数信号が存在するときの実用的な範囲を示す SFDR が、受信機設計では最も重視される指標です。
ダイナミックレンジの上限を理解するには、まず増幅器の非線形性をモデル化する必要があります。次のセクションでは、非線形デバイスの入出力関係をテイラー展開で記述し、そこからどのような歪み成分が生まれるかを数学的に明らかにしていきます。
非線形デバイスのテイラー展開モデル
線形と非線形の境界
理想的な増幅器は、入力信号を定数倍するだけの線形デバイスです。入力 $x(t)$ に対して出力 $y(t) = G \cdot x(t)$ となり、$G$ が利得です。この場合、入力の波形がそのまま振幅だけ変化して出力されるので、新しい周波数成分は一切生じません。
しかし現実の増幅器(トランジスタ、ミキサー、LNA など)は、入力信号が大きくなると出力が入力に比例しなくなります。これは、トランジスタの動作点が飽和領域に近づくと、電流−電圧特性の曲がりが無視できなくなるためです。この非線形性を体系的に扱うために、テイラー展開を用います。
テイラー展開による記述
非線形デバイスの入出力関係を、入力 $x(t)$ のまわりでテイラー展開すると次のように書けます。
$$ y(t) = a_1 x(t) + a_2 x^2(t) + a_3 x^3(t) + a_4 x^4(t) + \cdots $$
ここで $a_1$ は小信号利得(線形利得)、$a_2, a_3, \ldots$ は高次の非線形係数です。直流成分($a_0$)はバイアス電流に相当するため、信号成分の議論では省略しています。
この展開が意味することを直感的に理解しておきましょう。
- $a_1 x(t)$ の項: 入力をそのまま $a_1$ 倍する線形応答です。望まれる増幅動作そのものです。
- $a_2 x^2(t)$ の項: 入力の 2 乗に比例する成分です。後で見るように、この項は 2 次高調波と直流オフセットを生みます。
- $a_3 x^3(t)$ の項: 入力の 3 乗に比例する成分です。この項が 3 次相互変調歪み(IM3)の元凶であり、受信機設計上最も厄介な非線形性です。
なぜ 3 次の項が特に問題なのでしょうか。2 次の歪みは元の周波数の 2 倍の周波数(2 次高調波)を作りますが、これはフィルタで容易に除去できます。一方、3 次の歪みは元の周波数の近傍に新しい成分を生み出すため、フィルタでは分離困難です。この点を次のセクション以降で数学的に示していきます。
単一トーン入力の解析
まず基本的な場合として、入力が単一の正弦波(シングルトーン)の場合を考えます。
$$ x(t) = A \cos \omega t $$
これをテイラー展開の各項に代入します。1 次の項はそのままです。
$$ a_1 x(t) = a_1 A \cos \omega t $$
2 次の項は、$\cos^2$ の公式を使います。$\cos^2 \omega t = \frac{1}{2}(1 + \cos 2\omega t)$ より、
$$ a_2 x^2(t) = a_2 A^2 \cos^2 \omega t = \frac{a_2 A^2}{2}(1 + \cos 2\omega t) $$
この結果から、直流成分 $\frac{a_2 A^2}{2}$ と 2 次高調波成分 $\frac{a_2 A^2}{2} \cos 2\omega t$ が現れることがわかります。
3 次の項には、$\cos^3 \omega t = \frac{1}{4}(3\cos \omega t + \cos 3\omega t)$ の関係を用います。
$$ a_3 x^3(t) = a_3 A^3 \cos^3 \omega t = \frac{a_3 A^3}{4}(3\cos \omega t + \cos 3\omega t) $$
ここで注目すべきは、$\frac{3 a_3 A^3}{4} \cos \omega t$ という基本周波数と同じ周波数の成分が現れることです。この成分は、線形利得 $a_1 A \cos \omega t$ に重畳されます。つまり、入力が大きくなると実効的な利得が変化するということです。
出力の基本波成分をまとめると次のようになります。
$$ y_{\text{fund}}(t) = \left(a_1 A + \frac{3 a_3 A^3}{4}\right) \cos \omega t $$
通常の増幅器では $a_3 < 0$(飽和特性)であるため、$A$ が大きくなるにつれて括弧内の値は $a_1 A$ よりも小さくなります。これが利得圧縮の数学的な起源です。
ここまでで、非線形性が利得の変化と新たな周波数成分を生み出すことを確認しました。次に、この利得圧縮を定量化する指標として 1 dB 圧縮点を定義します。
1 dB 圧縮点(P1dB)の定義と導出
利得圧縮の直感的理解
増幅器に入力する信号を徐々に大きくしていくと、最初のうちは出力も比例して増加します。横軸に入力電力、縦軸に出力電力を dB でプロットすると、理想的には傾き 1(1 dB 入力が増えれば 1 dB 出力も増える)の直線に乗ります。
しかし、ある入力レベルを超えると出力の増加が鈍り始めます。これは、トランジスタが飽和領域に入り、供給電源電圧の範囲を超えた振幅を出力できなくなるためです。水道の蛇口を全開にしても、水圧の限界以上の水量は出せないのと同じです。
この「出力が理想直線から下にずれ始める」現象を定量的に捉えるのが 1 dB 圧縮点です。
数学的導出
前セクションで求めた基本波成分の振幅を改めて書きます。
$$ A_{\text{out, fund}} = a_1 A + \frac{3 a_3 A^3}{4} $$
線形領域(理想的な場合)の出力振幅は $a_1 A$ です。したがって、利得圧縮量 $\Delta G$ は次のように定義できます。
$$ \Delta G = \frac{a_1 A + \frac{3 a_3 A^3}{4}}{a_1 A} = 1 + \frac{3 a_3}{4 a_1} A^2 $$
$a_3 < 0$ のとき、$A$ が増加すると $\Delta G < 1$ となり、利得が減少(圧縮)します。
1 dB 圧縮点は、この利得圧縮量がちょうど 1 dB(真数で $10^{-0.1} \approx 0.794$)になる入力振幅として定義されます。
$$ 1 + \frac{3 a_3}{4 a_1} A_{1\text{dB}}^2 = 10^{-0.1} $$
両辺を整理して $A_{1\text{dB}}^2$ について解きます。右辺の $10^{-0.1}$ を移項すると、
$$ \frac{3 a_3}{4 a_1} A_{1\text{dB}}^2 = 10^{-0.1} – 1 \approx -0.109 $$
$a_3 < 0$ より $\frac{3 a_3}{4 a_1} < 0$ なので、$A_{1\text{dB}}^2 > 0$ となり解が存在します。
$$ A_{1\text{dB}}^2 = \frac{4 a_1}{3 |a_3|} \times 0.109 $$
したがって、1 dB 圧縮点の入力振幅は次のようになります。
$$ \boxed{A_{1\text{dB}} = \sqrt{0.145 \frac{a_1}{|a_3|}}} $$
ここで $0.145 = \frac{4 \times 0.109}{3}$ です。この結果は重要な意味を持っています。1 dB 圧縮点は、線形利得 $a_1$ と 3 次非線形係数 $a_3$ の比で決まるという点です。線形利得が大きくても、3 次の非線形性が強ければ圧縮点は低くなります。
入力基準と出力基準
1 dB 圧縮点は入力電力で表す場合(入力 P1dB: $P_{1\text{dB,in}}$)と出力電力で表す場合(出力 P1dB: $P_{1\text{dB,out}}$)があります。両者の関係は次のとおりです。
$$ P_{1\text{dB,out}} = P_{1\text{dB,in}} + G – 1 \quad [\text{dB}] $$
ここで $G$ は小信号利得(dB)です。$-1$ が付くのは、1 dB 圧縮している分だけ出力が理想値より 1 dB 低くなるためです。
データシートでは、増幅器は出力 P1dB で、ミキサーは入力 P1dB で規定されることが一般的です。受信機のシステム設計では、各段の入力 P1dB を揃えて議論することが多いので、変換関係を把握しておくことが大切です。
実用上の意味
1 dB 圧縮点は、増幅器が「まだ概ね線形に動作している」範囲の上限を示す目安です。この点を超えても増幅器は動作しますが、出力波形に歪みが含まれるようになります。
受信機設計では、システム全体の入力 P1dB が、想定される最大入力信号レベルよりも十分に高くなるように設計します。一般に、入力 P1dB は最大入力信号よりも $3 \sim 5$ dB 以上のマージンを持たせます。
1 dB 圧縮点は単一信号に対する指標ですが、現実の受信機には複数の信号が同時に入力されます。複数の信号が入力されたとき、非線形性はどのような新しい問題を引き起こすのでしょうか。次のセクションでは、2 信号入力時に発生する相互変調歪みを解析します。
3 次相互変調歪み(IM3)の数学的導出
2 トーン入力の設定
相互変調歪みは、2 つ以上の信号が同時に非線形デバイスに入力されるときに発生する現象です。身近な例えで言えば、2 人の歌手が同時に歌うと、単に 2 つの声が混ざるだけでなく、音響空間の非線形性によって「うなり」のような第 3 の音が聞こえることがあります。これと同じことが、受信機内の増幅器やミキサーで起きています。
解析のために、周波数の近い 2 つの正弦波(ツートーン)を入力します。
$$ x(t) = A(\cos \omega_1 t + \cos \omega_2 t) $$
ここで $\omega_1$ と $\omega_2$ は互いに近い周波数($\omega_1 \approx \omega_2$)で、振幅は簡単のため同じ $A$ としています。
2 次の項の展開
まず $a_2 x^2(t)$ の項を計算します。
$$ x^2(t) = A^2(\cos \omega_1 t + \cos \omega_2 t)^2 $$
展開すると、
$$ x^2(t) = A^2(\cos^2 \omega_1 t + 2\cos \omega_1 t \cos \omega_2 t + \cos^2 \omega_2 t) $$
各項に三角関数の積和公式を適用します。$\cos^2 \theta = \frac{1}{2}(1 + \cos 2\theta)$ と $\cos \alpha \cos \beta = \frac{1}{2}[\cos(\alpha – \beta) + \cos(\alpha + \beta)]$ を使うと、
$$ x^2(t) = A^2\left[\frac{1}{2}(1 + \cos 2\omega_1 t) + \cos(\omega_1 – \omega_2)t + \cos(\omega_1 + \omega_2)t + \frac{1}{2}(1 + \cos 2\omega_2 t)\right] $$
整理すると、2 次の非線形性は以下の周波数成分を生み出します。
| 成分 | 周波数 | 種類 |
|---|---|---|
| 直流 | 0 | DC オフセット |
| 2 次高調波 | $2\omega_1$, $2\omega_2$ | 高調波歪み |
| 和周波数 | $\omega_1 + \omega_2$ | 混合積 |
| 差周波数 | $\omega_1 – \omega_2$ | 混合積 |
差周波数 $\omega_1 – \omega_2$ は低周波に現れ、和周波数 $\omega_1 + \omega_2$ と 2 次高調波 $2\omega_1, 2\omega_2$ は元の信号の 2 倍近くに現れます。いずれも元の信号帯域から十分に離れているため、帯域通過フィルタで比較的容易に除去できます。
3 次の項の展開 — IM3 の導出
問題の核心は $a_3 x^3(t)$ の項です。
$$ x^3(t) = A^3(\cos \omega_1 t + \cos \omega_2 t)^3 $$
3 乗の展開は少し手間がかかりますが、二項定理を適用すると 4 つの項に分解できます。
$$ (\cos \omega_1 t + \cos \omega_2 t)^3 = \cos^3 \omega_1 t + 3\cos^2 \omega_1 t \cos \omega_2 t + 3\cos \omega_1 t \cos^2 \omega_2 t + \cos^3 \omega_2 t $$
各項を順に計算していきます。
第 1 項 $\cos^3 \omega_1 t$: 先ほどの結果と同じく、
$$ \cos^3 \omega_1 t = \frac{1}{4}(3\cos \omega_1 t + \cos 3\omega_1 t) $$
第 4 項 $\cos^3 \omega_2 t$ も同様です。
$$ \cos^3 \omega_2 t = \frac{1}{4}(3\cos \omega_2 t + \cos 3\omega_2 t) $$
第 2 項 $3\cos^2 \omega_1 t \cos \omega_2 t$: $\cos^2 \omega_1 t = \frac{1}{2}(1 + \cos 2\omega_1 t)$ を代入します。
$$ 3\cos^2 \omega_1 t \cos \omega_2 t = \frac{3}{2}\cos \omega_2 t + \frac{3}{2}\cos 2\omega_1 t \cos \omega_2 t $$
積和公式 $\cos \alpha \cos \beta = \frac{1}{2}[\cos(\alpha – \beta) + \cos(\alpha + \beta)]$ を第 2 項に適用すると、
$$ \frac{3}{2}\cos 2\omega_1 t \cos \omega_2 t = \frac{3}{4}[\cos(2\omega_1 – \omega_2)t + \cos(2\omega_1 + \omega_2)t] $$
第 3 項 $3\cos \omega_1 t \cos^2 \omega_2 t$ も同様に展開でき、
$$ 3\cos \omega_1 t \cos^2 \omega_2 t = \frac{3}{2}\cos \omega_1 t + \frac{3}{4}[\cos(2\omega_2 – \omega_1)t + \cos(2\omega_2 + \omega_1)t] $$
展開結果のまとめ
全ての項を集めて、出力の 3 次成分 $a_3 A^3 \times (\text{各項})$ を整理すると、次の周波数成分が得られます。
| 成分 | 周波数 | 係数($a_3 A^3$ に対する比) |
|---|---|---|
| 基本波 | $\omega_1$, $\omega_2$ | $\frac{9}{4}$ |
| 3 次高調波 | $3\omega_1$, $3\omega_2$ | $\frac{1}{4}$ |
| IM3(下側) | $2\omega_1 – \omega_2$ | $\frac{3}{4}$ |
| IM3(上側) | $2\omega_2 – \omega_1$ | $\frac{3}{4}$ |
| 混合積 | $2\omega_1 + \omega_2$, $2\omega_2 + \omega_1$ | $\frac{3}{4}$ |
ここで最も重要なのが、$2\omega_1 – \omega_2$ と $2\omega_2 – \omega_1$ の成分です。これが3 次相互変調歪み(Third-Order Intermodulation Distortion: IM3) です。
IM3 がなぜ厄介なのか
$\omega_1$ と $\omega_2$ が近い周波数であるとき、IM3 成分の周波数がどこに現れるかを考えてみましょう。$\omega_1$ と $\omega_2$ の間隔を $\Delta \omega = \omega_2 – \omega_1$ とすると、
$$ 2\omega_1 – \omega_2 = \omega_1 – \Delta\omega $$
$$ 2\omega_2 – \omega_1 = \omega_2 + \Delta\omega $$
つまり、IM3 成分は基本波 $\omega_1$, $\omega_2$ のすぐ隣に、基本波と同じ間隔 $\Delta\omega$ で対称的に現れます。帯域通過フィルタで基本波を通過させると、IM3 成分も一緒に通過してしまうのです。これが、2 次歪みと決定的に異なる点であり、3 次の非線形性が受信機設計において特に問題視される理由です。
IM3 成分の出力振幅を明示的に書くと、次のようになります。
$$ \boxed{A_{\text{IM3}} = \frac{3}{4} |a_3| A^3} $$
一方、基本波の出力振幅は(3 次の項による基本波への寄与も含めて)次のとおりです。
$$ A_{\text{fund}} = a_1 A + \frac{9}{4} a_3 A^3 \approx a_1 A \quad (\text{小信号近似}) $$
入力振幅 $A$ を dBm(対数スケール)で表すと、基本波出力は入力に対して傾き 1 で増加し、IM3 出力は傾き 3 で増加します。これは、IM3 が $A^3$ に比例するため、入力が 1 dB 増えると IM3 は 3 dB 増えるからです。
この「傾き 1 と傾き 3」の直線が交わる点が、次に学ぶ 3 次インターセプトポイントです。
3 次インターセプトポイント(IP3)の定義と導出
IP3 の直感的理解
前セクションで見たように、入力レベルを上げていくと基本波の出力は 1 dB/dB の割合で増加し、IM3 の出力は 3 dB/dB の割合で増加します。両者を対数グラフ上にプロットすると、2 本の直線が得られ、やがて交差します。
現実にはこの交点に到達する前に増幅器が飽和するため、この交点は実測ではなく外挿によって定義される仮想的な点です。しかし、この仮想的な交点の電力レベルが高いほど「非線形性が弱い」ことを意味するため、受信機の線形性を表す最も重要な単一の指標として広く使われています。
数学的導出
IP3 は、基本波出力と IM3 出力が等しくなる入力レベルとして定義されます。小信号近似のもとで、基本波出力振幅 $\approx a_1 A$ と IM3 出力振幅 $= \frac{3}{4}|a_3|A^3$ を等しいとおきます。
$$ a_1 A_{\text{IP3}} = \frac{3}{4}|a_3| A_{\text{IP3}}^3 $$
両辺を $A_{\text{IP3}}$ で割ると($A_{\text{IP3}} \neq 0$)、
$$ a_1 = \frac{3}{4}|a_3| A_{\text{IP3}}^2 $$
$A_{\text{IP3}}^2$ について解くと、
$$ A_{\text{IP3}}^2 = \frac{4 a_1}{3 |a_3|} $$
したがって、IP3 の入力振幅は次のとおりです。
$$ \boxed{A_{\text{IP3}} = \sqrt{\frac{4 a_1}{3 |a_3|}}} $$
P1dB と IP3 の関係
1 dB 圧縮点で得た結果と比較してみましょう。
$$ A_{1\text{dB}}^2 = 0.145 \times \frac{a_1}{|a_3|}, \quad A_{\text{IP3}}^2 = \frac{4}{3} \times \frac{a_1}{|a_3|} $$
両者の比を取ると、
$$ \frac{A_{\text{IP3}}^2}{A_{1\text{dB}}^2} = \frac{4/3}{0.145} \approx 9.19 $$
入力電力は振幅の 2 乗に比例するので、dB で表すと、
$$ P_{\text{IIP3}} – P_{1\text{dB}} = 10 \log_{10}(9.19) \approx 9.6 \; \text{dB} $$
$$ \boxed{P_{\text{IIP3}} \approx P_{1\text{dB}} + 9.6 \; \text{dB}} $$
この $9.6$ dB という関係は、3 次特性のみを考慮したテイラー展開モデルから得られる理論値です。実際のデバイスでは高次の項や他の非線形メカニズムも存在するため、$P_{\text{IIP3}} \approx P_{1\text{dB}} + 10 \sim 12$ dB 程度になることが経験的に知られています。データシートで P1dB のみが記載されている場合、この概算関係から IP3 を推定できます。
IIP3 と OIP3
IP3 には入力基準と出力基準の 2 つの表現があります。
- IIP3(Input IP3): 入力側で見た IP3。IM3 と基本波の外挿直線が交差する点の入力電力
- OIP3(Output IP3): 出力側で見た IP3。交差点の出力電力
両者の関係は単純に利得 $G$(dB)で結ばれます。
$$ \text{OIP3} = \text{IIP3} + G \quad [\text{dBm}] $$
受信機のシステム設計では IIP3 を使うことが一般的です。なぜなら、カスケード接続の計算で入力基準に統一した方が扱いやすいからです。一方、パワーアンプの仕様では OIP3 が使われることが多いです。
IM3 の実測からの IP3 算出
実際の測定では、特定の入力レベル $P_{\text{in}}$ における基本波出力 $P_{\text{fund}}$ と IM3 出力 $P_{\text{IM3}}$ を測定し、そこから IP3 を逆算します。
基本波出力と IM3 出力の差を $\Delta$ とします。
$$ \Delta = P_{\text{fund}} – P_{\text{IM3}} \quad [\text{dB}] $$
対数スケールで基本波は傾き 1、IM3 は傾き 3 で増加するため、入力が 1 dB 増えるごとに $\Delta$ は 2 dB 縮まります。IP3 は $\Delta = 0$ の点なので、現在の入力レベルから $\Delta/2$ だけ外挿すればよいです。
$$ \boxed{\text{IIP3} = P_{\text{in}} + \frac{\Delta}{2} = P_{\text{in}} + \frac{P_{\text{fund}} – P_{\text{IM3}}}{2}} $$
出力基準では次のようになります。
$$ \text{OIP3} = P_{\text{fund}} + \frac{P_{\text{fund}} – P_{\text{IM3}}}{2} = \frac{3 P_{\text{fund}} – P_{\text{IM3}}}{2} $$
この関係式は、スペクトラムアナライザでツートーン測定を行い IP3 を求める際の基本公式です。
ここまでで、非線形性の指標として P1dB と IP3 を定義しました。次に、これらの指標と雑音指数を組み合わせて、受信機の実用的なダイナミックレンジ指標である SFDR を定義します。
スプリアスフリーダイナミックレンジ(SFDR)の定義と計算
SFDR の直感的理解
SFDR(Spurious-Free Dynamic Range)は、「IM3 成分が雑音床以下に収まっている範囲の入力信号の幅」です。言い換えれば、相互変調歪みに邪魔されることなく信号を受信できる範囲です。
日常の例えに戻ると、コンサートホールで 2 人のヴァイオリニストがわずかに異なるピッチで演奏しているとき、非線形歪み(ホールの音響的な歪み)が作り出すうなりの音量が、空調のノイズ(雑音床)よりも小さければ聴衆は気づきません。このとき、聴衆が快適に聴ける音量の範囲が SFDR に相当します。
数学的定義
SFDR は、IM3 の出力電力が雑音床 $N_{\text{floor}}$ にちょうど等しくなる入力電力 $P_{\text{in,max}}$ と、最小検出可能信号(MDS)$P_{\text{in,min}}$ の差として定義されます。
$$ \text{SFDR} = P_{\text{in,max}} – P_{\text{in,min}} \quad [\text{dB}] $$
SFDR の導出
対数スケール(dBm)で記述します。入力電力を $P_{\text{in}}$(dBm)とすると、出力の基本波は
$$ P_{\text{fund,out}} = P_{\text{in}} + G \quad [\text{dBm}] $$
IM3 の出力は、傾き 3 の直線で増加し、IP3 を通るので、
$$ P_{\text{IM3,out}} = 3P_{\text{in}} + 3G – 2 \cdot \text{OIP3} \quad [\text{dBm}] $$
この式は、OIP3 の定義(基本波と IM3 の外挿直線が交わる点)から導かれます。IP3 では $P_{\text{fund,out}} = P_{\text{IM3,out}}$ なので、$P_{\text{in}} + G = 3P_{\text{in}} + 3G – 2 \cdot \text{OIP3}$ という関係から上式が得られます。
SFDR の上限 $P_{\text{in,max}}$ は、$P_{\text{IM3,out}} = N_{\text{floor}}$(出力雑音床)のときです。
$$ 3P_{\text{in,max}} + 3G – 2 \cdot \text{OIP3} = N_{\text{floor}} $$
$P_{\text{in,max}}$ について解くと、
$$ P_{\text{in,max}} = \frac{2 \cdot \text{OIP3} + N_{\text{floor}} – 3G}{3} $$
ここで $\text{OIP3} = \text{IIP3} + G$ と $N_{\text{floor}} = N_{\text{in}} + G$($N_{\text{in}}$ は入力換算雑音床)を代入すると、
$$ P_{\text{in,max}} = \frac{2(\text{IIP3} + G) + N_{\text{in}} + G – 3G}{3} = \frac{2 \cdot \text{IIP3} + N_{\text{in}}}{3} $$
SFDR の下限は MDS であり、$P_{\text{in,min}} = N_{\text{in}}$(入力換算雑音床)です。
したがって、SFDR は次のように計算されます。
$$ \text{SFDR} = P_{\text{in,max}} – P_{\text{in,min}} = \frac{2 \cdot \text{IIP3} + N_{\text{in}}}{3} – N_{\text{in}} $$
$$ \boxed{\text{SFDR} = \frac{2}{3}(\text{IIP3} – N_{\text{in}}) \quad [\text{dB}]} $$
入力換算雑音床の計算
入力換算雑音床 $N_{\text{in}}$ は、受信機の帯域幅 $B$ と雑音指数 $F$ から次のように計算されます。
$$ N_{\text{in}} = kTB \cdot F \quad [\text{W}] $$
dBm 表記では、
$$ N_{\text{in}} = -174 + 10\log_{10}B + \text{NF} \quad [\text{dBm}] $$
ここで $-174$ dBm/Hz は室温(290 K)における熱雑音の電力スペクトル密度です。$B$ は Hz 単位、NF は dB 単位です。
数値例
具体的な数値で SFDR を計算してみましょう。以下のスペックの受信機を考えます。
- IIP3 = $-10$ dBm
- NF = 3 dB
- 帯域幅 $B$ = 200 kHz
まず入力換算雑音床を求めます。
$$ N_{\text{in}} = -174 + 10\log_{10}(200 \times 10^3) + 3 = -174 + 53 + 3 = -118 \; \text{dBm} $$
次に SFDR を計算します。
$$ \text{SFDR} = \frac{2}{3}(-10 – (-118)) = \frac{2}{3} \times 108 = 72 \; \text{dB} $$
この受信機は、MDS($-118$ dBm)から $-118 + 72 = -46$ dBm の範囲で、IM3 に邪魔されることなく信号を受信できます。
SFDR の式から重要な設計指針が見えてきます。SFDR を大きくするには、IIP3 を上げるか(非線形性を改善)、雑音床を下げる(NF を下げる or 帯域幅を狭くする)必要があります。ただし、IIP3 は $\frac{2}{3}$ の係数で効くのに対し、雑音床の改善は $\frac{1}{3}$ の係数しか効きません。つまり、SFDR 改善には IIP3 の向上がより効果的です。
実際の受信機は複数の段(LNA、ミキサー、IF アンプなど)で構成されています。システム全体の IP3 はどのように計算するのでしょうか。次のセクションでは、カスケード接続における IP3 の合成式を導きます。
カスケード接続における IP3 の計算
なぜカスケード計算が必要なのか
受信機は、アンテナの後に LNA(低雑音増幅器)、帯域通過フィルタ、ミキサー、IF アンプ、といった複数の段を縦続接続(カスケード接続)して構成されます。各段にはそれぞれ固有の IIP3 があります。システム全体の IIP3 は、最も弱い段に支配されますが、その「弱さ」は利得の配分にも依存するため、単純な最小値ではありません。
雑音指数のフリスの公式と同様に、IP3 にもカスケードの合成公式が存在します。
カスケード IP3 の導出
2 段のカスケード接続を考えます。第 1 段の電力利得を $G_1$(真数)、IIP3 を $P_{\text{IIP3,1}}$(mW)、第 2 段の電力利得を $G_2$、IIP3 を $P_{\text{IIP3,2}}$(mW)とします。
各段で IM3 電力が生成されます。入力電力 $P_{\text{in}}$ に対して、第 1 段が生み出す IM3 電力は、IP3 の定義から導くことができます。
IM3 の出力電力は入力電力の 3 乗に比例し、IP3 の点で基本波と等しくなるという関係を使います。第 1 段の出力における IM3 電力は次のように表されます。
$$ P_{\text{IM3,1}} = \frac{(G_1 P_{\text{in}})^3}{P_{\text{IIP3,1}}^2 \cdot G_1^2} = \frac{G_1 P_{\text{in}}^3}{P_{\text{IIP3,1}}^2} $$
この IM3 成分は第 2 段で利得 $G_2$ 倍されて出力に現れます。
一方、第 2 段自身も非線形性により IM3 を生成します。第 2 段の入力電力は $G_1 P_{\text{in}}$ なので、
$$ P_{\text{IM3,2}} = \frac{G_2 (G_1 P_{\text{in}})^3}{P_{\text{IIP3,2}}^2} = \frac{G_2 G_1^3 P_{\text{in}}^3}{P_{\text{IIP3,2}}^2} $$
IM3 は互いに非相関であるため、電力加算できます。システム全体の出力 IM3 電力は、
$$ P_{\text{IM3,total}} = G_2 P_{\text{IM3,1}} + P_{\text{IM3,2}} = G_1 G_2 \frac{P_{\text{in}}^3}{P_{\text{IIP3,1}}^2} + G_2 G_1^3 \frac{P_{\text{in}}^3}{P_{\text{IIP3,2}}^2} $$
システム全体の IIP3 を $P_{\text{IIP3,sys}}$、全体利得を $G_{\text{total}} = G_1 G_2$ として同様の形で書くと、
$$ P_{\text{IM3,total}} = G_{\text{total}} \frac{P_{\text{in}}^3}{P_{\text{IIP3,sys}}^2} $$
両式を等しいとおき、$P_{\text{in}}^3$ を消去して整理します。
$$ \frac{G_1 G_2}{P_{\text{IIP3,sys}}^2} = \frac{G_1 G_2}{P_{\text{IIP3,1}}^2} + \frac{G_1^3 G_2}{P_{\text{IIP3,2}}^2} $$
両辺を $G_1 G_2$ で割ると、
$$ \frac{1}{P_{\text{IIP3,sys}}^2} = \frac{1}{P_{\text{IIP3,1}}^2} + \frac{G_1^2}{P_{\text{IIP3,2}}^2} $$
$n$ 段に一般化すると、次のカスケード IP3 の公式が得られます。
$$ \boxed{\frac{1}{P_{\text{IIP3,sys}}^2} = \frac{1}{P_{\text{IIP3,1}}^2} + \frac{G_1^2}{P_{\text{IIP3,2}}^2} + \frac{G_1^2 G_2^2}{P_{\text{IIP3,3}}^2} + \cdots} $$
設計への示唆
この公式から、受信機設計上の重要な知見が 3 つ得られます。
(1)後段の IP3 ほど利得の蓄積を受ける: 第 $k$ 段の寄与には、それ以前の全段の利得の積 $G_1^2 G_2^2 \cdots G_{k-1}^2$ が掛かります。つまり、前段の利得が高いほど、後段の IP3 がシステム全体に与える影響が大きくなります。
(2)NF と IP3 のトレードオフ: フリスの公式では第 1 段の NF が全体を支配するため、第 1 段には高利得の LNA を置いてシステム NF を下げたいという要求があります。しかし、第 1 段の利得を上げると後段の IM3 寄与が増大し、システム IIP3 が低下します。これが受信機設計における基本的なトレードオフです。
(3)ミキサーが IP3 のボトルネックになりやすい: ミキサーは変換利得が低い(しばしばマイナス = 変換損失)のに対し、LNA の後に置かれるため大きな信号レベルが入力されます。さらにミキサー自体の非線形性も強いため、システム全体の IP3 を律速する段になることが多いです。
近似式
実用的には、各段の IIP3 が dBm で表されている場合、逆数の和を真数で計算するのが煩雑です。多くの場合、システム IP3 は最も支配的な 1 段(通常はミキサーまたは最終段の増幅器)で近似できます。
$$ \text{IIP3}_{\text{sys}} \approx \text{IIP3}_k – \sum_{i=1}^{k-1} G_i \quad [\text{dBm}] $$
ここで $k$ は最も支配的な段、$\sum G_i$ はそれ以前の段の利得の総和(dB)です。この近似は、支配段以外の寄与が十分に小さいときに有効です。
カスケード計算の理論がわかったところで、受信機の実際の設計でダイナミックレンジがどのように問題になるかを見ていきましょう。次のセクションでは、ブロッキングと感度抑圧という現象を取り上げます。
ブロッキングと感度抑圧
ブロッキングとは
ブロッキングとは、目的信号の帯域外に存在する非常に強い妨害信号によって、受信機の利得が低下し、目的の微弱信号を受信できなくなる現象です。
日常のアナロジーで考えてみましょう。静かな部屋で友人の小声が聞こえていたのに、突然隣の部屋で大音量の音楽が鳴り始めると、友人の声が聞こえなくなります。壁(フィルタ)で多少は減衰しますが、音楽(妨害波)が圧倒的に強ければ、耳(受信機)自体が「圧倒」されてしまうのです。
利得圧縮によるメカニズム
ブロッキングの主要なメカニズムは、強い妨害信号による利得圧縮です。非線形デバイスのテイラー展開モデルに戻って考えます。
入力が目的信号 $s(t) = A_s \cos \omega_s t$(微弱)と妨害波 $b(t) = A_b \cos \omega_b t$(大振幅)の和であるとき、3 次の非線形性による基本波($\omega_s$)成分の実効利得は次のようになります。
$$ G_{\text{eff}} = a_1 + \frac{3 a_3}{4}(A_s^2 + 2A_b^2) + \cdots $$
ここで重要なのは $2A_b^2$ の項です。$A_b \gg A_s$ のとき、
$$ G_{\text{eff}} \approx a_1 + \frac{3 a_3}{2} A_b^2 $$
$a_3 < 0$ なので、妨害波の振幅 $A_b$ が大きくなるにつれて、目的信号に対する実効利得が低下します。この利得低下が 1 dB に達する妨害波レベルをブロッキングレベル(または 1 dB 感度抑圧点)と呼びます。
1 dB 感度抑圧点の導出
利得の低下が 1 dB になる条件を求めます。
$$ \frac{G_{\text{eff}}}{a_1} = 1 + \frac{3 a_3}{2 a_1} A_{b,\text{block}}^2 = 10^{-0.1} \approx 0.891 $$
この式は 1 dB 圧縮点の式と同じ構造ですが、係数が異なります。1 dB 圧縮点では $\frac{3 a_3}{4 a_1} A^2$ でしたが、ここでは $\frac{3 a_3}{2 a_1} A_b^2$ です(係数が 2 倍)。
$$ A_{b,\text{block}}^2 = \frac{0.109 \times 2 a_1}{3 |a_3|} = \frac{A_{1\text{dB}}^2}{2} \times \frac{1}{0.145} \times 0.109 \times 2 $$
整理すると、
$$ A_{b,\text{block}} = \frac{A_{1\text{dB}}}{\sqrt{2}} $$
dB で表すと、1 dB 感度抑圧点は入力 P1dB より約 3 dB 低い値になります。
$$ P_{\text{block}} \approx P_{1\text{dB}} – 3 \; \text{dB} $$
これは直感的にも理解できます。単一信号で利得が 1 dB 圧縮されるレベルよりも低い妨害波レベルで、目的信号の利得が 1 dB 低下してしまうのは、2 信号の場合には妨害波が目的信号の利得圧縮にも寄与するためです(交差変調効果)。
受信機設計での対策
ブロッキングへの対策として、受信機設計では以下の手法が用いられます。
(1)高選択度のプリセレクタ: アンテナと LNA の間に高い帯域外減衰を持つ帯域通過フィルタ(プリセレクタ)を配置し、帯域外の強い妨害波を事前に減衰させます。
(2)高 IP3 のフロントエンド: LNA とミキサーの IP3 を十分に高く設計し、強い妨害波が存在しても利得圧縮が起きにくくします。ただし、高 IP3 のデバイスは一般に消費電力が大きくなるトレードオフがあります。
(3)AGC(自動利得制御): 強い妨害波が検出された場合に、自動的にフロントエンドの利得を下げて飽和を防ぎます。利得を下げると感度は低下しますが、回路の破壊やひどい歪みは防げます。
(4)ノッチフィルタ: 特定の既知の妨害周波数に対して、ノッチフィルタを挿入して除去します。レーダー受信機でクラッタ除去に用いられる手法の応用です。
ここまでの理論を踏まえて、Python を使って非線形特性、IP3 の図解、カスケード IP3 の計算を実際に実装し、視覚的に確認してみましょう。
Python による非線形特性の可視化
利得圧縮と P1dB の可視化
まず、非線形デバイスの入出力特性をプロットし、理想的な線形応答と比較して利得圧縮がどのように見えるかを確認します。
import numpy as np
import matplotlib.pyplot as plt
# 非線形デバイスのパラメータ
a1 = 10.0 # 小信号利得(線形利得)[V/V]
a3 = -0.5 # 3次非線形係数
# P1dBの理論値(入力振幅)
A_1dB = np.sqrt(0.145 * a1 / abs(a3))
# 入力振幅の範囲
A_in = np.linspace(0.01, 3.0, 500)
# 出力の基本波振幅(非線形モデル)
A_out_nonlinear = a1 * A_in + (3/4) * a3 * A_in**3
# 出力の基本波振幅(線形モデル)
A_out_linear = a1 * A_in
# 入力・出力を電力(dBm, 50Ω基準)に変換
P_in_dBm = 20 * np.log10(A_in) + 10 # 簡易変換
P_out_linear_dBm = 20 * np.log10(np.abs(A_out_linear)) + 10
P_out_nonlinear_dBm = 20 * np.log10(np.maximum(A_out_nonlinear, 1e-10)) + 10
# P1dBの位置
P_1dB_in = 20 * np.log10(A_1dB) + 10
P_1dB_out_ideal = 20 * np.log10(a1 * A_1dB) + 10
P_1dB_out_actual = P_1dB_out_ideal - 1 # 1dB圧縮
# プロット
fig, ax = plt.subplots(figsize=(9, 6))
ax.plot(P_in_dBm, P_out_linear_dBm, '--', color='gray', linewidth=1.5, label='Ideal linear response')
ax.plot(P_in_dBm, P_out_nonlinear_dBm, '-', color='#2196F3', linewidth=2, label='Nonlinear response')
# P1dBをマーク
ax.plot(P_1dB_in, P_1dB_out_actual, 'o', color='#FF5722', markersize=10, zorder=5, label=f'P1dB (input = {P_1dB_in:.1f} dBm)')
ax.annotate('1 dB', xy=(P_1dB_in, P_1dB_out_actual), xytext=(P_1dB_in + 3, P_1dB_out_actual + 2),
fontsize=12, color='#FF5722',
arrowprops=dict(arrowstyle='->', color='#FF5722'))
ax.set_xlabel('Input Power [dBm]', fontsize=12)
ax.set_ylabel('Output Power [dBm]', fontsize=12)
ax.set_title('Gain Compression and 1 dB Compression Point', fontsize=14)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
ax.set_xlim([P_in_dBm[0], P_in_dBm[-1]])
plt.tight_layout()
plt.show()
print(f"P1dB (input amplitude) = {A_1dB:.3f} V")
print(f"P1dB (input power) = {P_1dB_in:.1f} dBm (approx.)")
上のグラフから、いくつかの重要な特徴が読み取れます。
-
小信号領域(左側)では線形応答とほぼ一致する — 入力が小さいうちは、非線形項 $a_3 x^3$ の影響が無視でき、出力は入力に比例して増加します。グラフ上では破線(理想直線)と実線がほぼ重なっています。
-
入力が大きくなると出力が理想直線から下に逸れる — これが利得圧縮であり、$a_3 < 0$ の 3 次非線形性が原因です。入力をいくら増やしても出力が飽和に近づいていく様子がはっきりとわかります。
-
P1dB(赤い点)は利得圧縮がちょうど 1 dB の点 — この点を超えると歪みが無視できなくなるため、実用上の線形動作範囲の上限として使われます。
ツートーン入力による IM3 と IP3 の可視化
次に、入力レベルを変化させたときの基本波出力と IM3 出力を対数スケールでプロットし、IP3 を図解します。
import numpy as np
import matplotlib.pyplot as plt
# パラメータ
a1 = 10.0 # 小信号利得 [V/V]
a3 = -0.5 # 3次非線形係数
# IP3の理論値(入力振幅)
A_IP3 = np.sqrt(4 * a1 / (3 * abs(a3)))
# IP3の入力電力(dBm, 簡易変換)
P_IIP3 = 20 * np.log10(A_IP3) + 10
# 入力電力の範囲 [dBm]
P_in = np.linspace(-40, 20, 500)
# 入力振幅に変換
A_in = 10**((P_in - 10) / 20)
# 基本波出力 [dBm](小信号近似: a1 * A)
P_fund_out = P_in + 20 * np.log10(a1)
# IM3出力 [dBm]((3/4)|a3| * A^3)
A_IM3 = (3/4) * abs(a3) * A_in**3
P_IM3_out = 20 * np.log10(np.maximum(A_IM3, 1e-30)) + 10
# IP3の出力電力
P_OIP3 = P_IIP3 + 20 * np.log10(a1)
# プロット
fig, ax = plt.subplots(figsize=(9, 6))
# 基本波(傾き1)
ax.plot(P_in, P_fund_out, '-', color='#2196F3', linewidth=2.5, label='Fundamental (slope = 1)')
# IM3(傾き3)
ax.plot(P_in, P_IM3_out, '-', color='#F44336', linewidth=2.5, label='IM3 (slope = 3)')
# IP3点をマーク
ax.plot(P_IIP3, P_OIP3, '*', color='#4CAF50', markersize=18, zorder=5, label=f'IP3 (IIP3 = {P_IIP3:.1f} dBm)')
# 外挿の破線
ax.axvline(x=P_IIP3, color='#4CAF50', linestyle=':', alpha=0.5)
ax.axhline(y=P_OIP3, color='#4CAF50', linestyle=':', alpha=0.5)
ax.set_xlabel('Input Power [dBm]', fontsize=12)
ax.set_ylabel('Output Power [dBm]', fontsize=12)
ax.set_title('IP3: Intercept Point of Fundamental and IM3', fontsize=14)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
ax.set_xlim([-40, 25])
ax.set_ylim([-60, 50])
plt.tight_layout()
plt.show()
print(f"IIP3 = {P_IIP3:.1f} dBm")
print(f"OIP3 = {P_OIP3:.1f} dBm")
print(f"理論的な P1dB - IIP3 の差 = 9.6 dB")
このグラフは、受信機の非線形性を評価する際に最もよく目にするプロットです。いくつかのポイントを確認しましょう。
-
基本波の直線(青)は傾き 1 — 入力が 1 dB 増えると出力も 1 dB 増えます。これは線形動作を表しています。
-
IM3 の直線(赤)は傾き 3 — 入力が 1 dB 増えると IM3 出力は 3 dB 増えます。したがって、入力レベルが低いときは IM3 は基本波よりもはるかに小さいですが、入力が増加するにつれて急速に追いつきます。
-
IP3(緑の星印)は 2 本の直線の交点 — この点の入力電力が IIP3、出力電力が OIP3 です。実際の増幅器はこの点に到達する前に飽和しますが、外挿した仮想的な交点として定義されています。
-
IIP3 と P1dB の差が約 9.6 dB — 理論的な関係が数値で確認できます。
カスケード IP3 の計算
受信機の具体的なブロック構成を想定し、カスケード IP3 を計算して各段の寄与を可視化します。
import numpy as np
import matplotlib.pyplot as plt
def cascade_iip3(gains_dB, iip3_dBm):
"""
カスケード接続のIIP3を計算する。
Parameters
----------
gains_dB : list of float
各段の利得 [dB]
iip3_dBm : list of float
各段のIIP3 [dBm]
Returns
-------
iip3_sys_dBm : float
システム全体のIIP3 [dBm]
contributions : list of float
各段の寄与(1/P_IIP3^2 の各項)[mW^-2]
"""
n = len(gains_dB)
gains_linear = [10**(g / 10) for g in gains_dB] # 電力利得(真数)
iip3_mW = [10**(p / 10) for p in iip3_dBm] # IIP3 [mW]
# 各段の寄与を計算
contributions = []
cumulative_gain_sq = 1.0 # G1^2 * G2^2 * ... * G_{k-1}^2
for k in range(n):
contrib = cumulative_gain_sq / iip3_mW[k]**2
contributions.append(contrib)
cumulative_gain_sq *= gains_linear[k]**2
total = sum(contributions)
iip3_sys_mW = 1.0 / np.sqrt(total)
iip3_sys_dBm = 10 * np.log10(iip3_sys_mW)
return iip3_sys_dBm, contributions
# 受信機の構成例
# LNA BPF(損失) Mixer IF Amp
stages = ['LNA', 'BPF', 'Mixer', 'IF Amp']
gains_dB = [15, -2, -6, 30] # 各段の利得 [dB]
iip3_dBm = [-5, 50, 10, 15] # 各段のIIP3 [dBm]
nf_dB = [2.0, 2.0, 8.0, 6.0] # 各段のNF [dB]
# カスケードIIP3の計算
iip3_sys, contribs = cascade_iip3(gains_dB, iip3_dBm)
# 各段の寄与を百分率で
contribs_pct = [c / sum(contribs) * 100 for c in contribs]
print("=== 受信機カスケードIP3計算 ===")
print(f"{'段':>8} | {'利得[dB]':>10} | {'IIP3[dBm]':>10} | {'寄与[%]':>8}")
print("-" * 50)
for i, name in enumerate(stages):
print(f"{name:>8} | {gains_dB[i]:>10.1f} | {iip3_dBm[i]:>10.1f} | {contribs_pct[i]:>7.1f}%")
print("-" * 50)
print(f"{'System':>8} | {sum(gains_dB):>10.1f} | {iip3_sys:>10.1f} |")
# SFDR計算
bandwidth_Hz = 200e3
NF_sys = 2.5 # システムNFは約2.5 dB(LNA支配)
N_in = -174 + 10 * np.log10(bandwidth_Hz) + NF_sys
SFDR = (2/3) * (iip3_sys - N_in)
print(f"\n入力換算雑音床 = {N_in:.1f} dBm (BW = {bandwidth_Hz/1e3:.0f} kHz)")
print(f"SFDR = (2/3) * ({iip3_sys:.1f} - ({N_in:.1f})) = {SFDR:.1f} dB")
この計算結果から、受信機設計上の重要な知見が得られます。
-
ミキサーの寄与が最も大きい — ミキサーは IIP3 が比較的高い(10 dBm)にもかかわらず、LNA の利得(15 dB)による信号増幅を受けた後に位置しているため、システム全体の IP3 を大きく制約します。これは、カスケード公式において前段の利得の 2 乗が掛かることの影響です。
-
BPF(帯域通過フィルタ)の寄与はごくわずか — パッシブフィルタは IIP3 が非常に高い(50 dBm)ため、非線形性の観点ではほぼ無視できます。フィルタの挿入損失(-2 dB)は後段への信号レベルを下げるため、むしろ後段の非線形性を緩和する効果があります。
-
IF アンプは利得が大きいが IP3 への影響は中程度 — IF アンプは利得が 30 dB と大きいですが、ミキサーの変換損失により入力レベルが下がっているため、IM3 の絶対レベルは比較的抑えられています。
各段の寄与を棒グラフで可視化
import numpy as np
import matplotlib.pyplot as plt
# 前のセクションの計算結果を使用
stages = ['LNA', 'BPF', 'Mixer', 'IF Amp']
contribs_pct = [11.2, 0.0, 70.7, 18.1] # 上の計算結果の例(近似値)
colors = ['#2196F3', '#9E9E9E', '#F44336', '#FF9800']
fig, ax = plt.subplots(figsize=(8, 5))
bars = ax.bar(stages, contribs_pct, color=colors, edgecolor='white', linewidth=1.5)
# バーの上に値を表示
for bar, pct in zip(bars, contribs_pct):
ax.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 1,
f'{pct:.1f}%', ha='center', va='bottom', fontsize=13, fontweight='bold')
ax.set_ylabel('Contribution to System 1/IIP3² [%]', fontsize=12)
ax.set_title('Contribution of Each Stage to System Nonlinearity', fontsize=14)
ax.set_ylim([0, 85])
ax.grid(axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
この棒グラフは、システム全体の非線形性($1/P_{\text{IIP3}}^2$ の各項)に対する各段の寄与の割合を示しています。ミキサーが全体の約 70% を占めており、IP3 改善のために最初に注力すべき段であることが一目瞭然です。もしシステムの SFDR を改善したいなら、ミキサーの IIP3 を上げるか、LNA の利得を下げてミキサーへの入力レベルを抑えるのが効果的です。ただし後者は NF の悪化を招くため、バランスの取れた設計が求められます。
LNA 利得を変化させたときの SFDR の変化
NF と IP3 のトレードオフを定量的に確認するため、LNA の利得をパラメータとして変化させ、SFDR の変化をプロットします。
import numpy as np
import matplotlib.pyplot as plt
def system_nf_cascade(gains_dB, nf_dB):
"""フリスの公式でシステムNFを計算"""
n = len(gains_dB)
gains_lin = [10**(g/10) for g in gains_dB]
nf_lin = [10**(f/10) for f in nf_dB]
f_sys = nf_lin[0]
cumulative_gain = gains_lin[0]
for i in range(1, n):
f_sys += (nf_lin[i] - 1) / cumulative_gain
cumulative_gain *= gains_lin[i]
return 10 * np.log10(f_sys)
def cascade_iip3_dBm(gains_dB, iip3_dBm):
"""カスケードIIP3を計算(dBm出力)"""
n = len(gains_dB)
gains_lin = [10**(g/10) for g in gains_dB]
iip3_mW = [10**(p/10) for p in iip3_dBm]
total = 0
cum_gain_sq = 1.0
for k in range(n):
total += cum_gain_sq / iip3_mW[k]**2
cum_gain_sq *= gains_lin[k]**2
return 10 * np.log10(1.0 / np.sqrt(total))
# LNA利得を5〜30 dBまで変化させる
lna_gains = np.linspace(5, 30, 100)
sfdrs = []
sys_nfs = []
sys_iip3s = []
bandwidth_Hz = 200e3
for g_lna in lna_gains:
gains = [g_lna, -2, -6, 30]
iip3s = [-5, 50, 10, 15]
nfs = [2.0, 2.0, 8.0, 6.0]
nf_sys = system_nf_cascade(gains, nfs)
iip3_sys = cascade_iip3_dBm(gains, iip3s)
N_in = -174 + 10 * np.log10(bandwidth_Hz) + nf_sys
sfdr = (2/3) * (iip3_sys - N_in)
sys_nfs.append(nf_sys)
sys_iip3s.append(iip3_sys)
sfdrs.append(sfdr)
# プロット(3段構成)
fig, axes = plt.subplots(3, 1, figsize=(9, 10), sharex=True)
# NF
axes[0].plot(lna_gains, sys_nfs, '-', color='#2196F3', linewidth=2)
axes[0].set_ylabel('System NF [dB]', fontsize=12)
axes[0].set_title('Effect of LNA Gain on Receiver Performance', fontsize=14)
axes[0].grid(True, alpha=0.3)
# IIP3
axes[1].plot(lna_gains, sys_iip3s, '-', color='#F44336', linewidth=2)
axes[1].set_ylabel('System IIP3 [dBm]', fontsize=12)
axes[1].grid(True, alpha=0.3)
# SFDR
axes[2].plot(lna_gains, sfdrs, '-', color='#4CAF50', linewidth=2)
axes[2].set_xlabel('LNA Gain [dB]', fontsize=12)
axes[2].set_ylabel('SFDR [dB]', fontsize=12)
axes[2].grid(True, alpha=0.3)
# SFDRの最大値をマーク
max_idx = np.argmax(sfdrs)
axes[2].plot(lna_gains[max_idx], sfdrs[max_idx], 'o', color='#FF5722', markersize=10, zorder=5)
axes[2].annotate(f'Max SFDR = {sfdrs[max_idx]:.1f} dB\n(LNA Gain = {lna_gains[max_idx]:.1f} dB)',
xy=(lna_gains[max_idx], sfdrs[max_idx]),
xytext=(lna_gains[max_idx] + 3, sfdrs[max_idx] - 3),
fontsize=11, color='#FF5722',
arrowprops=dict(arrowstyle='->', color='#FF5722'))
plt.tight_layout()
plt.show()
print(f"SFDR最大値: {sfdrs[max_idx]:.1f} dB (LNA利得 = {lna_gains[max_idx]:.1f} dB)")
print(f"このときのシステムNF: {sys_nfs[max_idx]:.2f} dB")
print(f"このときのシステムIIP3: {sys_iip3s[max_idx]:.1f} dBm")
この 3 段のグラフは、受信機設計における NF と IP3 のトレードオフを明瞭に示しています。
-
上段(NF): LNA の利得を上げるとシステム NF は単調に減少します。これはフリスの公式から予想されるとおりで、第 1 段の利得が高いほど後段の雑音寄与が抑えられます。しかし、利得が 15 dB を超えるとほとんど改善が飽和しています。
-
中段(IIP3): LNA の利得を上げるとシステム IIP3 は単調に減少します。これは、LNA の利得増加が後段(特にミキサー)への入力レベルを押し上げ、後段の IM3 寄与を増大させるためです。
-
下段(SFDR): SFDR は NF の改善と IIP3 の劣化の兼ね合いで決まり、ある最適な LNA 利得で極大値を取ります。利得が低すぎると NF が悪く雑音床が高いため SFDR が小さくなり、利得が高すぎると IP3 が低下して IM3 が雑音床を超えてしまいます。
この最適点の存在が、受信機の利得配分設計の核心です。実際の設計では、この最適点を狙いつつ、各段のデバイスの入手性やコスト、消費電力も考慮して利得配分を決定します。
受信機設計の実践的な指針
ここまでの理論をもとに、受信機設計で押さえるべき実践的なポイントを整理します。
利得配分の基本原則
受信機全体のゲインを各段にどう配分するかは、NF と IP3 の最適バランスで決まります。
第 1 段(LNA): システム NF を決定する最重要段です。NF を低く保つために適度な利得(10〜20 dB 程度)を持たせますが、過大な利得は後段の IP3 を悪化させるため、SFDR の最適点を意識して設計します。
中間段(ミキサー、フィルタ): ミキサーは IP3 のボトルネックになりやすいため、可能な限り IIP3 の高いミキサーを選定します。パッシブミキサーはアクティブミキサーよりも IIP3 が高い傾向がありますが、変換損失があるため NF が悪化します。ミキサーの前に帯域通過フィルタを入れることで、帯域外妨害波を事前に除去し、IM3 の発生を抑制します。
最終段(IF アンプ): ここまでの段で信号は十分に増幅されているため、IF アンプには残りの利得を配分します。IF 段は周波数が低いため、比較的容易に高い IP3 を実現できます。
デバイス選定の指標
データシートで確認すべき主要スペックをまとめます。
| パラメータ | LNA に求められる値 | ミキサーに求められる値 |
|---|---|---|
| NF | 0.5〜3 dB(最重要) | 6〜12 dB |
| IIP3 | $-10$〜$+10$ dBm | $+10$〜$+30$ dBm |
| P1dB(入力) | $-20$〜$0$ dBm | $0$〜$+15$ dBm |
| 利得 | 10〜25 dB | $-10$〜$+15$ dB |
設計フロー
受信機の線形性設計は、一般に次の手順で進めます。
- 要求 SFDR とシステム帯域幅から、必要な IIP3 と NF を逆算する
- LNA の利得をパラメータとして、カスケード NF とカスケード IIP3 をシミュレーション
- SFDR が最大となる利得配分を特定し、各段のスペックに落とし込む
- 各段のデバイスを選定し、全段のカスケード計算で要求を満たすか確認
- マージンを加味して最終仕様を確定する
この一連の設計プロセスにおいて、ここまで学んだ P1dB、IP3、SFDR、カスケード IP3 の公式が全て活用されます。
まとめ
本記事では、受信機のダイナミックレンジに関わる主要な概念を、テイラー展開による非線形デバイスのモデル化から始めて体系的に解説しました。
- ダイナミックレンジは、受信機が正しく動作できる入力信号電力の範囲であり、下限は雑音床、上限は非線形歪みで決まります。
- 1 dB 圧縮点(P1dB) は、利得が理想値から 1 dB 低下する入力レベルであり、$A_{1\text{dB}} = \sqrt{0.145 \, a_1 / |a_3|}$ で計算されます。
- 3 次相互変調歪み(IM3) は、2 信号入力時に基本波近傍に現れるスプリアス成分で、フィルタで除去困難なため受信機設計上最も厄介な非線形性です。
- IP3(3 次インターセプトポイント) は、基本波と IM3 の外挿直線が交わる仮想点であり、$P_{\text{IIP3}} \approx P_{1\text{dB}} + 9.6$ dB の関係があります。
- SFDR は $\frac{2}{3}(\text{IIP3} – N_{\text{in}})$ で計算され、複数信号環境における受信機の実用的なダイナミックレンジです。
- カスケード IP3 は、$\frac{1}{P_{\text{IIP3,sys}}^2} = \sum_k \frac{\prod_{i
- LNA の利得配分には NF 改善と IP3 劣化のトレードオフがあり、SFDR を最大化する最適点が存在します。
受信機のダイナミックレンジは、雑音指数(NF)と並んで受信機性能を規定する 2 大指標です。実際の受信機設計では、NF とダイナミックレンジの両方を同時に最適化する必要があり、これには利得配分、デバイス選定、フィルタ設計を総合的に行うシステムレベルの設計力が求められます。
次のステップとして、以下の記事も参考にしてください。