自拍距離計：數值分析成果包
資料性質：所有 results 及 filter_results 內數據均為數值模擬或計算檢查，沒有手機或真人實測。

一、重算
安裝 Python 3.12、numpy、matplotlib。
可在終端執行：python -m pip install numpy==2.3.5 matplotlib==3.10.8
然後依次執行：python run_simulation.py
python run_filter_study.py
固定參數見 parameters.json；固定亂數種子 20261030，NumPy PCG64。
若版本不同，浮點末位及繪圖外觀可能略有差異。
run_simulation.py 自動建立 results，重新計算表格、圖及 checks.json。
若另有 Node.js，可執行 node check_website.mjs。
它會把 Python 結果與隨包附上的網站公式程式 website_core.mjs 比較；不是重算 Python 模擬的必要條件。

二、研究問題與結論的範圍
A：把前後兩張平行虛擬卡片的 3D 頂點投影成 2D，依像素中心是否落在卡片內計算整數寬度。
每個距離採 16 個水平次像素偏移，再交換左右位置，共 32 個設定；加入同深度對照，合共 384 個設定。
這些設定不是獨立實驗樣本。線段是取樣設定的最小—最大值，不是信賴區間。
相機 1280×720，fx=fy=1000 px；卡片 6.3×8.8 cm；中心分別在 x=−5 及 +5 cm。
卡片尺寸及相機內參只是設定值，不代表任何手機或實物測量。
沒有鏡頭畸變、影像模糊、JPEG 壓縮、光照、追蹤錯誤，也沒有真實人頭模型。
25、60 cm 的影像寬度恰為整數，這些設定下取樣偏差為零，不表示真實相機沒有誤差。
同深度對照的整數寬度仍可能因水平次像素位置而不同，不能把這種差異解讀為透視效應。
投影與解析式吻合只驗證程式的內部一致性，不是對真實物理或真人模型的獨立實驗驗證。

B：假定 C=1500 px·cm、Z0=50 cm、u_Z0=0.5 cm、u_p0=0.2 px。
σ_p 分別取 0.2、0.5、1.0 px，代表輸出虹膜直徑統計量的不確定度；不是已量得的單幀或 15 幀中位數噪聲。
輸入誤差以中心為零、在 ±5 個標準差處截斷的常態分布抽樣；截斷後標準差與標稱尺度有極小差異。
每個條件 20,000 次計算抽樣。相同抽樣編號共用校準誤差，以保留不同距離間的共同校準相關性。
後續直徑誤差與校準輸入獨立。沒有模擬影格時序或 MediaPipe 的偵測失敗。
2.5%、97.5% 分位數是指定模型下的誤差分布範圍，不能稱作手機實際準確度的 95% 信賴區間。
這些結果不能用來宣稱已達成 MAPE < 10% 的工程實測目標。

B2：假設有效尺度因子隨距離線性漂移，在 120 cm 達 ±3%，在校準點 50 cm 為零。
此為敏感度情境，並非手機自動對焦已被量得有 3% 變化。

C：ε=7.5%、k=5.4、預覽 Pmin=90 px、d=0、σ_p=0.5 px。
六個情境改變 C、Δ 與容許相對標準不確定度 δ；其餘校準設定沿用 B。
C 改變時以 p0=C/Z0 重新計算校準項 c，沒有把 c 不當固定。
校準底限超過 δ 時，程式用上限 0 作「沒有可行正距離」的內部標記，並非 0 cm 可拍攝。
單純把影像插值放大不能視為已增加有效解析度。

三、檔案及欄位
projection_all.csv：z_cm 前方距離；depth_cm 深度差；swapped 左右交換；phase_px 水平主點偏移；
front_width_px/back_width_px 虛擬影像整數寬度；continuous_ratio 連續投影比；analytic_ratio 解析倍率；
raster_ratio 虛擬像素倍率；raster_error_percentage_points = 100×(raster_ratio−analytic_ratio)。
projection_summary.csv：每距離 32 個設定的上下界及最大絕對偏差。
uncertainty_summary.csv：每個假設噪聲與距離的偏差、相對標準差、MAPE、誤差分位數及一階預測。
relative_sd_pct = 100×sd(Z_est)/Z_true；bias_pct = 100×mean(Z_est/Z_true−1)。
scale_drift.csv：假定有效尺度漂移下的系統偏差。
interval_summary.csv：六種假設情境的下限、像素上限、不確定度上限、校準阻擋與是否為空。
monte_carlo_draws.npz：全部計算抽樣，沒有挑選「好看」的數值；可用 numpy.load 讀取。
p_draw_px 與 Z_estimated_cm 的維度為 (3 個 σ, 7 個距離, 20000 個抽樣)；對應次序在同檔案給出。
Z0_draw_cm、p0_draw_px、C_draw_px_cm 是共用的 20000 組校準抽樣。
summary.json：網站及文件使用的數值來源。
checks.json：投影、有限差分、正值及區間交集的計算檢查。
website_checks.json：網站 JavaScript 與 Python 結果的交叉檢查。
sha256.json：重現所需程式、參數和主要輸出之雜湊值。
各表的 data_source 欄保留資料類型，不與實驗記錄混用。

