# 音高が窓内で変わるときの調波振幅：方法と限界

## 40入力の既知振幅と、二つの固定経路を比較した

現在のApronが使うHMPPと、比較対象のHMCZTを、固定LLSM2の調波解析関数で直接呼んだ。Apron全体の音質比較ではない。中心のF0を既知値として渡し、F0再推定、Rd、雑音、Layer1化、復号は行わない。自然音声の比較ではないため、自動MOSの再採点や試聴音声もない。

fs=24000、n=0..1920、t=n/fs、中心tc=0.04秒、u=t−tc。fcは100/200 Hz、T=4/fc秒。窓内の相対F0変化rは−0.10、−0.05、0、0.05、0.10。F0(t)=fc(1+ru/T)、傾きはfc²r/4 Hz/s。rは全80 msの変化率ではない。最高瞬時調波は最大9.6 kHzだが、有限長信号が厳密に帯域制限されるとは主張しない。

H=floor(8000/fc)、b_h=(1+hfc/1000)^−2、S=0.5/Σ(h=1..80)(1+100h/1000)^−2。全条件で同じSを使い、結果を見た正規化やclipはしない。x(t)=Σ(h=1..H) S b_h cos[φ_h+2πhfc(u+ru²/(2T))]。真の正弦波振幅はS b_hで時間一定とする。位相は全0、全π/2、+πh(h−1)/H、−πh(h−1)/Hの4種類。これは動く調波に一定係数を置いた人工モデルで、固定された生体の声道ではない。

float64生成値と、nativeへ渡すfloat32値の両方を保存した。独立した別集計による波形式の照合では加算順序による最大差1.11×10^−14、float32丸め差の最大は約1.48×10^−8。入力のファイルSHAはinput-manifest.jsonにある。

## 中心1フレームだけを解析した

queryは9要素で先頭8要素が0、最後がfc。0は呼出し位置の選択用であり、信号が無声という意味ではない。hop=0.005秒、中心標本960、rel_winsize=4、maxnhar=H。後者はApron通常の400と異なる出力上限で、生成した調波だけを評価する。100 Hzの窓は960標本・FFT1024点、200 Hzは480標本・FFT512点。どちらも入力の内部に収まる。

固定ソースは[LLSM2 d18cdf02](https://github.com/Sleepwalking/libllsm2/commit/d18cdf02b31819670e3bc23ead933ad9467da06d)と[ciglet 895ba9b1](https://github.com/Sleepwalking/ciglet/commit/895ba9b1c0eabee83d3544208bbc82420efa3206)。Apron側の参照は[63dd438](https://github.com/Hiroshiba/check-nonml-saikyo-vocoder/commit/63dd438de062add6fb6293867eba327912aca8ad)。HMPPは各調波の前後0.3倍の範囲で峰を探し、1e−8を加えた対数振幅を補間する。HMCZTは指定された整数調波の周波数を評価する。Chirp-Zという計算名は、音高の変化率へ適応する推定器を意味しない。

事前レビューで両者の窓が異なると説明したが、固定cigletのマクロ本体は両方とも同じ周期的Blackman窓だった。厳密算術では窓和0.42N、両経路の規格化も2/(0.42N)で同じである。測定後に出典説明だけを訂正し、入力・コード・測定値を変えたり再測定したりしていない。浮動小数点計算の経路は同一ではない。

## 振幅誤差を、F0と位相ごとに読んだ

各調波でe=20log10(推定振幅/真振幅)を計算し、符号付きeと|e|を保存。非正・非有限ならdB値をnullとして理由を残す設計だが、今回は未定義0件。主帯域は中心周波数hfcが500〜8000 Hz、内訳は500以上4000未満と4000以上8000以下。入力を後から選び直していない。

各条件・方法・帯域の|e|の平均、中央値、95%点、最大を保存した。95%点は線形補間。二方法の対応差と、同じfc・位相・方法のr=0からの差もsummary.jsonにある。全4800調波行はharmonics.csvで、主帯域4560行、低域2080行、高域2480行。位相とrの対称な組合せは独立標本ではなく、調波行を話者数や知覚評定数に置き換えない。

80測定の記録時刻は2026-10-23 17:50:03〜17:50:12 UTC。全件成功、失敗0、未実行0。1 thread、仮想アドレス2 GiB、各キー1800秒の上限を設定した。ビルド時に未使用の合成関数を含むlayer0.cの警告1件があり、測定の標準出力・標準エラーは空だった。これは独立した環境でのnative再現実験ではない。保存物のハッシュ・式・件数・集計・上流49ファイルのGit blob照合を別途実施した。実行順序やバイナリから個票への因果まで、保存物だけで独立に立証できるわけではない。

## 次に分けるのは窓長と入力条件の影響

HMCZTが定常対照で小さい誤差だったことだけを理由に置き換えない。音高が動く条件では傾向が変わり、200 Hz・小さい変化では位相によって優劣が入れ替わる。まず振幅変化、入力音量、query F0のずれ、上流F0再推定、窓長を別の固定計画で測り、混ざった要因を整理する。いずれも人工的な部品診断であり、自然音声の品質改善やApronの採用変更を決めるには別の根拠が必要である。
