ミキサーと周波数変換 — ヘテロダイン受信機の心臓部

ラジオの選局ダイヤルを回すと、異なる放送局の番組が次々と聞こえてきます。しかし、空中を飛び交う無数の電波の中から特定の周波数の信号だけを高精度に選び出すのは、実は簡単なことではありません。もし受信したい周波数に直接合わせたフィルタを作ろうとすると、たとえば900 MHzの信号を200 kHz幅で選択するには $Q = 900\text{MHz} / 200\text{kHz} = 4500$ という途方もない品質係数(Q値)のフィルタが必要になります。これは実用的ではありません。

この問題を解決する鍵がミキサー(mixer) による周波数変換です。受信信号を一度低い中間周波数(IF: Intermediate Frequency)に変換してしまえば、IFフィルタは比較的低い $Q$ 値で高い選択度を実現できます。これが1918年にエドウィン・アームストロングが発明したスーパーヘテロダイン(superheterodyne)受信機の基本原理であり、100年以上経った現在でもほぼ全ての無線受信機で使われているアーキテクチャです。

ミキサーと周波数変換を理解すると、次のような分野に直結します:

  • 受信機設計: AM/FMラジオから携帯電話、衛星通信まで、あらゆる受信機のフロントエンド
  • 計測器: スペクトルアナライザやネットワークアナライザの内部で周波数スイープに使われる
  • レーダー: 送受信の周波数差からドップラーシフトやレンジ情報を抽出する

本記事の内容

  • 周波数変換の数学的原理(非線形素子による積→和差周波数)
  • スーパーヘテロダイン受信機のアーキテクチャと設計パラメータ
  • ミキサーの種類(ダイオードミキサー、ギルバートセル)
  • イメージ周波数問題と対策
  • 変換損失とIP3(3次インターセプトポイント)
  • Pythonによるミキサーシミュレーションとスペクトル解析

前提知識

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

周波数変換の数学的原理

非線形性が生む新しい周波数

日常的な音の世界では、2つの音を混ぜても元の周波数以外の成分は生まれません。ピアノのドとミを同時に弾いても、別の音程が飛び出してくることはありません。これは空気が線形媒質だからです。

しかし、非線形な素子(ダイオード、トランジスタなど)を通すと事情が変わります。入力信号の二乗項やそれ以上の高次項が出力に現れ、入力にはなかった新しい周波数成分が生成されます。この現象を利用して、信号の周波数を意図的にシフトさせるのがミキサーの役割です。

理想ミキサーの数学

最もシンプルなモデルとして、2つの信号の積を出力する理想ミキサーを考えましょう。入力信号(RF信号)を $x_{\text{RF}}(t) = A \cos(2\pi f_{\text{RF}} t)$、局部発振器(LO: Local Oscillator)の信号を $x_{\text{LO}}(t) = B \cos(2\pi f_{\text{LO}} t)$ とすると、出力は:

$$ y(t) = x_{\text{RF}}(t) \cdot x_{\text{LO}}(t) = AB \cos(2\pi f_{\text{RF}} t) \cos(2\pi f_{\text{LO}} t) $$

三角関数の積和公式を適用します:

$$ \cos\alpha \cos\beta = \frac{1}{2}[\cos(\alpha – \beta) + \cos(\alpha + \beta)] $$

これにより:

$$ \begin{equation} y(t) = \frac{AB}{2}\bigl[\cos(2\pi(f_{\text{RF}} – f_{\text{LO}})t) + \cos(2\pi(f_{\text{RF}} + f_{\text{LO}})t)\bigr] \end{equation} $$

出力には2つの周波数成分が生まれます:

  • 差周波数: $f_{\text{IF}} = |f_{\text{RF}} – f_{\text{LO}}|$(ダウンコンバージョン)
  • 和周波数: $f_{\text{RF}} + f_{\text{LO}}$(アップコンバージョン)

