residue_crt — RESIDUE robust op

• 데이터 종류: matrix × signal → table

• 호출: import fullseye as fs; fs.ledger.residue_crt(residues, periods, weights=None, lo=0.0, hi=None, on_outside='warn') -> 'dict'(구현을 직접 호출하려면 import residue; residue.residue_crt(residues, periods, weights=None, lo=0.0, hi=None, on_outside='warn') -> 'dict', 원장에서 가져오려면 opsresidue.get("residue_crt"))

사용법

실수 주기에 대한 가중 강건 중국인의 나머지 정리 -> dict.

[lo, hi) 안에서 v ≡ residues[i] (mod periods[i]) 를 푼다. residues 는 밴드 축이 맨 앞이고 모양은 (N,) 또는 (N, ...) —— 뒤의 각 원소는 독립적으로 푼다(한 화소, 한 표본). weights(같은 모양 또는 (N,))는 각 밴드를 얼마나 믿을지를 나타낸다 —— 보통 위상을 낸 두 진폭의 곱이며, 대비가 없는 밴드는 표를 갖지 않는다.

방법: 표본마다 밴드 하나를 기준(reference)으로 삼는다(Wang & Xia 2010, IV-A 절: 잡음 분산이 가장 작은 나머지. 밴드 i 의 분산은 p_i^2 / w_i, 즉 위상 잡음이 같고 가중치로 줄어든다고 본다. 분산이 같은 밴드들 가운데서는 나머지 mod Γ 가 공통 나머지에 가장 가까운 것, 식 (55)/(58)). 범위 안의 모든 후보 v = r_ref + k p_ref 를 페이저 일치도 sum_i w_i cos(2 pi (v - r_i)/p_i)(von Mises 위상 잡음의 최대우도 기준)로 채점하고, 가장 좋은 후보를 부호 있는 잔차의 역분산 가중 평균으로 정밀화한다. 후보는 기준 자신의 오차를 지니므로 [lo, hi) 밖 Γ/4 까지의 후보도 받아들인다(같은 값이 두 번 나올 만큼 넓히지는 않는다). 2026-10-15 까지는 항상 가장 긴 주기가 기준이었다: 위상 잡음이 같으면 그것은 v 단위로 잡음이 가장 큰 나머지이며, 간접 ToF(16/80/120 MHz, σ_φ 0.33 rad)에서 차수 오류율은 0.556(모든 가설을 시도하면 0.116)이었다. 지금은 0.116(공개 원시 데이터 10 프레임: 0.293 -> 0.131, 전수 복호와 같음).

보장(Wang & Xia 2010, 식 (47)): 주기를 Γ M_i(Γ 는 공통 인수, M_i 는 정수)로 쓴다. 모든 나머지 오차가 Γ/4 미만이면 어느 밴드를 기준으로 하든 접힘 정수는 정확하고 |value - v| < Γ/4 이다: 틀린 후보는 적어도 한 밴드를 Γ 의 0 이 아닌 배수만큼 옮겨 그 밴드의 페이저 항을 엄밀히 낮춘다(가중치 0 인 밴드로만 두 후보가 구별되면 margin 은 0). 위상으로 말하면 밴드 i 가 허용되는 오차는 2 pi (Γ/4) / p_i —— 가장 긴 주기에서 가장 작다. 나머지 mod Γ 가 Γ/2 보다 짧은 호에 들어가지 않는 표본은 그 보장 밖에 있음이 증명된다(within_bound 가 False. 역은 보장되지 않는다 —— 정확히 Γ 하나만큼의 오차는 검출할 수 없다). 그때의 처리는 on_outside 로 정한다: "warn"(기본, ResidueBoundWarning), "raise"(ValueError), "nan"(그 표본의 값은 NaN, margin 은 0), "flag"(within_bound 만). 통약할 수 없는 주기(hi 를 명시)에는 Γ 도 보장도 없다: 모든 표본이 보장 밖이다.

반환값 {"value", "score", "margin", "residual", "n_candidates", "unambiguous_range", "gamma", "error_bound", "phase_bound_rad", "reference", "within_bound"}: score 는 [-1, 1](1 = 모든 밴드가 정확히 일치), margin = 최선과 차선 점수의 차(작으면 거의 동점 —— 믿지 말 것), residual 은 밴드별, v 단위. gamma = Γ, error_bound = Γ/4, phase_bound_rad 는 밴드별, reference = 표본마다 쓴 밴드 번호. hi 의 기본값은 lo + 주기의 최소공배수(통약 가능할 때). 그보다 넓은 범위는 거부한다 —— 그 안의 두 값이 같은 나머지를 갖기 때문이다.

정확성: 서로소인 정수 주기와 정수 나머지는 residue_integer_crt 를 정확히 재현한다.

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• poc_itof_multifreq — py -3.11 examples/poc_itof_multifreq.py

• poc_residue_crt — py -3.11 examples/poc_residue_crt.py

타입이 이어지는 다음 연산자(table 를 입력으로 받는 것)

—

같은 카테고리(robust)

residue_fault_locate


*Provenance: residue.py — RESIDUE 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

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