後続の一録音観測:複素値とFPU状態から89点の発生経路を説明。以下はその前の2例の記録です。
Rdの終点超過と、高域STFTの負の無限大を生成段階で分ける
Apron24を維持します。今回の2例からは、Apron24・WORLD16との新しい品質差や順位は出せません。元の120録音比較の未取得アーカイブや欠測は、この追加観測で補いません。
前回の12件診断で見つけた二つの失敗群から、元manifest順で最初の1録音ずつを選びました。別の計装版を各1回だけ解析し、Rd側は候補格子の生成時点での上限超過、高域側はSTFT後・正規化前の振幅にある負の無限大と、その対数変換後のNaNを観測しました。対象は原因を調べるための2例です。全12件の原因が同じと断定したり、一般的な失敗率を推定したりしません。
Rdの上限超過は、候補格子から既に始まっていた
librispeech_2300-131720-0022では、64候補の最後が3.000000238418579、生bits 0x40400001でした。意図した上限3の次に大きいfloat32値で、保存した候補格子の時点から超えています。
この最後の候補を選んだフレームは13個あり、選択値・補間前・補間後のRdで同じ13個が3を超えていました。平滑化後に残ったのは5個で、最初はフレーム1045です。前回と同じ場所で私有入口のRd ≤ 3に拒否され、状態コード4になりました。目標1045の選択候補番号は63で、選択から平滑化後まで0x40400001のままでした。
固定ソースは候補格子の最後も等間隔の演算式で求め、終点3を直接代入していません。今回の計装版では、上限をわずかに超えた候補が入口側から渡されていたことを確認しました。
これで私有入口の拒否を説明する値の来歴は得られました。ただし、元の計測binaryで全て同じ中間値だった証明ではありません。厳密な上限を設けた私有契約と、上流LFモデルの適用範囲は区別します。推定器の端点を変更する案と、保存値を変えず丸め余地を明記する案は、別の変更として判断する必要があります。
高域はSTFT振幅が負の無限大になり、その対数がNaNになった
librispeech_121-127105-0035のフレーム371、帯域3、調波0を観測しました。解析窓は1,600標本、FFT長は2,048、片側スペクトルは1,025点です。第4帯域のフィルター後・二乗後の入力窓は全て有限で、1,370標本が厳密な0、最大値は約4.604×10⁻¹⁹でした。
STFT後・正規化前の振幅スペクトルには、89点の負の無限大(0xff800000)がありました。残る936点は厳密な0です。正規化係数は約0.00297619で有限。正規化後も同じ89点が負の無限大で、対数変換後にNaN(0xffc00000)へ変わりました。調波0の補間へ渡った3点は全てNaNでした。その後の補間振幅とexp後の振幅もNaNとなり、前回と同じ状態コード5で拒否されました。
対照として保存した元PCM側の同じ窓は、1,600標本全てが厳密な0でした。振幅スペクトルは正規化の前後とも全点0で、対数値は全点が約−18.420681。補間の返却も有限で、exp後は約10⁻⁸です。高域フィルター後の微小な値が残る場合と、完全な0の原音窓で結果が分かれました。
今回のNaNは、STFT振幅の負の無限大を対数変換した段階で観測されました。ピーク補間に入る前から非有限だったことを確認できます。FFTの複素出力や振幅を作る各命令は今回保存していないため、FFT自体・複素数からの振幅変換・格納処理のどこかまでは、この観測だけでは確定しません。
新しい観測と元の比較を混ぜない
計画は2026-10-26 17:29:07 UTCに固定しました。前回から保持する2録音の原入力・24 kHz PCM・状態・時計の計8配列を、再計算せずそのままコピーして全bytesを照合しています。Python 3.12、NumPy 2.3.5、全係数1、seed 0、各録音1回の解析です。復号・係数最適化・品質採点・F0再推定は行っていません。
計装版は、既存の256-byte最初の失敗記録に加え、66,712 bytesの固定長観測を返します。生bits、候補格子、Rdの各段階、目標フレームのSTFT前後を保持しました。入力窓として保存したのは実際の解析入力の対応区間です。窓掛け後の作業配列は直接観測していません。未到達の欄と、観測された0を区別します。Rd側は雑音解析へ到達しないため、高域欄が空であることが予定どおりの結果です。
二つのアーカイブは取得済みです。全ファイルのサイズ・SHA、固定計画・入力・ライブラリ、開始・返却・終了の記録を照合してから読みました。両方とも最初の失敗記録と追加観測を取得し、入力変更・timeout・wrapperエラー・cleanupエラーは記録されていません。音声解析は2件とも拒否され、その観測記録が揃いました。
計装は演算式を置き換えていませんが、追加の観測処理がコンパイラーの最適化や丸めへ影響する可能性はあります。同じ状態コード・同じ最初の失敗フレームでも、元binaryとの全面的なbit一致とは扱いません。今回の2例を選んだ後の結果であり、残りの失敗録音への一般化や品質改善の根拠にはしません。
次は弱いスペクトルの振幅計算を調べる
Rdについては、後から値だけをclampせず、推定器の変更と丸め許容の契約を分けて検討します。高域については、NaNが出る前のFFTと振幅変換を優先します。入力を大きくして失敗を隠す、NaNを0へ置換する、同じ解析を成功するまで繰り返す、といった対応はしません。
ここまでで確認できたのは解析失敗の生成段階です。音質の採否やApronの置換へ飛躍せず、元比較の欠測・結果保持の問題も別に残します。新しい復号音声はありません。以前のApron24・WORLD16との比較音声は、元レポートを参照してください。
計画と生データ
LibriSpeech test-clean由来の入力を用いています。CC BY 4.0。原16 kHz音声から24 kHzへ再標本化した解析入力や、その加工値を生bitsに含みます。コーパスの出典・許諾。新しい合成音声はありません。