受信機では差周波数を中間周波数(IF)として利用し、和周波数はフィルタで除去します。送信機では逆に、低い周波数(IF)から高い周波数(RF)へのアップコンバージョンに和周波数を使います。

ダイオードミキサーの非線形モデル

実際のミキサーでは、理想的な乗算器の代わりに非線形素子の特性を利用します。ダイオードの電流-電圧特性はテイラー展開で:

$$ i(v) = a_0 + a_1 v + a_2 v^2 + a_3 v^3 + \cdots $$

RF信号とLO信号の和 $v(t) = x_{\text{RF}}(t) + x_{\text{LO}}(t)$ を入力すると、二乗項 $a_2 v^2$ から:

$$ a_2 v^2 = a_2 [x_{\text{RF}}(t) + x_{\text{LO}}(t)]^2 = a_2 [x_{\text{RF}}^2 + 2x_{\text{RF}} x_{\text{LO}} + x_{\text{LO}}^2] $$

交差項 $2a_2 x_{\text{RF}} x_{\text{LO}}$ が理想ミキサーの積に対応します。$x_{\text{RF}}^2$ と $x_{\text{LO}}^2$ の項は不要な高調波を生みますが、フィルタで除去できます。

ただし、三乗項 $a_3 v^3$ からは相互変調歪み(intermodulation distortion)が生じ、これはミキサーの線形性能を制限する重要な要因になります。これについては後ほどIP3の節で詳しく議論します。

周波数変換の数学が理解できたところで、この原理を組み込んだ受信機アーキテクチャの全体像を見ていきましょう。

スーパーヘテロダイン受信機のアーキテクチャ

基本構成

スーパーヘテロダイン受信機は、以下のブロックで構成されます:

アンテナ → RFフィルタ → LNA → ミキサー → IFフィルタ → IF増幅 → 復調器 → 出力
                                  ↑
                              局部発振器(LO)

各ブロックの役割を説明します:

  1. RFフィルタ(プリセレクタ): アンテナから入った広帯域の信号のうち、目的の周波数帯を粗く選択します。後述するイメージ周波数の除去が主な役割です
  2. LNA(低雑音増幅器): 微弱な受信信号を雑音の追加を最小限に抑えながら増幅します
  3. ミキサー + LO: RF信号を固定のIF周波数に変換します。LOの周波数を変えることで受信周波数を選局します
  4. IFフィルタ: 固定の中心周波数で高い選択度を実現します。ここがヘテロダイン方式の最大の利点です
  5. IF増幅器: IF信号をさらに増幅します。AGC(自動利得制御)もここで行われます
  6. 復調器: AM検波、FM検波、同期検波などで元のメッセージを復元します

なぜIFに変換するのか — 設計上の利点

冒頭で述べた通り、直接RF周波数でフィルタリングしようとすると極めて高い $Q$ 値が必要になります。IFへの変換がもたらす利点を定量的に見てみましょう。

例: FM放送受信機 – 受信帯域: 76-90 MHz(日本の場合) – チャンネル幅: 200 kHz – IF周波数: 10.7 MHz(業界標準)

直接選択の場合: $$ Q_{\text{direct}} = \frac{f_{\text{RF}}}{BW} = \frac{88\text{ MHz}}{200\text{ kHz}} = 440 $$

IF変換後: $$ Q_{\text{IF}} = \frac{f_{\text{IF}}}{BW} = \frac{10.7\text{ MHz}}{200\text{ kHz}} = 53.5 $$

必要な $Q$ 値が1桁近く下がり、実用的なフィルタで実現できます。さらに重要なのは、IFフィルタは固定周波数なので、水晶フィルタやセラミックフィルタなど、高性能で安定したフィルタを使えることです。

IF周波数の選択

IF周波数の選択は受信機設計の重要な判断です:

IF周波数 長所 短所
高い イメージ除去が容易 IFフィルタの選択度が低い
低い IFフィルタの選択度が高い イメージ除去が困難

この相反するトレードオフを両立させるため、高性能受信機ではダブルコンバージョン(二重変換) 方式が用いられます。第1IFを高くしてイメージを除去し、第2IFを低くして高い選択度を得る構成です。

