1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「レーザー共振器、どう設計する?」— 電磁界シミュレーションで光を閉じ込める技術

1
Posted at

エンジニアの皆さん、こんにちは。今日は「レーザー共振器」という、一見すると難解なテーマを扱います。

でも、ちょっと待ってください。あなたが今使っている光ファイバー通信、Blu-ray、レーザー加工、そしてあのレーザーポインター。これら全ての根幹にあるのが「共振器設計」なんです。

しかも面白いことに、「鏡の反射率を下げると出力が増える」 という直感に反する現象が起きます。なぜか? それを今日は数式とコードで完全に理解しましょう。

今回は、ブラウザで動く無料ツール「レーザー共振器設計シミュレーター」を題材に、理論から実装、実践的なパラメータ設計まで一気に駆け抜けます。


ざっくり本質:レーザーは「光の増幅器+フィルター」

レーザーを一言で表すとこうです。

「光を往復させながら増幅し、特定の波長だけを取り出す装置」

イメージはこうです:

  • 真ん中に「光を増幅する材料(利得媒質)」がある
  • 両端に「鏡」があって、光を往復させる
  • 鏡の一方だけ少しだけ光を通す(出力を取り出す)

この「どれだけの電流で発振が始まるか」「どれだけ効率よく光に変換できるか」「どの波長で発振するか」を決めるのが、共振器設計の本質です。


数式で理解する(核心4式)

このシミュレーターの計算は、たった4つの式で成り立っています。順番に見ていきましょう。

式1:閾値条件(発振が始まる条件)

\Gamma g_{th} = \alpha_i + \alpha_m
  • $\Gamma$:光閉じ込め係数(活性層と光の重なり具合)
  • $g_{th}$:閾値利得(最低限必要な増幅度)
  • $\alpha_i$:内部損失(材料の吸収や散乱)
  • $\alpha_m$:鏡面損失(ミラーから光が漏れる損失)

「増幅が損失を上回った瞬間、レーザーは発振する」 という原理を表しています。

式2:鏡面損失(ミラーの反射率が決める)

\alpha_m = \frac{1}{2L}\ln\frac{1}{R_1 R_2}
  • $L$:共振器長(鏡と鏡の距離)
  • $R_1, R_2$:前面・後面ミラーの反射率

ここが重要です。反射率を下げると $\alpha_m$ が増加し、閾値が上がる代わりに、出力として取り出せる光が増えます。

式3:スロープ効率(どれだけ効率よく光るか)

\eta_d = \eta_i \cdot \frac{\alpha_m}{\alpha_i + \alpha_m}
  • $\eta_i$:内部量子効率(注入した電子が光に変わる割合)

分子に $\alpha_m$ が来ているのがポイント。鏡面損失が大きいほど(=光を取り出しやすいほど)スロープ効率は上がるんです。

式4:L-I特性(出力パワー)

P_{out} = \eta_d \cdot \frac{hc/\lambda}{e}(I - I_{th})
  • $h$:プランク定数、$c$:光速、$\lambda$:波長、$e$:電子の電荷
  • $I_{th}$:閾値電流

閾値を超えた分の電流が、効率 $\eta_d$ で光出力に変換されます。

おまけ:縦モード間隔

\Delta\nu = \frac{c}{2nL}
  • $n$:屈折率

共振器が長いほど、発振可能な波長の間隔が狭くなり、複数モードが発振しやすくなります。


コードで実装する(JavaScript)

ここが最重要パートです。シミュレーターの計算ロジックを、実際に動くJavaScriptコードで再現します。

/**
 * レーザー共振器 設計計算モジュール
 * 閾値電流・スロープ効率・L-I特性・縦モード間隔を計算
 */
