fullseye

itof_multipath_separate — OPTICS itof op

使い方

等間隔の多周波で測ったフェーザ → 経路ごとの距離と強さ(行列ペンシル)。table を返す。

画素に経路 p(距離 d_p、強さ a_p)の光が入ると、周波数 f のフェーザは m(f) = Σ_p a_p e^{i 4π f d_p / c}。周波数が等間隔 f_k = f_0 + kΔf なら m_k = Σ_p α_p z_p^k(z_p = e^{i 4π Δf d_p / c}、α_p = a_p e^{i 4π f_0 d_p / c})という減衰しない 指数の和になり、行列ペンシル(Hua & Sarkar 1990)で z_p が閉形式に出る:

  1. 粗い距離 d_p = arg(z_p) · c / (4π Δf)(周期 c/(2Δf) の剰余)。
  2. Vandermonde の最小二乗で α_p。|α_p| が強さ。
  3. 細かい距離: 中央の周波数 f_c を原点にした arg(α_p) は周期 c/(2f_c) の剰余を教えるので、粗い距離に 最も近い次数を選んで精密化する(粗い距離の誤差が c/(4 f_c) を越えると次数を誤る —— 雑音が大きいときは depth_coarse も見ること)。

経路は距離の近い順に並べる。経路が 1 本しか無い画素では、2 本目の強さが 0 近くに出る。 ★分けられるのは、2 つの経路の距離の差がおおよそ帯域の分解能 c / (2 F Δf) より大きいときだけ (等間隔 F 周波数の幅が帯域)。それより近い経路は雑音があると 1 本に潰れる。

phasors は :func:itof_phase_amplitude の表(phasor と周波数を使う)か、複素の (F, ...) 配列。 pencil はペンシルの幅 L(既定 F // 2、n_paths <= L <= F − n_paths)。

返す dict: depth (P, ...)、depth_coarse、amplitude (P, ...)、residual(当てはめの相対残差)、 ambiguity_coarse(c/(2Δf))、resolution(c/(2FΔf))。

Raises ValueError: 周波数が等間隔でない・2·n_paths 個未満 / 形が合わない / n_paths が 1〜8 でない / pencil が範囲外 / 画素数が上限を超える。

ファミリ共通の入力契約(fail-closed)

optics の全 op は入力を検証してから計算する(黙って通さない):

詳しい使い方ガイド

参考(サンプルデータ・文献)

実行できる例(この op を実際に呼ぶ検証済みサンプル)

型が繋がる次の op(table を入力に取れる)

abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd

同カテゴリ(itof)

itof_capture · itof_phase_amplitude · itof_noise_budget · itof_unwrap_multifreq · itof_unwrap_error_rate · itof_flying_pixel_mask · itof_wiggling_correct


Provenance: itof.py — OPTICS operator registry. この per-op ノートは tools/opdocs.py md が自動生成(手編集しない)。

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.