選局の仕組みとIFの設計が理解できたところで、ヘテロダイン受信機の最大の弱点であるイメージ周波数問題に進みましょう。

イメージ周波数問題

イメージ周波数とは何か

ミキサーの出力における差周波数は $|f_{\text{RF}} – f_{\text{LO}}|$ です。ここで注目すべきは絶対値がついていることです。つまり、IF周波数 $f_{\text{IF}}$ を生成するRF周波数は2つ存在します:

$$ f_{\text{RF}} = f_{\text{LO}} + f_{\text{IF}} \quad \text{(目的信号)} $$

$$ f_{\text{image}} = f_{\text{LO}} – f_{\text{IF}} \quad \text{(イメージ信号)} $$

目的信号とイメージ信号の両方がミキサーで同じIF周波数に変換されてしまうため、IFフィルタでは区別できません。

具体例: AM放送受信機(IF = 455 kHz)で 1000 kHz の放送局を受信する場合: – LO周波数: $f_{\text{LO}} = 1000 + 455 = 1455$ kHz – イメージ周波数: $f_{\text{image}} = 1455 + 455 = 1910$ kHz

もし1910 kHzに強い信号があれば、それが455 kHzのIFに混入して干渉を引き起こします。

イメージ除去比(IRR)

イメージ信号の抑圧度を表す指標がイメージ除去比(Image Rejection Ratio: IRR) です:

$$ \text{IRR} = \frac{\text{イメージ周波数でのRFフィルタ利得}}{\text{目的周波数でのRFフィルタ利得}} $$

通常はdBで表し、高いほどイメージ除去性能が良いことを示します。

目的信号とイメージ信号の周波数間隔は:

$$ f_{\text{image}} – f_{\text{RF}} = 2 f_{\text{IF}} $$

したがって、IF周波数が高いほど目的信号とイメージの間隔が広がり、RFフィルタでの除去が容易になります。これが「高いIF → イメージ除去が容易」というトレードオフの理由です。

イメージリジェクションミキサー

RFフィルタだけでは十分なイメージ除去ができない場合、イメージリジェクションミキサー(IRM) を使います。代表的なのがハートレー(Hartley)アーキテクチャです。

ハートレーIRMでは、2つのミキサーとLOの $90°$ 位相シフトを利用します:

  1. RF信号を2分岐
  2. ミキサー1: $\text{RF} \times \cos(2\pi f_{\text{LO}} t)$
  3. ミキサー2: $\text{RF} \times \sin(2\pi f_{\text{LO}} t)$(LOを $90°$ シフト)
  4. ミキサー2の出力をさらに $90°$ シフト
  5. 2つの出力を加算

目的信号は同相で加算され、イメージ信号は逆相で打ち消し合います。理想的には完全にイメージを除去できますが、実際には位相誤差や振幅アンバランスにより、20〜40 dB程度の抑圧に留まります。

数学的に確認しましょう。目的信号 $\cos(2\pi f_{\text{RF}} t)$ に対する2つのミキサー出力は(IFのみ抽出すると):

ミキサー1の出力(IF成分): $$ y_1(t) = \frac{1}{2}\cos(2\pi f_{\text{IF}} t) $$

ミキサー2の出力(IF成分): $$ y_2(t) = \frac{1}{2}\sin(2\pi f_{\text{IF}} t) $$

$y_2$ を $90°$ シフトすると $\frac{1}{2}\cos(2\pi f_{\text{IF}} t)$ となり、$y_1 + y_2’$ で目的信号のIF成分が強め合います。

一方、イメージ信号 $\cos(2\pi f_{\text{image}} t)$ に対しては:

ミキサー1の出力: $$ y_1^{\text{img}}(t) = \frac{1}{2}\cos(2\pi f_{\text{IF}} t) $$

ミキサー2の出力: $$ y_2^{\text{img}}(t) = -\frac{1}{2}\sin(2\pi f_{\text{IF}} t) $$