class LaserCavityDesign {
  constructor(params) {
    // 物理定数
    this.h = 6.626e-34;      // プランク定数 [J·s]
    this.c = 2.998e8;        // 光速 [m/s]
    this.e = 1.602e-19;      // 電子の電荷 [C]

    // 設計パラメータ(単位に注意!)
    this.L = params.L_cm * 0.01;         // 共振器長 [m](cm→m変換)
    this.R1 = params.R1;                 // 前面反射率
    this.R2 = params.R2;                 // 後面反射率
    this.alpha_i = params.alpha_i_cm * 100; // 内部損失 [1/m](cm⁻¹→m⁻¹変換)
    this.Gamma = params.Gamma;           // 光閉じ込め係数
    this.eta_i = params.eta_i;           // 内部量子効率
    this.lambda = params.lambda_nm * 1e-9; // 波長 [m](nm→m変換)
    this.n = params.n;                   // 屈折率
    this.I_0 = params.I_0_mA * 1e-3;     // 初期電流 [A](mA→A変換)
    this.I_max = params.I_max_mA * 1e-3; // 最大電流 [A]
    this.steps = params.steps || 100;    // 計算ステップ数
  }

  // 鏡面損失 α_m の計算
  calcMirrorLoss() {
    if (this.R1 <= 0 || this.R2 <= 0) return Infinity;
    return (1 / (2 * this.L)) * Math.log(1 / (this.R1 * this.R2));
  }

  // 閾値利得 g_th の計算
  calcThresholdGain() {
    const alpha_m = this.calcMirrorLoss();
    if (this.Gamma <= 0) return Infinity;
    return (this.alpha_i + alpha_m) / this.Gamma;
  }

  // スロープ効率 η_d の計算
  calcSlopeEfficiency() {
    const alpha_m = this.calcMirrorLoss();
    const totalLoss = this.alpha_i + alpha_m;
    if (totalLoss <= 0) return 0;
    return this.eta_i * (alpha_m / totalLoss);
  }

  // 縦モード間隔 Δν の計算 [Hz]
  calcModeSpacing() {
    if (this.n <= 0 || this.L <= 0) return 0;
    return this.c / (2 * this.n * this.L);
  }

  // L-I特性を計算(配列で返す)
  calcLICharacteristics() {
    const eta_d = this.calcSlopeEfficiency();
    const alpha_m = this.calcMirrorLoss();
    
    // 光子エネルギー hc/λ
    const photonEnergy = (this.h * this.c) / this.lambda;
    
    // 閾値電流の計算(簡易モデル)
    // 実際の閾値電流は利得-キャリア密度関係から求めるが、
    // ここでは閾値利得に比例すると仮定
    const g_th = this.calcThresholdGain();
    const I_th = g_th * 1e-3; // 簡易換算 [A]

    const results = [];
    const dI = (this.I_max - this.I_0) / this.steps;

    for (let i = 0; i <= this.steps; i++) {
      const I = this.I_0 + i * dI;
      let P_out = 0;
      
      if (I > I_th) {
        // P_out = η_d * (hc/λ) / e * (I - I_th)
        P_out = eta_d * (photonEnergy / this.e) * (I - I_th);
      }

      results.push({
        current_mA: I * 1000,  // [mA]
        power_mW: P_out * 1000 // [mW]
      });
    }

    return results;
  }

  // 全計算を実行
  calculate() {
    const alpha_m = this.calcMirrorLoss();
    const g_th = this.calcThresholdGain();
    const eta_d = this.calcSlopeEfficiency();
    const delta_nu = this.calcModeSpacing();
    const liData = this.calcLICharacteristics();

    return {
      mirrorLoss: alpha_m,           // [1/m]
      thresholdGain: g_th,           // [1/m]
      slopeEfficiency: eta_d,        // [W/A]
      modeSpacingHz: delta_nu,       // [Hz]
      modeSpacingNm: (this.lambda**2 / this.c) * delta_nu * 1e9, // [nm]
      liCurve: liData
    };
  }
}

// === 使用例 ===
const params = {
  L_cm: 0.03,        // 共振器長 300μm = 0.03cm
  R1: 0.3,           // 前面反射率 30%
  R2: 0.9,           // 後面反射率 90%
  alpha_i_cm: 10,    // 内部損失 10cm⁻¹
  Gamma: 0.3,        // 光閉じ込め係数
  eta_i: 0.8,        // 内部量子効率 80%
  lambda_nm: 850,    // 波長 850nm
  n: 3.5,            // 屈折率
  I_0_mA: 0,         // 開始電流 0mA
  I_max_mA: 50,      // 最大電流 50mA
  steps: 100
};

