信号・音響・1D ウィング — 展示キャプション原稿
生成元: tools/gen_wing1d_gallery.py(py -3.11 tools/gen_wing1d_gallery.py)。
画像はすべて Fullseye の imagedraw op と numpy 合成で描いており(matplotlib 不使用)、
図に焼いた数値は 1 つ残らずその場で op を呼んで得た実測値である。乱数は seed 固定、
掃引格子も固定なので再生成でバイト列が一致する(--verify で検査)。
束ね方は tools/exhibit_tile.py の 3 種に従う ―― コマ送り GIF(flipbook、
掃引と工程。各コマに工程名と i/N の進捗バーが焼いてあるので止めても意味が分かる)、
タイル(contact_sheet、同じ軸にパラメータ違いを当てた小さなプロットを束ねる)、
原寸 1 枚(主張そのもの・軸と数値が読めないと意味が無い図)。静止画の Markdown は
すべて サムネイル表示 + クリックで原寸 の形で出してある。
1. 欠陥周波数は生スペクトルに無い

↑ 欠陥周波数は生スペクトルに無い ―― 共振 3000 Hz を欠陥率 107 Hz で振幅変調した軸受信号(25600 Hz × 1 s、変調度 0.5)。上の生スペクトルは 107 Hz に 4.292e-16 しか無く、エネルギーは搬送波 1.000000 と側帯波 0.250000 / 0.250000(= m/2 ちょうど)に居る。下の包絡線スペクトルは同じ記録から 107.000000 Hz に振幅 0.499677 = 変調度そのものを返す(band_fraction 0.999853)。 使用 op: synthesize_bearing_signal, spectrum, envelope_spectrum。
この図に焼いた実測値
```json
{
"rate_hz": 25600.0,
"duration_s": 1.0,
"carrier_hz": 3000.0,
"defect_hz": 107.0,
"modulation": 0.5,
"resolution_hz": 1.0,
"raw_amplitude_at_defect": 4.2916623928040632e-16,
"raw_amplitude_at_carrier": 0.9999999999999983,
"raw_sideband_lower": 0.2499999999999956,
"raw_sideband_upper": 0.24999999999999925,
"envelope_peak_freq": 107.0,
"envelope_peak_amplitude": 0.4996770222507938,
"envelope_band_fraction": 0.999853069632174,
"envelope_prominence": 10018.617709142389
}
```
2. スペクトルカートシスが復調帯域を選ぶ

↑ スペクトルカートシスが復調帯域を選ぶ ―― 共振の位置を人が知らないとき、どの帯域で復調するかを機械に決めさせる。STFT 平面(129 bin × 199 内側フレーム、全 203 フレームのうち)にスペクトル尖度を重ね、幅 800 Hz の復調帯域を掃引した。SK の最大は 3.1037 @ 2400 Hz(窓 64 = 2.50 ms、bin 400 Hz、推定器の標準偏差 0.1001)で、その帯域の band_fraction は 0.4495。帯域選びが効いていることが数で出ている: 掃引した 24 帯域のうち欠陥率を返すのは 9 本だけで、残り 15 本は 6〜428 Hz のもっともらしい別の数を返す(例外も NaN も出ない)。ピーク周波数だけでは区別できず、分けるのは band_fraction である ―― 当たりは 0.1732〜0.6830、外れは 0.1473〜0.1645。 使用 op: synthesize_bearing_signal, stft, spectral_kurtosis, envelope_spectrum。
この図に焼いた実測値
```json
{
"sk_max_kurtosis": 3.1037019867062785,
"sk_max_freq": 2400.0,
"sk_win": 64,
"sk_window_ms": 2.5,
"sk_bin_hz": 400.0,
"sk_frames": 1597,
"sk_noise_sigma": 0.10009388204226968,
"stft_bins": 129,
"stft_interior_frames": 199,
"stft_total_frames": 203,
"band_width_hz": 800.0,
"best_band_centre": 3034.782608695652,
"best_band_fraction": 0.6829578565909229,
"bands_total": 24,
"bands_returning_defect_rate": 9,
"bands_returning_something_else": 15,
"miss_peak_freq_range": [
6.0,
428.0
],
"hit_band_fraction_range": [
0.17317467053263255,
0.6829578565909229
],
"miss_band_fraction_range": [
0.14732009808588267,
0.16450564153139283
],
"sk_band_fraction": 0.4494574621219424,
"sk_band_peak_freq": 107.0,
"worst_band_fraction": 0.14732009808588267
}
```
3. 窓長を間違えると負の尖度が出る