$y_2^{\text{img}}$ を $90°$ シフトすると $-\frac{1}{2}\cos(2\pi f_{\text{IF}} t)$ となり、$y_1^{\text{img}} + y_2^{\text{img}’}= 0$ でイメージが消えます。

この巧妙な構成は、SSBのヒルベルト変換と本質的に同じ原理 — 直交成分の位相関係を利用した選択的なキャンセリング — に基づいています。

イメージ問題を理解したところで、次にミキサー自身の性能を特徴付ける指標について見ていきましょう。

ミキサーの種類と特性

ダイオードミキサー

最もシンプルなミキサーは、シングルダイオードミキサーです。ダイオードの非線形性を直接利用しますが、アイソレーション(RF-LO間の分離度)が低く、実用的にはダブルバランスドミキサー(DBM: Double Balanced Mixer) が広く使われます。

DBMはダイオードリングまたはダイオードスターの構成で、4個のダイオードをバランス型トランスとともに配置します。これにより:

  • RF-LO間のアイソレーションが向上(RF漏洩、LO漏洩が抑制される)
  • 偶数次高調波が相殺される
  • 広帯域な動作が可能

変換損失(Conversion Loss) は理想的なDBMで約 $L_c = 3.9$ dB($= 20\log_{10}(2/\pi)$)です。これは、ダイオードのスイッチング動作を矩形波で近似したとき、基本波成分が $2/\pi$ になることに由来します。実際の製品では挿入損失を含めて6〜8 dB程度です。

ギルバートセル

IC化されたミキサーの標準的な構成がギルバートセル(Gilbert cell) です。差動増幅器のテール電流をRF信号で変調し、上部のスイッチングペアでLO信号によるスイッチングを行います。

ギルバートセルの特長:

  • 変換利得(Conversion Gain) が得られる(受動ミキサーとは異なり増幅作用がある)
  • 高いポート間アイソレーション
  • IC集積に適した構成
  • シングルチップ受信機(携帯電話用ICなど)で広く使用

ただし、受動ミキサー(DBM)と比べて線形性(IP3)で劣る場合があり、強信号環境ではこれが問題になることがあります。

パッシブ vs アクティブミキサー

特性 パッシブ(DBM等) アクティブ(ギルバートセル等)
変換利得 損失あり(-6〜-8 dB) 利得あり(+5〜+15 dB)
線形性(IP3) 高い(+10〜+30 dBm) やや低い
雑音指数 変換損失 ≈ NF 中程度
DC電力 不要 必要
IC集積 困難(トランス必要) 容易

受信機の設計では、要求仕様(感度、線形性、消費電力など)に応じてミキサーの種類を選択します。

ミキサーの種類を概観したところで、次にミキサーの性能を定量的に評価する最も重要な指標の一つであるIP3について解説します。

IP3 — ミキサーの線形性指標

なぜ線形性が重要なのか

現実の無線環境では、目的信号のすぐ隣に強力な妨害信号が存在することが珍しくありません。たとえば、携帯電話が基地局の真横で弱い遠方の信号を受信するような場面です。ミキサーの非線形性は、これらの強い妨害信号から相互変調歪み(IMD: Intermodulation Distortion) を生み出し、目的信号と同じ周波数に不要な成分を落とし込んでしまう可能性があります。

3次相互変調歪み(IM3)

2つの強い信号 $\cos(2\pi f_1 t)$ と $\cos(2\pi f_2 t)$ がミキサーに入力されたとき、3次の非線形性 $a_3 v^3$ から以下の周波数成分が生まれます:

$$ 2f_1 – f_2, \quad 2f_2 – f_1 $$

これらの3次相互変調積(IM3)は、$f_1$ と $f_2$ が近い場合、元の信号の近くに落ちるためフィルタで除去できません。たとえば $f_1 = 100$ MHz、$f_2 = 101$ MHz のとき:

$$ 2f_1 – f_2 = 99 \text{ MHz}, \quad 2f_2 – f_1 = 102 \text{ MHz} $$

IM3成分は目的の周波数帯のすぐ外側に現れ、IFフィルタの帯域内に入り込む可能性があります。

IP3の定義

入力電力を上げると: – 基本波 の出力は 1 dB/dB(入力が1 dB増えると出力も1 dB増える)で増加 – IM3 の出力は 3 dB/dB で増加(3乗特性なので3倍の傾きで増加)

このまま外挿していくと、あるレベルで基本波とIM3の出力が等しくなります。この仮想的な交点を3次インターセプトポイント(IP3: Third-order Intercept Point) と呼びます。

入力側で定義したものを IIP3(Input IP3)、出力側で定義したものを OIP3(Output IP3) と呼び、ミキサーの利得を $G$ として:

$$ \begin{equation} \text{OIP3} = \text{IIP3} + G \quad [\text{dBm}] \end{equation} $$

IP3が高いほど、強い妨害信号の存在下でもIM3歪みが小さく、高い線形性を持つことを意味します。

スプリアスフリーダイナミックレンジ(SFDR)

IP3と雑音レベルから、ミキサー(あるいは受信機全体)のスプリアスフリーダイナミックレンジ(SFDR) を求めることができます:

$$ \begin{equation} \text{SFDR} = \frac{2}{3}(\text{IIP3} – \text{MDS}) \quad [\text{dB}] \end{equation} $$

ここで MDS(Minimum Discernible Signal)は最小検出信号レベルで、雑音フロアと帯域幅で決まります。SFDRは、IM3歪みが雑音フロア以下に収まる最大の入力信号レベル範囲を表します。

数式でミキサーの特性を理解したところで、Pythonで実際にミキサーの動作をシミュレーションし、周波数変換と非線形歪みを可視化してみましょう。

Pythonでのミキサーシミュレーション

理想ミキサーによる周波数変換

まず、理想ミキサー(単純な乗算器)で周波数変換を行い、スペクトルを確認します。

import numpy as np
import matplotlib.pyplot as plt

# パラメータ
fs = 100000      # サンプリング周波数 [Hz]
T = 0.1          # 信号長 [s]
t = np.arange(0, T, 1/fs)
N = len(t)

f_rf = 10000     # RF信号周波数 [Hz]
f_lo = 9000      # LO周波数 [Hz]
f_if = f_rf - f_lo  # IF周波数 = 1000 Hz

# RF信号(変調あり: 2トーン)
rf_signal = np.cos(2 * np.pi * f_rf * t) + 0.5 * np.cos(2 * np.pi * (f_rf + 200) * t)

# LO信号
lo_signal = np.cos(2 * np.pi * f_lo * t)

# 理想ミキサー: 単純な乗算
mixer_out = rf_signal * lo_signal

# スペクトル計算
freqs = np.fft.rfftfreq(N, 1/fs)
RF_spec = np.abs(np.fft.rfft(rf_signal)) / N * 2
MIX_spec = np.abs(np.fft.rfft(mixer_out)) / N * 2

fig, axes = plt.subplots(3, 1, figsize=(12, 9))

# RF信号のスペクトル
axes[0].plot(freqs/1000, 20*np.log10(RF_spec + 1e-10), 'b-', linewidth=0.8)
axes[0].set_xlim([0, 25])
axes[0].set_ylim([-80, 10])
axes[0].set_ylabel('Magnitude [dB]')
axes[0].set_title('RF Signal Spectrum')
axes[0].axvline(x=f_rf/1000, color='r', linestyle='--', alpha=0.5, label=f'f_RF = {f_rf/1000} kHz')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# ミキサー出力のスペクトル(全体)
axes[1].plot(freqs/1000, 20*np.log10(MIX_spec + 1e-10), 'g-', linewidth=0.8)
axes[1].set_xlim([0, 25])
axes[1].set_ylim([-80, 10])
axes[1].set_ylabel('Magnitude [dB]')
axes[1].set_title('Mixer Output Spectrum (full range)')
axes[1].axvline(x=f_if/1000, color='r', linestyle='--', alpha=0.5, label=f'IF = {f_if/1000} kHz')
axes[1].axvline(x=(f_rf+f_lo)/1000, color='orange', linestyle='--', alpha=0.5, label=f'Sum = {(f_rf+f_lo)/1000} kHz')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