const laser = new LaserCavityDesign(params);
const result = laser.calculate();

console.log('=== レーザー共振器 設計結果 ===');
console.log(`鏡面損失 α_m: ${result.mirrorLoss.toFixed(2)} [1/m]`);
console.log(`閾値利得 g_th: ${result.thresholdGain.toFixed(2)} [1/m]`);
console.log(`スロープ効率 η_d: ${(result.slopeEfficiency * 1000).toFixed(2)} [mW/mA]`);
console.log(`縦モード間隔: ${(result.modeSpacingHz / 1e9).toFixed(2)} [GHz] (${result.modeSpacingNm.toFixed(3)} [nm])`);
console.log('\nL-I特性(抜粋):');
result.liCurve.filter((_, i) => i % 20 === 0).forEach(d => {
  console.log(`  電流: ${d.current_mA.toFixed(1)}mA → 出力: ${d.power_mW.toFixed(2)}mW`);
});

数値例で確かめる

実際に上記コードで計算してみましょう。

パラメータ設定:

  • 共振器長:$L = 300,\mu\text{m} = 0.03,\text{cm}$
  • 前面反射率:$R_1 = 0.3$(30%)
  • 後面反射率:$R_2 = 0.9$(90%)
  • 内部損失:$\alpha_i = 10,\text{cm}^{-1}$
  • 光閉じ込め係数:$\Gamma = 0.3$
  • 内部量子効率:$\eta_i = 0.8$
  • 波長:$\lambda = 850,\text{nm}$

計算結果:

まず、鏡面損失:

\alpha_m = \frac{1}{2 \times 0.0003\,\text{m}} \ln\frac{1}{0.3 \times 0.9} = \frac{1}{0.0006} \ln(3.704) \approx 2186\,\text{m}^{-1}

内部損失をm⁻¹に換算:$\alpha_i = 10,\text{cm}^{-1} = 1000,\text{m}^{-1}$

閾値条件:

\Gamma g_{th} = 1000 + 2186 = 3186\,\text{m}^{-1}
g_{th} = \frac{3186}{0.3} \approx 10620\,\text{m}^{-1}

スロープ効率:

\eta_d = 0.8 \times \frac{2186}{1000 + 2186} \approx 0.8 \times 0.686 \approx 0.549\,\text{W/A} = 0.549\,\text{mW/mA}

縦モード間隔:

\Delta\nu = \frac{3\times 10^8}{2 \times 3.5 \times 0.0003} \approx 1.43 \times 10^{11}\,\text{Hz} = 143\,\text{GHz}

波長換算:

\Delta\lambda = \frac{\lambda^2}{c} \Delta\nu = \frac{(850\times 10^{-9})^2}{3\times 10^8} \times 1.43\times 10^{11} \approx 0.34\,\text{nm}

出力例(コード実行結果):

鏡面損失 α_m: 2186.05 [1/m]
閾値利得 g_th: 10620.17 [1/m]
スロープ効率 η_d: 0.55 [mW/mA]
縦モード間隔: 142.76 [GHz] (0.344 [nm])

L-I特性(抜粋):
  電流: 0.0mA → 出力: 0.00mW
  電流: 10.0mA → 出力: 0.00mW
  電流: 20.0mA → 出力: 0.00mW
  電流: 30.0mA → 出力: 0.00mW
  電流: 40.0mA → 出力: 0.00mW
  電流: 50.0mA → 出力: 0.00mW

あれ?出力が出ない?

これは閾値電流が高く(約50mA以上)、シミュレーション範囲内で発振に至っていないことを示しています。実際のデバイスでは、このパラメータでは発振が難しいということです。


シミュレーターで遊ぶ(実験3選)

