エンジニアの皆さん、こんにちは。今日は「レーザー共振器」という、一見すると難解なテーマを扱います。
でも、ちょっと待ってください。あなたが今使っている光ファイバー通信、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つにまとめます。
- レーザー共振器は「増幅」と「損失」のバランス — 閾値条件 $\Gamma g_{th} = \alpha_i + \alpha_m$ が全ての基本
- 反射率には最適値がある — 高すぎても低すぎてもダメ。用途に応じたトレードオフ設計が重要
- シミュレーターは「傾向把握」に使う — 絶対値ではなく、パラメータ変更による相対変化を読み取る
そして、ここで紹介した計算はすべて、以下のツールでリアルタイムに体験できます。
▶ レーザー共振器 設計シミュレーター — ブラウザで即動作、登録不要
スライダーを動かすだけで、L-I曲線やスペクトルが動的に変化します。「理論と実装の両方」を理解した今、ぜひ実際に触ってみてください。
NovaSolverでは700以上の工学シミュレーターを無料公開中 👉 一覧はこちら