↑ 窓長を間違えると負の尖度が出る ―― 衝撃が 9.346 ms ごとに来る軸受信号(真の共振 3000 Hz)で窓長を 16 から 512 まで掃引した。窓が衝撃の間隔より長くなるとどのフレームにも衝撃が 1 個ずつ入り、その帯域は構成上「定常」に見える。窓 256(10.00 ms)で最大 SK は -0.1269 ―― 負の値を、共振から 9200 Hz 離れた 12200 Hz で報告する。例外は出ない。窓を掃引することはこの op の使い方の一部であって最適化ではない。 使用 op: synthesize_bearing_signal, spectral_kurtosis。
この図に焼いた実測値
```json
{
"impact_period_ms": 9.345794392523365,
"true_resonance_hz": 3000.0,
"table": [
{
"win": 16,
"ms": 0.625,
"max": 29.57722851209217,
"at": 6400.0,
"bin": 1600.0,
"frames": 6397
},
{
"win": 24,
"ms": 0.9375,
"max": 19.135220536597547,
"at": 1066.6666666666667,
"bin": 1066.6666666666667,
"frames": 4263
},
{
"win": 32,
"ms": 1.25,
"max": 12.854675024003651,
"at": 1600.0,
"bin": 800.0,
"frames": 3197
},
{
"win": 48,
"ms": 1.875,
"max": 7.878291532367296,
"at": 533.3333333333334,
"bin": 533.3333333333334,
"frames": 2130
},
{
"win": 64,
"ms": 2.5,
"max": 5.379627792794402,
"at": 2000.0,
"bin": 400.0,
"frames": 1597
},
{
"win": 96,
"ms": 3.75,
"max": 2.9401849728142526,
"at": 2400.0,
"bin": 266.6666666666667,
"frames": 1063
},
{
"win": 128,
"ms": 5.0,
"max": 1.660833522213224,
"at": 1600.0,
"bin": 200.0,
"frames": 797
},
{
"win": 192,
"ms": 7.5,
"max": 0.45085212215713133,
"at": 8666.666666666668,
"bin": 133.33333333333334,
"frames": 530
},
{
"win": 256,
"ms": 10.0,
"max": -0.12685129658601135,
"at": 12200.0,
"bin": 100.0,
"frames": 397
},
{
"win": 384,
"ms": 15.0,
"max": -0.5784282950393185,
"at": 266.6666666666667,
"bin": 66.66666666666667,
"frames": 263
},
{
"win": 512,
"ms": 20.0,
"max": -0.4994481614669002,
"at": 800.0,
"bin": 50.0,
"frames": 197
}
],
"negative_windows": [
{
"win": 256,
"ms": 10.0,
"max": -0.12685129658601135,
"at": 12200.0
},
{
"win": 384,
"ms": 15.0,
"max": -0.5784282950393185,
"at": 266.6666666666667
},
{
"win": 512,
"ms": 20.0,
"max": -0.4994481614669002,
"at": 800.0
}
]
}
```
4. 次数比分析 — 角度領域で立場が逆転する