それでは、実際のシミュレーターでパラメータを変えてみましょう。

実験1:反射率のトレードオフを体感

設定:

  • $L = 300,\mu\text{m}$、$\alpha_i = 10,\text{cm}^{-1}$、$\Gamma = 0.3$
  • $R_1$ を 0.3 → 0.1 → 0.01 と変化

結果の傾向:

$R_1$ 閾値電流 スロープ効率 最大出力
0.3 高い 低い 低い
0.1 中程度 中程度 最大
0.01 非常に高い 高い 低い(発振しない)

なぜ? 反射率を下げると光が外に出やすくなる(スロープ効率UP)が、その分損失が増えて発振しにくくなる(閾値UP)。最適な反射率が存在するんです。

実験2:共振器長を変えると何が起きる?

設定:

  • $R_1 = 0.3$、$R_2 = 0.9$、$\alpha_i = 10,\text{cm}^{-1}$
  • $L$ を 100μm → 300μm → 1000μm と変化

結果:

  • Lを長くする → 縦モード間隔が狭くなり、複数モード発振しやすくなる
  • Lを長くする → 鏡面損失 $\alpha_m$ が減少し、閾値電流が下がる
  • Lを短くする → VCSELのように単一モードになりやすい

実験3:内部損失の影響

設定:

  • $L = 300,\mu\text{m}$、$R_1 = 0.3$、$R_2 = 0.9$
  • $\alpha_i$ を 5 → 10 → 20 cm⁻¹ と変化

結果:

  • 内部損失が2倍になると、閾値電流は約1.5倍に増加
  • スロープ効率は低下(光が外部に出る前に内部で吸収されるため)

教訓: 内部損失の低減が、高性能レーザー設計の鍵です。


現場でハマるポイント

1. 単位系の罠

シミュレーターでは $\alpha_i$ の単位は「cm⁻¹」、$L$ は「cm」です。しかし、実際のデバイスパラメータは「μm」や「nm」で表記されることが多い。

例: $L = 300,\mu\text{m}$ を入力するときは「0.03」と入力。間違えて「300」と入れると、計算結果が1000倍も変わります。

2. 理論値と実測値の乖離

このシミュレーターで得られる値は理想的な理論値です。実際のデバイスでは:

  • 電流注入効率(注入した電子が活性層に届く割合)
  • 熱飽和(高電流で温度が上がり特性が劣化)
  • リーク電流(活性層を通り抜けてしまう電流)

など、様々な要因で性能が低下します。

正しい使い方: 「$R_1$ を5%下げると、閾値はどれだけ増え、出力はどれだけ増えるか」というトレンドの把握に使うこと。

3. 「反射率は高ければ高いほど良い」は誤解

確かに高反射率にすると閾値電流は下がります。しかし、光を取り出すためのミラーの反射率を高くしすぎると、肝心の出力光パワーが出ません。

実例:

  • 光通信用レーザー:$R_1 = 0.1 \sim 0.3$
  • 高出力加工用:$R_1 = 0.01$ 以下
  • VCSEL:$R_1 = 0.99$(上下ミラーとも高反射、ただし共振器長が極短い)

まとめ

今日のポイントを3つにまとめます。

  1. レーザー共振器は「増幅」と「損失」のバランス — 閾値条件 $\Gamma g_{th} = \alpha_i + \alpha_m$ が全ての基本
  2. 反射率には最適値がある — 高すぎても低すぎてもダメ。用途に応じたトレードオフ設計が重要
  3. シミュレーターは「傾向把握」に使う — 絶対値ではなく、パラメータ変更による相対変化を読み取る

そして、ここで紹介した計算はすべて、以下のツールでリアルタイムに体験できます。

レーザー共振器 設計シミュレーター — ブラウザで即動作、登録不要

スライダーを動かすだけで、L-I曲線やスペクトルが動的に変化します。「理論と実装の両方」を理解した今、ぜひ実際に触ってみてください。

NovaSolverでは700以上の工学シミュレーターを無料公開中 👉 一覧はこちら

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?