fullseye

surface_psd — ROUGHNESS measure op

使い方

高さ場のパワースペクトル密度。(q, C) を返す。規約を引数で明示する。

引数 z 高さ場(平均は内部で引く。DC ビンは返さない)。 dx, dy 標本間隔。dy=None は正方画素。 kind "areal" … 2 次元 PSD C_2D(q) の環平均。 "radial" … 1 次元動径 PSD C_1D(q) = 2π q C_2D(q)

規約(ここを書かないと較正なしでは読めない ―― 既存の radial_power_spectrum はこれが docstring に無い)

★ 実測 —— どちらの規約でも H は較正なしで戻る surface_synth_psd で H を仕込み、q ∈ [2/λ_hi, 0.4/dx] で対数対数の 直線を当てはめて H を戻した(512², 帯域 2-64 µm):

  仕込んだ H   面 PSD の傾き   戻した H   動径の傾き   戻した H   傾き差
     0.30        -2.600        0.300      -1.600       0.300     1.0000
     0.50        -3.000        0.500      -2.000       0.500     1.0000
     0.80        -3.600        0.800      -2.600       0.800     1.0000
     0.95        -3.901        0.950      -2.901       0.950     1.0000

誤差は 4 例とも ±0.0003 以内、二つの規約の傾き差はどの H でも 厳密に 1.0000。較正なしで読める。

★ ここは PoC の測り直しで結論が変わった箇所。PoC は既存 radial_power_spectrum一律 -0.013(H の 1.6 %)の系統誤差を 見つけ、「環平均の離散化による系統誤差」と結論した。同じ検算をこの 実装でやると誤差が消える。原因を切り分けたところ、環の代表 q に ビン番号 i·Δq を使うか、環内の q の平均を使うかの差だった —— ビン番号だと -0.0007〜-0.0010 の負のずれが出る(実測、同じ面・同じ 当てはめ帯域)。向きは PoC の観測と同じだが大きさは 1/15 なので、 -0.013 の残りは環平均の離散化ではなく、その関数の他の実装差に由来する。 この関数は環内の q の平均を返す。

★ 落とし穴 —— Nyquist を超える環は「角だけ」で出来ている 正方格子の最大 |q|√2/(2 dx) だが、q > 1/(2 dx) の環は 周波数平面の四隅しか含まない。実測(512²): 全 362 ビンのうち上位 107 ビン(29.6 %)が Nyquist 超。環内の点数が理想値 2πq/Δq に対して どれだけ欠けるかは、Nyquist 以下でも最小 0.838 倍まで落ちる (格子の離散化)が、Nyquist 超では 0 まで落ちる。 傾きの当てはめには Nyquist 超を使わないこと。

★ Parseval の検算をどこまで信じてよいか(実測、512²、Sq²=6.400e-03)

fail-closed

詳しい使い方ガイド

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

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

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

同カテゴリ(measure)

surface_params · profile_params


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

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