↑ 次数比分析 — 角度領域で立場が逆転する ―― 600 → 1800 rpm の走行記録(4 s、5000 Hz、次数 1.0 と 3.5、固定共振 400 Hz、計 79.9940 回転)を 1.2 s の窓で滑らせる。素朴なスペクトルでは次数 3.5 が 0.070203(真値 1.0 の 7 %)まで潰れ、−3 dB 幅は 66.50 Hz に広がる。角度領域に置き直すと同じ成分が 0.999371、幅 0 bin (0.00000 次数)。逆に 400 Hz の固定共振は次数軸では平均回転数で次数 20.00 へ散る(振幅 0.025386)。この逆転が診断そのもの。 使用 op: synthesize_speed_ramp, spectrum, angular_resample, order_spectrum。
この図に焼いた実測値
```json
{
"rpm_start": 600.0,
"rpm_end": 1800.0,
"duration_s": 4.0,
"rate_hz": 5000.0,
"total_revolutions": 79.9940001,
"ordinary_order35_amp": 0.07020339787092662,
"ordinary_order35_hz": 101.5,
"ordinary_order35_width_hz": 66.5,
"order_spectrum_order35_amp": 0.9993710550504145,
"order_spectrum_order35_width": 0.0,
"order_spectrum_order35_bins": 1,
"resonance_order_at_mean_rpm": 20.00050001250031,
"resonance_amp_in_order_domain": 0.025386071643316462,
"window_s": 1.2,
"frames": 30,
"shaft_hz_first": 12.999500000000001,
"shaft_hz_last": 26.9995
}
```
5. 軸受の幾何から欠陥周波数

↑ 軸受の幾何から欠陥周波数 ―― 1800 rpm、ピッチ径 40 mm の軸受で、転動体数 → 接触角 → 転動体径の順に掃引した(36 フレーム)。BPFO は 84.0000 → 177.8261 Hz、BPFI は 126.0000 → 270.3260 Hz まで動く。全フレームで BPFO + BPFI − N·f_r の最大絶対値は 0.000e+00、BPFO − N·FTF は 0.000e+00 ―― float64 で厳密にゼロで、これは d と D を取り違えると即座に壊れる恒等式である。数表からではなく幾何から再導出しているので、こう書ける。 使用 op: bearing_defect_frequencies。
この図に焼いた実測値
```json
{
"rpm": 1800.0,
"pitch_diameter_mm": 40.0,
"frames": 36,
"first": {
"n_elements": 7,
"element_diameter": 8.0,
"contact_angle_deg": 0.0,
"ratio": 0.2,
"shaft_hz": 30.0,
"ftf_hz": 12.0,
"bpfo_hz": 84.0,
"bpfi_hz": 126.0,
"bsf_hz": 72.0
},
"last": {
"n_elements": 14,
"element_diameter": 15.0,
"contact_angle_deg": 40.0,
"ratio": 0.28726666616961677,
"shaft_hz": 30.0,
"ftf_hz": 10.691000007455747,
"bpfo_hz": 149.67400010438047,
"bpfi_hz": 270.32599989561953,
"bsf_hz": 36.69911450031176
},
"max_abs_identity_1": 0.0,
"max_abs_identity_2": 0.0,
"bpfo_range": [
84.0,
177.8261333890029
],
"bpfi_range": [
126.0,
270.32599989561953
]
}
```
6. A 特性・C 特性の重み付け ―― 1 kHz は構成上ちょうど 0 dB

↑ A 特性・C 特性の重み付け ―― 1 kHz は構成上ちょうど 0 dB ―― 重み付け曲線は公表オフセット定数を足すのではなく自身の 1 kHz 値で割って作ってあるので、A(1000) も C(1000) も丸めではなく Python の float として厳密に 0.0 になる(実測 == 0.0 は True / True)。純音を 34 点掃引して equivalent_level の重み付き差 L_A − L_Z を曲線値 A(f) と突き合わせると、最大差は 7.11e-15 dB(C 特性は 4.88e-15 dB)。振幅 1 の正弦の L_eq(Z) は閉形式 10log10(A²/2) = -3.010300 dB で、実測もその値。ただしこれは音が bin 中心(記録に整数周期入る)にある場合の話で、同じ音を 1 Hz ずらすと同じ差が 21.0 Hz で 2.86 dB まで開く(図の下段、赤い曲線)。矩形窓の漏れ込みが 1 kHz 付近では 0 dB で重み付けされるため、A 特性が急峻な低域ほど実際より大きい値が返る。例外も NaN も出ない。 使用 op: weighting_response, apply_weighting, equivalent_level。
この図に焼いた実測値
```json
{
"a_at_1k": 0.0,
"c_at_1k": 0.0,
"a_at_1k_is_exact_zero": true,
"c_at_1k_is_exact_zero": true,
"leq_z_closed_form_db": -3.010299956639812,
"leq_z_measured_range": [
-3.010299956639841,
-3.0102999566398
],
"max_abs_a_mismatch_db": 7.105427357601002e-15,
"max_abs_c_mismatch_db": 4.884981308350689e-15,
"bin_hz": 2.0,
"off_bin_offset_hz": 1.0,
"off_bin_max_abs_a_mismatch_db": 2.860008933302616,
"off_bin_worst_freq_hz": 21.0,
"n_tones": 34,
"rate_hz": 48000.0,
"duration_s": 0.5,
"sample_points": {
"20.0": {
"A": -50.39042947681086,
"C": -6.218824484255237
},
"68.0": {
"A": -24.957730538737856,
"C": -0.7009469720092589
},
"228.0": {
"A": -9.544886650342692,
"C": -0.011744795957637682
},
"766.0": {
"A": -0.9765777140127547,
"C": 0.02141634305233592
},
"2584.0": {
"A": 1.2696291823486323,
"C": -0.3201711900758198
},
"8714.0": {
"A": -1.6153870384934494,
"C": -3.521450393344838
}
}
}
```
7. funct1d の解析真値