# ミキサー出力のスペクトル(IF帯拡大)
axes[2].plot(freqs/1000, 20*np.log10(MIX_spec + 1e-10), 'm-', linewidth=1)
axes[2].set_xlim([0, 3])
axes[2].set_ylim([-80, 10])
axes[2].set_ylabel('Magnitude [dB]')
axes[2].set_title('Mixer Output Spectrum (IF band zoom)')
axes[2].set_xlabel('Frequency [kHz]')
axes[2].axvline(x=f_if/1000, color='r', linestyle='--', alpha=0.5, label=f'IF = {f_if/1000} kHz')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('ideal_mixer.png', dpi=150, bbox_inches='tight')
plt.show()

このシミュレーション結果から、周波数変換の基本が確認できます:

  1. RF帯の2つの成分(10 kHz, 10.2 kHz)がIF帯(1 kHz, 1.2 kHz)に正確にシフトされている — 2つのトーンの間隔200 Hzは周波数変換後も保存されています。これは変調内容(信号の構造)が周波数変換によって変わらないことを意味します。
  2. 和周波数成分(19 kHz, 19.2 kHz付近)も出力に現れている — これらはIFフィルタで除去する必要があります。
  3. 差周波数成分のレベルは-6 dB — これは $\frac{1}{2}$ の係数(積和公式の $1/2$)に対応し、理想ミキサーの変換損失が $20\log_{10}(1/2) = -6.02$ dBであることを示しています。

非線形ミキサーとIP3のシミュレーション

次に、実際のミキサーの非線形特性をモデル化し、IP3の概念を視覚的に理解します。

import numpy as np
import matplotlib.pyplot as plt

# 非線形ミキサーモデル: y = a1*x + a3*x^3
# RF信号とLO信号の和を入力とする
a1 = 1.0
a3 = -0.01  # 3次係数(圧縮方向)

fs = 500000
T = 0.05
t = np.arange(0, T, 1/fs)
N = len(t)

f_lo = 50000  # LO [Hz]
f1 = 51000    # RF tone 1 [Hz]
f2 = 51500    # RF tone 2 [Hz]
# IM3周波数: 2*f1-f2=50500, 2*f2-f1=52000
# IF変換後: |f1-flo|=1000, |f2-flo|=1500
# IM3 IF: |2f1-f2-flo|=500, |2f2-f1-flo|=2000

# IP3スイープ: 入力レベルを変えてIM3を観測
input_levels_dBm = np.arange(-40, 5, 2)  # 入力レベル [dBm]
fundamental_out = []
im3_out = []

for p_in in input_levels_dBm:
    # 入力振幅(正規化: 0 dBm = 振幅1)
    A_rf = 10**((p_in - 0) / 20)
    A_lo = 2.0  # LO振幅は固定(十分大きい)

    # 入力信号
    v_in = A_rf * (np.cos(2 * np.pi * f1 * t) + np.cos(2 * np.pi * f2 * t)) + A_lo * np.cos(2 * np.pi * f_lo * t)

    # 非線形出力
    v_out = a1 * v_in + a3 * v_in**3

    # スペクトル
    spec = np.abs(np.fft.rfft(v_out)) / N * 2
    freqs = np.fft.rfftfreq(N, 1/fs)

    # IF帯の基本波とIM3のレベルを取得
    df = freqs[1] - freqs[0]
    idx_fund = np.argmin(np.abs(freqs - (f1 - f_lo)))  # IF基本波 1kHz
    idx_im3 = np.argmin(np.abs(freqs - (2*f1 - f2 - f_lo)))  # IM3 500Hz

    fund_level = 20 * np.log10(spec[idx_fund] + 1e-15)
    im3_level = 20 * np.log10(spec[idx_im3] + 1e-15)

    fundamental_out.append(fund_level)
    im3_out.append(im3_level)