四、方法來源
JCGM (2008). Evaluation of measurement data — Supplement 1 to the “Guide to the expression of uncertainty in measurement” — Propagation of distributions using a Monte Carlo method. DOI: 10.59161/JCGM101-2008.
已核對 BIPM 官方說明頁；本次採固定抽樣數作探索性計算，未聲稱完成該文件的全部數值容差驗證程序。
NIST. NIST TN 1297: Appendix A. Law of Propagation of Uncertainty (1994 edition).
https://www.nist.gov/pml/nist-technical-note-1297/nist-tn-1297-appendix-law-propagation-uncertainty
已核對官方網頁的一階傳播式及協方差項。

五、工作紀錄
本輪程式、計算、圖表及初步文字由 AI 協助產生並在計算環境執行；未由學生親自完成手機或真人測試。
學生原有的模型推導與原型進度依其提供的記錄敘述；後續實際修改與操作應另記錄。
不要把 20,000 次計算抽樣填作實驗次數、參與者人數或手機測試數量。

六、平滑與移動研究 D（v2.2 新增）
執行 run_filter_study.py；參數見 filter_parameters.json，種子 2026103002。
C 精確為 1500 px·cm，本組不加入校準誤差，以分離平滑的貢獻。
σ_frame=0.5 px 是單幀噪聲，不能與 B 組的輸出 σ_p 畫等號。
每個窗口含 15 幀；窗口彼此獨立，內部誤差為 rho=0、0.5、0.9 的 AR(1) 遞推。
初值及創新項由 ±5 SD 截斷常態抽樣；截斷造成的微小變異變化已納入協方差核對。
每條件 20000 個窗口，均值／中位數／末幀參考共用輸入；不同 Z 和有無異常值亦共用基底噪聲。
恰一幀 +5 px 是人工設定的壓力情境，不代表實際發生率。靜止濾波比較未套用品質門檻。
filter_comparison.csv：Z_cm 設定距離；rho 相鄰相關；outliers_per_window 異常幀數；
method 方法；output_diameter_sd_px 輸出直徑標準差；distance_bias_cm 平均距離偏差；
rmse_cm 均方根誤差；rmse_mc_se_cm 為 RMSE 的蒙地卡羅標準誤近似；abs_error_q95_cm 為絕對誤差 95% 分位數。
paired_comparison.csv：同一輸入下 median15 減 mean15 的平方誤差平均差（cm²），以及計算抽樣標準誤。
filter_inputs.npz：frame_error_px 形狀為 (3 個 rho,20000 個窗口,15 幀)，未混入異常值；
outlier_position 形狀為 (3,20000)，各窗口欲加入異常值的索引（0 至 14）。
輸入 p=C/Z+frame_error_px；有異常值情境在指定位置再加 5 px。這些是計算輸入，沒有影像檔或真人影格。
covariance_checks.csv：平均值的理論標準差與模擬標準差、經驗相鄰相關。
motion_windows.csv：無噪聲恆速移動 30 情境，含完整 15 個直徑；speed_cm_s 正值為遠離相機；
current_Z_cm 當前設定距離；window_span_s 最舊至最新影格時差；mid_frame_age_s 中間時間影格年齡；
median_distance_cm 中位數距離；bias_cm 對當前位置的偏差；robust_cv 為 1.4826 MAD/median；
passes_stability_gate 僅表示通過 3% 波動門檻，其他臉部與姿態條件假設有效。
不包含運算、呈現延遲，沒有使用噪聲條件來修正真實相機資料。
website_filter_checks.json 是合成特徵點送入 app.mjs 實際 consume 函式所得的軟件檢查記錄。
motion_test_cases.json 是 motion_windows.csv 的便於程式讀取版本；不是額外數據。
可在整個網站 ZIP 根目錄執行 node verification/test-state.mjs 重做網站流程檢查。
filter_results/sha256.json 保存原計算程式與結果雜湊；新增的網站檢查另見根目錄 delivery_sha256.json。

方法來源：Nien-Fan Zhang (2006). Calculation of the uncertainty of the mean of autocorrelated measurements. Metrologia.
DOI: 10.1088/0026-1394/43/4/S15
已核對 NIST 官方摘要 https://www.nist.gov/publications/calculation-uncertainty-mean-autocorrelated-measurements ，未核對論文全文。
本組最主要結論：中位數在所設異常值情境較有優勢；高相關性降低平滑收益；通過波動篩選不足以證明靜止。