↑ funct1d の解析真値 ―― 答えが先に分かっている入力だけで組んだ 1 枚。derivate_funct_1d(sin)/dx と cos の最大差は 1.008e-04(格子 dx = 0.024592、中心差分は 2 次なので残差は dx² で効く)。zero_crossings_funct_1d が返す 3 個の交差は、線形内挿すると 1.000000π, 2.000000π, 3.000000π ―― 整数倍からの最大ずれ 7.397e-08。減衰振動からは周期 0.199500 s(真値 0.200000)、半周期 0.100000 s(真値 0.100000)、時定数 0.406307 s(真値 0.4)、遅延 25 サンプル(真値 25、微分で白色化してから照合)が戻る。 使用 op: derivate_funct_1d, integrate_funct_1d, zero_crossings_funct_1d, local_min_max_funct_1d, smooth_funct_1d_gauss, abs_funct_1d, get_pair_funct_1d, distance_funct_1d, match_funct_1d_trans, create_funct_1d_array。
この図に焼いた実測値
```json
{
"derivative_max_error": 0.00010078909493371757,
"dx": 0.024591723315771374,
"zero_crossing_indices": [
127,
255,
383
],
"zero_crossing_x_over_pi": [
0.9999999260312996,
2.0,
3.000000073968701
],
"zero_crossing_max_deviation": 7.39687009421175e-08,
"round_trip_max_error": 0.000151179880499952,
"period_s": 0.1995,
"period_true_s": 0.2,
"half_period_s": 0.1,
"half_period_true_s": 0.1,
"tau_s": 0.40630736789098154,
"tau_true_s": 0.4,
"match_shift": 25,
"match_shift_true": 25,
"match_score": 0.7996386353789152,
"n_peaks": 5,
"n_zero_crossings": 8
}
```
8. 平滑化のトレードオフ

↑ 平滑化のトレードオフ ―― 減衰 5 Hz 振動 + N(0, 0.06) にガウス平滑を掛け、σ を 31 段掃引した。生の信号は真値 6 個の極大に対して 196 個を報告する(local_min_max_funct_1d は狭義不等式で、雑音モデルを持たない)。RMS 誤差は σ = 3.219 で最小の 0.021952(生の 2.73 倍良い)になり、そのときピーク高さは真値から -2.77 %。掛けすぎると σ = 40.0 で RMS 誤差が 0.249561 まで悪化し、ピークは -59.56 % なまる。雑音は減るが極値はなまる ―― 最小点はあるが、無料ではない。 使用 op: smooth_funct_1d_gauss, local_min_max_funct_1d。
この図に焼いた実測値
```json
{
"true_maxima": 6,
"true_peak": 0.8851703018329985,
"raw_rmse": 0.05997372648665996,
"raw_maxima": 196,
"raw_peak": 0.9290455796778364,
"best_sigma": 3.2189538239993025,
"best_rmse": 0.021951581267836598,
"best_peak": 0.8606477705412539,
"best_maxima": 12,
"best_gain": 2.7320914040271584,
"best_peak_loss_pct": -2.77037438343376,
"over_sigma": 39.99999999999999,
"over_rmse": 0.24956077599878743,
"over_peak": 0.3579369203167514,
"over_peak_loss_pct": -59.562931610387224,
"frames": 32
}
```
9. サンプリングとエイリアシング

