itof op• Data kinds: table → table
• Call: import fullseye as fs; fs.ledger.itof_wiggling_correct(phase, frequencies_hz=None, waveform='square', n_phases=4, calibration=None, n_harmonics=2) (implementation को सीधे call करना हो तो import itof; itof.itof_wiggling_correct(phase, frequencies_hz=None, waveform='square', n_phases=4, calibration=None, n_harmonics=2), registry से लेना हो तो opsoptics.get("itof_wiggling_correct"))
harmonics से आई cyclic error (wiggling) को ठीक करके phase और depth। table लौटाता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
変調と復調が矩形波だと、相関は三角波(waveform="square")になり、K 段の推定は奇数次の高調波を基本波に折り返す。4 段なら真の位相 φ が第 1 象限にあるとき u = 2φ/π として推定は atan(u / (1 − u)) になり、誤差は周期 π/2 で波打つ(最大 ±0.071 rad 程度、20 MHz で ±8.5 cm)。
• 模型(*calibration* なし): *waveform* の相関で「真の位相 → 推定の位相」の表を作り(単調でなければ拒否)、逆に引く。
• 較正(*calibration* = (measured_phase, true_phase)、同じ周波数の 1-D の組): 誤差 e(φ_m) を c_0 + Σ_{j=1..J} (a_j cos(jKφ_m) + b_j sin(jKφ_m))(周期 2π/K の調和、J = *n_harmonics*)で最小二乗に当て、φ_m − e(φ_m) を返す(c_0 は距離のオフセット = 系の遅延)。
*phase* は itof_phase_amplitude の表か、(F, ...) の位相の配列(周波数ごとに同じ補正)。
返す dict: phase(補正後、[0, 2π))、depth(周波数が分かれば、折り返したまま)、correction(足した量)、model("lut" か "fit")、coefficients(較正のとき)、fit_rms(較正の残差 [rad])。
Raises ValueError: 位相が非有限 / waveform が不正・推定が単調でない / 較正の組の形が合わない・未知数より少ない / n_harmonics が 1〜8 でない。
optics के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• Unit argument के नाम में ही लिखी होती है — _mm / _um / _deg / _mrad। mm और µm की गड़बड़ी crash नहीं करती, बल्कि "सही दिखने वाला पर गलत उत्तर" देती है, इसलिए नाम से इसे रोका जाता है। मान के आकार से unit का अनुमान बिल्कुल नहीं लगाया जाता।
• String से ValueError — float('50') सफल हो जाता है, इसलिए बिना parse किया config value length के रूप में निकल जाता (मापा गया: thin_lens('50', '200') सही दिखने वाला 66.667 mm लौटा रहा था)। bool को भी True == 1 वाले implicit promotion के रूप में अस्वीकार किया जाता है।
• complex / masked array से ValueError (केवल real-valued slots; imaginary part को चुपचाप छोड़ना या mask हटाना अस्वीकार)। हर input पर NaN/Inf से ValueError।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: focal length 0, radius of curvature 0, refractive index <= 0, पूरी तरह opaque aperture (सब 0, इसलिए normalisation 0/0), ऐसा PSF जिसका योग <= 0 हो, S0 = 0 वाला Stokes vector, और front focal point पर रखा object (image अनंत पर)।
• केवल 2 ops non-finite value लौटाते हैं, और वह भी contract के रूप में लिखा हुआ: depth_of_field hyperfocal distance से आगे far_mm = inf (hyperfocal distance की परिभाषा यही है) और gaussian_beam waist पर wavefront_radius_mm = inf (plane wavefront की radius of curvature)। दोनों साथ में एक finite साथी (far_is_infinite / curvature_per_mm) भी लौटाते हैं। इसके अलावा कोई भी चुपचाप आया NaN/Inf अंदर ही पकड़ा जाता है और ValueError देता है — "float64 overflow हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता।
• Size की सीमा: generate होने वाले grid के लिए optics.MAX_GRID (4096), दिए गए field/PSF/aperture के लिए optics.MAX_FIELD_ELEMENTS (2^24), ABCD element chain के लिए optics.MAX_SYSTEM_ELEMENTS (1024), Zernike के लिए MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25)। छोटे argument से बहुत बड़ा internal allocation होने वाले रास्तों (मापा गया: n_max=40 × 4096² पर 108 GB) को fail-closed ढंग से बंद किया गया है।
• भौतिक रूप से असंभव states भी अस्वीकार: degree of polarisation > 1 वाला Stokes vector, ऋणात्मक transmittance, ऋणात्मक intensity, और n-|m| odd जैसे अमान्य Zernike indices।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• poc_itof_multifreq — py -3.11 examples/poc_itof_multifreq.py
table को input के रूप में लेते हैं)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_multipath_separate · itof_flying_pixel_mask
*Provenance: itof.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.