fundamental_out = np.array(fundamental_out)
im3_out = np.array(im3_out)

# IP3の外挿推定
# 基本波: 傾き1で外挿
# IM3: 傾き3で外挿
# 低入力レベル(線形領域)でフィッティング
fit_range = input_levels_dBm < -15
p_fund = np.polyfit(input_levels_dBm[fit_range], fundamental_out[fit_range], 1)
p_im3 = np.polyfit(input_levels_dBm[fit_range], im3_out[fit_range], 1)

# 外挿線
x_ext = np.linspace(-50, 20, 100)
fund_ext = p_fund[0] * x_ext + p_fund[1]
im3_ext = p_im3[0] * x_ext + p_im3[1]

# IP3: 交点
iip3 = (p_im3[1] - p_fund[1]) / (p_fund[0] - p_im3[0])
oip3 = p_fund[0] * iip3 + p_fund[1]

fig, ax = plt.subplots(figsize=(10, 7))
ax.plot(input_levels_dBm, fundamental_out, 'bo-', markersize=5, label='Fundamental (measured)')
ax.plot(input_levels_dBm, im3_out, 'r^-', markersize=5, label='IM3 (measured)')
ax.plot(x_ext, fund_ext, 'b--', alpha=0.5, label=f'Fundamental (slope={p_fund[0]:.1f})')
ax.plot(x_ext, im3_ext, 'r--', alpha=0.5, label=f'IM3 (slope={p_im3[0]:.1f})')
ax.plot(iip3, oip3, 'k*', markersize=15, label=f'IP3: IIP3={iip3:.1f} dBm')
ax.set_xlabel('Input Power [dBm]')
ax.set_ylabel('Output Power [dBm]')
ax.set_title('IP3 (Third-order Intercept Point)')
ax.set_xlim([-45, 15])
ax.set_ylim([-120, 30])
ax.legend(loc='lower right')
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('ip3_plot.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"IIP3 = {iip3:.1f} dBm")
print(f"OIP3 = {oip3:.1f} dBm")

IP3のプロットから、ミキサーの線形性に関する重要な知見が得られます:

  1. 基本波は傾き約1 dB/dBで増加 — 入力電力が1 dB増えると出力も1 dBだけ増えます。これは線形動作の特徴です。ただし、入力が大きくなると飽和(利得圧縮)が始まります。
  2. IM3は傾き約3 dB/dBで増加 — 3次の非線形項 $a_3 v^3$ に由来するため、入力が1 dB増えるとIM3は3 dB増えます。この急激な増加がIM3の厄介さの原因です。
  3. IP3は基本波とIM3の外挿線が交わる仮想的な点 — 実際にはこの点に到達する前にミキサーは飽和しますが、線形領域の振る舞いから外挿することで、異なるミキサーの線形性を統一的に比較できます。

イメージ周波数の影響シミュレーション

最後に、イメージ周波数問題を視覚的に確認します。

import numpy as np
import matplotlib.pyplot as plt

fs = 200000
T = 0.05
t = np.arange(0, T, 1/fs)
N = len(t)

f_lo = 10000     # LO = 10 kHz
f_if = 1000      # IF = 1 kHz
f_rf = f_lo + f_if   # 目的信号 = 11 kHz
f_img = f_lo - f_if  # イメージ = 9 kHz

# 目的のRF信号
rf_desired = np.cos(2 * np.pi * f_rf * t)

# イメージ信号(同じ振幅で存在する最悪ケース)
rf_image = 0.8 * np.cos(2 * np.pi * f_img * t)

# LO信号
lo = np.cos(2 * np.pi * f_lo * t)

# ケース1: 目的信号のみ
mix_desired = rf_desired * lo
# ケース2: イメージ信号のみ
mix_image = rf_image * lo
# ケース3: 両方(実際の受信状況)
mix_both = (rf_desired + rf_image) * lo

# スペクトル計算
def compute_spectrum_db(signal, fs):
    N = len(signal)
    freqs = np.fft.rfftfreq(N, 1/fs)
    spec = np.abs(np.fft.rfft(signal)) / N * 2
    spec_db = 20 * np.log10(spec + 1e-15)
    return freqs, spec_db

fig, axes = plt.subplots(3, 1, figsize=(12, 9))

f, s = compute_spectrum_db(mix_desired, fs)
axes[0].plot(f/1000, s, 'b-', linewidth=1)
axes[0].set_xlim([0, 5])
axes[0].set_ylim([-80, 10])
axes[0].set_ylabel('Magnitude [dB]')
axes[0].set_title(f'Mixer output: Desired signal only (f_RF={f_rf/1000} kHz)')
axes[0].axvline(x=f_if/1000, color='g', linestyle='--', alpha=0.7, label=f'IF = {f_if/1000} kHz')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

f, s = compute_spectrum_db(mix_image, fs)
axes[1].plot(f/1000, s, 'r-', linewidth=1)
axes[1].set_xlim([0, 5])
axes[1].set_ylim([-80, 10])
axes[1].set_ylabel('Magnitude [dB]')
axes[1].set_title(f'Mixer output: Image signal only (f_image={f_img/1000} kHz)')
axes[1].axvline(x=f_if/1000, color='g', linestyle='--', alpha=0.7, label=f'IF = {f_if/1000} kHz')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

f, s = compute_spectrum_db(mix_both, fs)
axes[2].plot(f/1000, s, 'm-', linewidth=1)
axes[2].set_xlim([0, 5])
axes[2].set_ylim([-80, 10])
axes[2].set_ylabel('Magnitude [dB]')
axes[2].set_title('Mixer output: Both signals (image interference)')
axes[2].set_xlabel('Frequency [kHz]')
axes[2].axvline(x=f_if/1000, color='g', linestyle='--', alpha=0.7, label=f'IF = {f_if/1000} kHz')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('image_freq.png', dpi=150, bbox_inches='tight')
plt.show()

イメージ周波数シミュレーションの結果は非常に示唆的です:

  1. 目的信号(11 kHz)もイメージ信号(9 kHz)も、どちらもIF = 1 kHzに変換される — これがイメージ問題の本質です。ミキサーは $|f – f_{\text{LO}}|$ という絶対値演算を行うため、LO周波数に対して対称な2つの入力周波数を区別できません。
  2. 両方が同時に存在する場合、IF出力は干渉を受ける — 目的信号とイメージ信号がIF帯で重畳し、復調信号が歪みます。この干渉はIFフィルタでは除去不可能です。
  3. 対策の必要性が視覚的に明確 — RFフィルタによるイメージの事前除去、または先述のイメージリジェクションミキサーが不可欠であることが理解できます。

まとめ

本記事では、ミキサーによる周波数変換の原理とスーパーヘテロダイン受信機のアーキテクチャについて解説しました。

  • 周波数変換 は非線形素子による信号の積から和差周波数を生成する操作であり、三角関数の積和公式で記述される
  • スーパーヘテロダイン方式 は受信信号を固定のIF周波数に変換することで、高選択度フィルタリングを実現する
  • イメージ周波数 は $f_{\text{LO}} \pm f_{\text{IF}}$ の対称性から生じる問題であり、RFフィルタやイメージリジェクションミキサーで対策する
  • IP3 はミキサーの線形性を表す指標であり、強信号環境での相互変調歪みの大きさを予測する
  • ミキサーにはパッシブ型(DBM)アクティブ型(ギルバートセル) があり、用途に応じて選択する

ミキサーと周波数変換は、受信機設計だけでなく、スペクトルアナライザ、レーダー、ソフトウェア無線など、高周波技術のあらゆる場面で登場する基本概念です。

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