| *↑ サンプリングとエイリアシング ―― 300 Hz の純音は一度も変えず、サンプリング周波数だけを 1300 Hz から 340 Hz へ 31 段下げた(0.5 s 記録、bin 2 Hz)。fs = 596 Hz(Nyquist 298 Hz)から折り返しが始まり、最後は fs = 340 Hz で 40.00 Hz に振幅 1.000000 の線が立つ ―― 高さは満額のまま、周波数だけが嘘。全 31 段で実測ピークと折り返しの予測 |
f − fs·k |
の差は最大 0.000 Hz。Nyquist の線から右は、この記録に原理的に存在し得ない領域として焼いてある。 使用 op: spectrum。* |
この図に焼いた実測値
```json
{
"true_tone_hz": 300.0,
"duration_s": 0.5,
"rate_first": 1300.0,
"rate_last": 340.0,
"n_rates": 31,
"first_alias_rate": 596.0,
"first_alias_nyquist": 298.0,
"max_abs_prediction_error_hz": 5.684341886080802e-14,
"bin_resolution_hz": 2.0,
"last": {
"fs": 340.0,
"nyquist": 170.0,
"peak_hz": 40.0,
"peak_amp": 1.0000000000000007,
"expected": 40.0
},
"table": [
{
"fs": 1300.0,
"nyquist": 650.0,
"peak_hz": 300.0,
"expected": 300.0,
"peak_amp": 0.9999999999999993
},
{
"fs": 1172.0,
"nyquist": 586.0,
"peak_hz": 300.0,
"expected": 300.0,
"peak_amp": 1.0000000000000013
},
{
"fs": 1044.0,
"nyquist": 522.0,
"peak_hz": 300.0,
"expected": 300.0,
"peak_amp": 0.9999999999999993
},
{
"fs": 916.0,
"nyquist": 458.0,
"peak_hz": 300.0,
"expected": 300.0,
"peak_amp": 0.9999999999999996
},
{
"fs": 788.0,
"nyquist": 394.0,
"peak_hz": 300.00000000000006,
"expected": 300.0,
"peak_amp": 1.0000000000000002
},
{
"fs": 660.0,
"nyquist": 330.0,
"peak_hz": 300.0,
"expected": 300.0,
"peak_amp": 0.999999999999999
},
{
"fs": 532.0,
"nyquist": 266.0,
"peak_hz": 232.0,
"expected": 232.0,
"peak_amp": 1.0000000000000009
},
{
"fs": 404.0,
"nyquist": 202.0,
"peak_hz": 104.0,
"expected": 104.0,
"peak_amp": 0.9999999999999986
}
]
}
```
10. 1D プロファイルはどこから来るか

↑ 1D プロファイルはどこから来るか ―― 2D 画像の測定線(実写真 coins、373 サンプル、最強エッジは添字 220.0)、3D ボリュームのプローブ(92 サンプル、壁厚 14.00 / 17.00 / 14.00 voxel)、センサー時系列(500 サンプル、rms 0.2687、スペクトル重心 387.0 Hz)。3 本とも素の 1-D float64 で届くので、funct1d はアダプタ無しでそのまま食える。1D ウィングに専用の型を作らなかったのはこのためで ―― 任意の実数 1-D はどの計器から来ても本当に正当なプロファイルであり、型を切ると接続を失うだけ。 使用 op: line_profile, profile_stats, vol_profile_line, vol_wall_thickness, signal_features, create_funct_1d_array, num_points_funct_1d, x_range_funct_1d, y_range_funct_1d, zero_crossings_funct_1d, local_min_max_funct_1d。
この図に焼いた実測値
```json
{
"image_source": "studio_assets/sample_images/coins.png (skimage coins, real photo)",
"profile2d": {
"n": 373,
"min": 0.08627450980392157,
"max": 0.9529411764705882,
"mean": 0.54881984965568,
"edge_at": 220.0
},
"profile3d": {
"n": 92,
"length_voxels": 91.0,
"min": 0.08,
"max": 0.83,
"wall_thicknesses": [
14.0,
17.0,
14.0
]
},
"sensor": {
"n": 500,
"rate_hz": 2000.0,
"rms": 0.268716,
"zcr": 0.366733,
"crest_factor": 3.9493,
"centroid_hz": 386.98,
"peak_freq_hz": 300.0,
"bandwidth_hz": 237.537
},
"funct1d": [
{
"name": "2D image, measurement line",
"op": "measure.line_profile",
"n": 373,
"xr": [
0.0,
372.0
],
"yr": [
0.08627450980392157,
0.9529411764705882
],
"nzc": 0,
"nmax": 92
},
{
"name": "3D volume, probe line",
"op": "volprobe.vol_profile_line",
"n": 92,
"xr": [
0.0,
91.0
],
"yr": [
0.08,
0.83
],
"nzc": 0,
"nmax": 0
},
{
"name": "sensor time series",
"op": "acoustics.synthesize_bearing_signal",
"n": 500,
"xr": [
0.0,
499.0
],
"yr": [
-0.9770901925470433,
1.0612360539292967
],
"nzc": 183,
"nmax": 112
}
]
}
```
11. 極値検出と照合

↑ 極値検出と照合 ―― 既知の 4 点(60, 150, 245, 330)に立てたガウスピークへ雑音を σ = 0 から 0.42 まで 30 段加えた。local_min_max_funct_1d は狭義不等式なので、生の波形では極大が 4 個から 132 個へ暴発する。σ = 3 のガウス平滑と高さ 0.45 の門を通すと最後まで 6 個([58, 149, 243, 254, 329, 337])に落ち着く。match_funct_1d_trans は同じ長さの窓とテンプレートを突き合わせるかぎり、30 段のうち 12 段(σ 0.159 まで)で 4 点すべて lag = 0 を厳密に返す。 使用 op: smooth_funct_1d_gauss, local_min_max_funct_1d, match_funct_1d_trans。
この図に焼いた実測値
```json
{
"true_centres": [
60,
150,
245,
330
],
"peak_sigma_samples": 9.0,
"template_length": 81,
"n_frames": 30,
"sigma_max": 0.42,
"raw_maxima_first": 4,
"raw_maxima_last": 132,
"smoothed_maxima_last": 22,
"accepted_last": 6,
"positions_last": [
58,
149,
243,
254,
329,
337
],
"exact_lag_levels": 12,
"total_levels": 30,
"exact_lag_up_to_sigma": 0.1593103448275862
}
```
12. 包絡線の端が切れると 76 % 間違う

↑ 包絡線の端が切れると 76 % 間違う ―― 12 µm の走査(241 plane × 0.05 µm)の中で、表面を中央 6.0 µm から端の 0.30 µm まで 32 段歩かせた。中央では誤差 2.2e-14 µm。表面が 0.500 µm にあると csi_peak_position は 0.1190 µm を返す ―― 有限で、もっともらしく、76 % 間違っている。しかも包絡線の argmax は 241 plane 中の 2 番目、つまり内部なので「端に張り付いたら拒否」という素直な検査は発動しない(掃引の最悪点は 0.30 µm の 84 % で、そこでも argmax は plane 1)。中央値基準の端レベルが 0.0539 を超えた表面 2.69 µm から op は拒否に転じる(図の値は max_edge_envelope=1.0 で強制的に取り出したもの)。 使用 op: csi_signal_simulate, csi_envelope, csi_peak_position。
この図に焼いた実測値
```json
{
"scan_planes": 241,
"z_step_um": 0.05,
"z_range_um": 12.0,
"wavelength_um": 0.6,
"n_frames": 32,
"surface_first": 6.0,
"surface_last": 0.3,
"first_refusal_surface": 2.690323,
"first_refusal_edge": 0.05392259854284297,
"worst_surface": 0.3,
"worst_returned": 0.04768769253057824,
"worst_rel_pct": -84.10410248980725,
"worst_argmax_plane": 1,
"documented_surface": 0.5,
"documented_returned": 0.11898968048241321,
"documented_rel_pct": -76.20206390351736,
"documented_edge": 0.636140666887029,
"documented_argmax_plane": 2,
"centred_error_um": 2.220446049250313e-14,
"centred_edge": 0.0,
"table": [
{
"surface": 6.0,
"edge": 0.0,
"returned": 6.000000000000022,
"rel_pct": 3.7007434154171886e-13,
"argmax": 120,
"refused": false
},
{
"surface": 5.080645,
"edge": 0.0,
"returned": 5.080647081606085,
"rel_pct": 4.0971295686360194e-05,
"argmax": 102,
"refused": false
},
{
"surface": 4.16129,
"edge": 0.0,
"returned": 4.161139025318186,
"rel_pct": -0.0036280740302651357,
"argmax": 83,
"refused": false
},
{
"surface": 3.241935,
"edge": 0.0,
"returned": 3.239315199806879,
"rel_pct": -0.08080976926190077,
"argmax": 65,
"refused": false
},
{
"surface": 2.322581,
"edge": 0.06881176874572165,
"returned": 2.31045038505397,
"rel_pct": -0.522290285937501,
"argmax": 46,
"refused": true
},
{
"surface": 1.403226,
"edge": 0.3399177997568482,
"returned": 1.359190567949887,
"rel_pct": -3.1381567937105688,
"argmax": 27,
"refused": true
},
{
"surface": 0.5,
"edge": 0.636140666887029,
"returned": 0.11898968048241321,
"rel_pct": -76.20206390351736,
"argmax": 2,
"refused": true
}
]
}
```
13. 欠陥周波数が出てくるまで(工程)

↑ 欠陥周波数が出てくるまで(工程) ―― 幾何から出した外輪通過周波数 BPFO = 108.0000 Hz でわざと鳴らした軸受記録を、7 工程で診断まで持っていく。生スペクトルでは欠陥率の振幅は 1.19e-02 しか無く、目立つのは 3024 Hz の構造共振(0.1175)。スペクトル尖度(窓 64、最大 4.5956 @ 2000 Hz)が復調帯域 1600–2400 Hz を選び(真の共振 3000 Hz より 1000 Hz 低い ―― SK が返すのは帯域であって線ではない)、帯域通過 → 包絡線 → 変換で 108.0000 Hz。それが幾何の BPFO 108.0000 Hz と 0.0000 % で一致する。正直な内訳: この帯域の band_fraction は 0.2250 で、同じ帯域に通した白色雑音の 0.2348 と区別がつかない。分けるのは突出度のほうで、30582 対 2666 である(共振をまたぐ 2600–3400 Hz を人が選べば band_fraction は 0.8368 まで上がる)。dsp.bandpass + dsp.envelope + rfft で手組みした結果と op の返りは 0.0e+00 で一致した(作り直していない証拠)。 使用 op: bearing_defect_frequencies, synthesize_bearing_signal, spectrum, spectral_kurtosis, bandpass, envelope, envelope_spectrum。
この図に焼いた実測値
```json
{
"rpm": 1800.0,
"n_elements": 9,
"element_diameter_mm": 8.0,
"pitch_diameter_mm": 40.0,
"bpfo_hz": 108.0,
"bpfi_hz": 162.0,
"ftf_hz": 12.0,
"bsf_hz": 72.0,
"synth_defect_hz": 108.0,
"carrier_hz": 3000.0,
"rate_hz": 25600.0,
"duration_s": 1.0,
"raw_amplitude_at_defect": 0.011914549427139143,
"raw_peak_amplitude": 0.11751702164005307,
"raw_peak_hz": 3024.0,
"sk_max_kurtosis": 4.595572911742822,
"sk_max_freq": 2000.0,
"sk_bin_hz": 400.0,
"sk_win": 64,
"band_low_hz": 1600.0,
"band_high_hz": 2400.0,
"envelope_peak_freq": 108.0,
"envelope_peak_amplitude": 0.04283185557071618,
"envelope_band_fraction": 0.22500945540780717,
"envelope_prominence": 30581.617076490267,
"envelope_resolution_hz": 1.0,
"control_band_fraction": 0.23476298878207671,
"control_prominence": 2665.7791158181667,
"control_peak_freq": 335.0,
"resonance_band": [
2600.0,
3400.0
],
"resonance_band_fraction": 0.8367515281311655,
"resonance_band_peak_freq": 108.0,
"resonance_band_peak_amplitude": 0.19825734899498038,
"resonance_band_prominence": 11164.842724089745,
"manual_vs_operator_max_abs_diff": 0.0,
"closest_rate_name": "BPFO",
"closest_rate_hz": 108.0,
"closest_rate_error_pct": 0.0,
"steps": 7
}
```
14. 分数オクターブ帯域 ―― 偶数分数には 1 kHz 帯域が無い

↑ 分数オクターブ帯域 ―― 偶数分数には 1 kHz 帯域が無い ―― 振幅 0.7 の 1000 Hz 純音を、1/1・1/2・1/3・1/6・1/12・1/24 オクターブで測った 6 枚。帯域レベルはどの分数でも閉形式 10log10(A²/2) = -6.108339 dB を返す(最大差 0.0e+00 dB)。違うのはどの帯域がそれを報告するかで、fraction が奇数 [1, 3] では 1000.000 Hz ちょうどを中心とする帯域があるが、偶数 [2, 6, 12, 24] では指数のオフセットにより 1000 Hz が帯域端になり、同じエネルギーが 1188.50 Hz, 944.06 Hz, 971.63 Hz, 1014.50 Hz を中心とする半端な帯域から報告される。定義であって不具合ではないが、「1 kHz でのレベル」を引用するときに知っていないと嘘になる。空の帯域は −inf ではなく床(−200 dB)に落ちる。 使用 op: octave_bands, octave_spectrum。
この図に焼いた実測値
```json
{
"tone_hz": 1000.0,
"tone_amplitude": 0.7,
"rate_hz": 48000.0,
"duration_s": 0.5,
"closed_form_db": -6.108339156354676,
"max_abs_diff_from_closed_db": 0.0,
"fractions_with_exact_1k": [
1,
3
],
"fractions_without_exact_1k": [
2,
6,
12,
24
],
"table": [
{
"fraction": 1,
"n_bands": 10,
"max_level": -6.108339156354676,
"max_center": 1000.0,
"exact_1k": true,
"diff_from_closed": 0.0,
"clamped": 9,
"total_level": -6.108339156354676,
"nominal_at_max": 1000.0,
"bandwidth_at_max": 704.5917602386166
},
{
"fraction": 2,
"n_bands": 20,
"max_level": -6.108339156354676,
"max_center": 1188.5022274370185,
"exact_1k": false,
"diff_from_closed": 0.0,
"clamped": 19,
"total_level": -6.108339156354676,
"nominal_at_max": 1190.0,
"bandwidth_at_max": 412.53754462275447
},
{
"fraction": 3,
"n_bands": 30,
"max_level": -6.108339156354676,
"max_center": 1000.0,
"exact_1k": true,
"diff_from_closed": 0.0,
"clamped": 29,
"total_level": -6.108339156354676,
"nominal_at_max": 1000.0,
"bandwidth_at_max": 230.76751616821775
},
{
"fraction": 6,
"n_bands": 59,
"max_level": -6.108339156354676,
"max_center": 944.0608762859234,
"exact_1k": false,
"diff_from_closed": 0.0,
"clamped": 58,
"total_level": -6.108339156354676,
"nominal_at_max": 944.0,
"bandwidth_at_max": 108.74906186625446
},
{
"fraction": 12,
"n_bands": 118,
"max_level": -6.108339156354676,
"max_center": 971.6279515771062,
"exact_1k": false,
"diff_from_closed": 0.0,
"clamped": 117,
"total_level": -6.108339156354676,
"nominal_at_max": 972.0,
"bandwidth_at_max": 55.939123714076686
},
{
"fraction": 24,
"n_bands": 237,
"max_level": -6.108339156354676,
"max_center": 1014.4952080687361,
"exact_1k": false,
"diff_from_closed": 0.0,
"clamped": 236,
"total_level": -6.108339156354676,
"nominal_at_max": 1010.0,
"bandwidth_at_max": 29.200527194428332
}
]
}
```