音は空気の振動である。この振動を一定の間隔で測り(標本化)、決まった目盛りに合わせて記録し(量子化)、短く切り出して(窓)どの高さの振動が混ざっているかを分け(フーリエ変換)、人の耳のように低い音をより細かく見る目盛りでまとめ直すと(メル)、ニューラルネットワークが読む数値の行列になる。すべての音はこのページで直接合成している。
スピーカーの振動板が前後に振動すると、空気が密になったり疎になったりを繰り返しながら広がっていく。1秒に何回振動するかが音の高さ(周波数)、どれだけ大きく振動するかが音の大きさ(振幅)である。
測る回数 ≥ 2 × 最も高い周波数Shannon, 1949
振動を正しく捉えるには、1回振動する間に少なくとも2回は測らなければならない。1秒にfs回測るとfs/2 Hzまでしか捉えられず(ナイキスト限界)、それより速い振動は見当違いの遅い振動に見える(エイリアシング) [R1]。人の耳はおよそ2万Hzまで聞こえるので、音楽CDは1秒に44,100回測る。電話は話し声だけ捉えればよいので8,000回を使う。このページのメルスペクトログラムも8,000回(8 kHz)を使う。そのため4,000 Hzより高い音は捉えられない。実際の録音機器は、標本化の前に限界より高い音を取り除いている。
測った値は小数点以下が限りなく続く実数である。保存するには、決まった目盛りのうち最も近い目盛りに丸めなければならない。bビットなら目盛りは2b個だ。丸めで生じた差が量子化雑音である。
話し声は瞬間ごとに変わる。そこで25 msずつ切り出して断片ごとに別々に分析し、10 msずつずらしながら繰り返す。切り出した断片の両端をなめらかに小さくする掛け算が「窓」である。
そのまま切ると、断片の両端で値がぷつりと途切れる。フーリエ変換は、その断片が限りなく繰り返されるとみなして計算する。そのため途切れた箇所の急激な変化が、もともとなかった周波数として漏れ出す(漏れ)。Hann窓は0から1へなめらかに上がって下りる曲線(0.5 − 0.5·cos)を掛けて、両端を0にする。その代わりにピークが少し広がる。25 ms・10 msは話し声の分析でよく使われる値で、課題に応じて変えて使う。
どんな音でも、高さの異なる正弦波の和として表せる。フーリエ変換は波形を受け取り、「何Hzの成分がどれだけ含まれているか」を返す。プリズムが白い光を虹に分けるのと似ている。
メル = 2595 · log10(1 + Hz / 700)「ドレミファ」1秒 → 98 フレーム × 20個
人の耳は低い音の小さな差(100 Hzと200 Hz)はよく聞き分けるが、高い音の同じ差(3,000 Hzと3,100 Hz)はあまり聞き分けられない。メル尺度は低い周波数を細かく、高い周波数を粗く分ける。フーリエ変換の結果(129個)をこの尺度の三角フィルタ20個でまとめ、対数(デシベル)をとるとメルスペクトログラムになる。上の式は広く使われている定義の1つである。メル尺度に基づく特徴(MFCC)は、音声認識でほかの特徴より良い性能を示し、長く標準のように使われてきた [R2]。
メルスペクトログラムは「周波数 × 時間」の数値の行列である。ニューラルネットワークはこれを2通りの方法で読む。詳しい構造は前の回で扱った。
どちらのコードも、Colabに標準でインストールされているライブラリだけを使う。「ノートブック(.ipynb)をダウンロード」したあと、Colabでファイル → ノートブックをアップロードで開くか、コピーして新しいノートブックのセルに貼り付ける。
標本化・量子化・窓・フーリエ変換・メルスペクトログラムをライブラリなしで計算する。ページの数値(エイリアシング 3 Hz、漏れ 7.95% → 0.05%、メルの各値)がそのまま出る。自分のデータに替えるには SIGNALとFSを変える。
実務で使うlibrosaで同じ音をメルスペクトログラムに変換し、自作の結果と比較する。録音ファイルを使うには、コード内の[自分のデータに替えるには]の行に従う(ファイルは各自で用意)。
ChatGPT、Qwen、ClaudeのようなAIアシスタントに貼り付けるプロンプトである。「コピー」を押すと、プロンプトのあとに選んだコードが一緒に付く。〔 〕の中を自分の状況に書き換えて使えばよい。
AIの答えは出発点にすぎない。提案された論文・数値・ライブラリ関数は、必ず原文と公式ドキュメントで確認する。コンテストや論文でAIの助けを借りた場合は、主催者や学術誌の規定に従って、使用した事実と範囲を明らかにする。
本文の黄色い点線の下線と同じ辞書である。シリーズ全体で同じ表記を使う。セクション名を押すと最初に出てきた場所へ移動する。
たとえは理解の第一歩だが、誤解の種にもなる。ショウジョウバエ・脳のたとえには強さを示した。直接 実際に同じことをしているという根拠がある · 部分 一部の性質だけが似ている · なし 対応するものが知られていない
| 概念 | 日常のたとえ | ショウジョウバエ・脳のたとえ | たとえが外れるところ |
|---|---|---|---|
| 標本化 | 走る人を1秒ごとに写真に撮る | 部分的 ショウジョウバエの複眼も、決まった速さでしか明るさの変化を追えない | 写真は瞬間を写すが、標本は決まった間隔の値にすぎない。間隔より速い動きは見当違いに見える(エイリアシング) |
| 量子化 | 身長を1 cm目盛りの物差しで測る | なし | 物差しの目盛りは均一だが、実際のオーディオではビット数によって目盛りが決まる |
| 窓 | 写真の周辺をぼかす処理(ビネット) | なし | 窓は見栄えのためではなく、切った端が生む偽の周波数を減らすために掛ける |
| フーリエ変換 | プリズムが光を虹に分ける | 直接的 人の蝸牛は場所ごとに異なる高さの音に反応し、音を高さごとに分ける | 蝸牛は時間に沿って分け続け、大きさの変化に非線形に反応する。フーリエ変換は切り出した断片1つを一度に計算する |
| メル尺度 | ピアノの鍵盤:高さが2倍になるたびに同じ間隔 | 部分的 人が感じる音の高さの間隔 | メルの式はいくつもあり、聞こえ方も人によって違う。このページの式は広く使われているものの1つにすぎない |
| メルスペクトログラム | 楽譜:時間(横)× 音の高さ(縦) | なし | 楽譜は音符を1つずつ書くが、スペクトログラムは倍音や雑音まで、すべてのエネルギーを各マスに書き込む |
E-1 著者紹介 · E-2 学術参考文献 · E-3 図の参考資料
すべての音はページ上で合成した(録音なし)。
講師、実務OJT担当者、チューターのための運営ガイドである。時間は目安なので、実際の授業に合わせて調整する。
| 対象 | 音声・音のデータ(コールセンターの録音、設備の騒音、音声コマンド)を扱おうとする大学生・実務者 |
|---|---|
| 前提知識 | 正弦曲線と対数。3-3の「写真は数値の格子」を知っているとセクション6・7がわかりやすい |
| 学習目標 | ① 標本化・量子化が何を失うかを数値で説明する ② 窓・フーリエ変換・メルフィルタを経て音が行列になる過程を順に説明する ③ メル行列をCNN・系列モデルが読む2つの方法を区別する |
| 所要時間の目安 | 読む 35〜45分 · アニメーション・音のデモ 20分 · Colab実習 25分(コード1 15分、コード2 10分) |
導入 5分(セクション1 音を聞く)→ セクション2 エイリアシング 10分 → セクション3 ビット数ごとの音の比較 10分 → セクション4・5 15分 → セクション6 数値の行列 5分 → 確認問題 5分。
セクション2・3を自社機器の録音仕様(標本化周波数・ビット)と照らし合わせる 15分 → セクション4〜6 25分 → コード2に自分の録音ファイルを入れる 30分 →「自社のデータはCNN型か系列型か」討論 20分。
入門者はセクション1・2・5・6のみ。中級者にはコード1のmel_filterbankを手で1マス計算させ、ページのフィルタの三角形の図と照らし合わせる。
| セクション | 立ち止まって投げかける質問 | 操作のコツ |
|---|---|---|
| 1 振動 | 「440 Hzは220 Hzより何倍速く振動するか?どう聞こえるか?」 | 2つの音を順に聞かせる(音が出なければ機器の音量を確認) |
| 2 標本化 | 「1秒に8回測ると、なぜ3 Hzに見えるのか?」 | 50 → 12 → 8回の順に押す |
| 3 量子化 | 「3ビットの音と16ビットの音は、何が違って聞こえるか?」 | 3ビットと16ビットでそれぞれ聞かせる |
| 4 切り出し・窓 | 「そのまま切ると、なぜなかった周波数が生じるのか?」 | 矩形 ↔ Hannを交互に押しながら、下のグラフの裾野を見る |
| 5 フーリエ変換 | 「同じ『ド』なのに、ピアノとバイオリンはなぜ違って聞こえるのか?」 | 純音 → 楽器音の順に聞かせ、ピークの数を比べる |
| 6 メルスペクトログラム | 「1秒の音がいくつの数値になったか?」 | ド → ファのフレームを押し、最も明るいマスが上へ移っていくのを見る |
| 7 モデルの読み方 | 「呼び鈴の音の分類と書き取りには、どちらの方法が合うか?」 | 2つの方法を交互に押す |
| 誤解 | 正しい説明 | 見せる場面 |
|---|---|---|
| 多く測るほど常に良い | 捉えたい最も高い周波数の2倍で十分である。それ以上は保存容量が増えるだけだ | セクション2の12回(5 Hzは捉えられる) |
| ビットが少ないと音が小さくなる | 大きさではなく雑音が大きくなる。ビット1つごとに約6 dBずつきれいになる | セクション3 |
| フーリエ変換は音全体を一度に分析する | 短い断片(フレーム)ごとに別々に行う。だから時間に沿った変化が見られる | セクション4・6 |
| スペクトログラムは画像だから、写真と同じように扱ってよい | 横(時間)と縦(周波数)の意味が違う。縦にずらすと別の音になる | セクション7 |
| メルスペクトログラムは音をそのまま収めている | 位相と細かな周波数情報を捨てて縮めた要約である(8,000 → 1,960) | セクション6 数値のまとめ |
8,000 ÷ 2 = 4,000 Hz(ナイキスト限界)。
|5 − 8| = 3 Hz。限界(4 Hz)を超えてエイリアシングが生じる。
6.02 × (16 − 8) ≈ 48 dB。理論値は49.92 dBと98.08 dBである。
(8,000 − 200) ÷ 80 + 1 = 98個(小数点以下を切り捨ててから1を足す)。
1,960個。8,000 ÷ 1,960 ≈ 4.1、約4分の1である。
コード1のNMELを20から40に、FRAMEを200から400に変える。メル行列の大きさと図がどう変わるかを、時間分解能と周波数分解能のトレードオフと結びつけて3文で書く。
自分の声や設備の音を直接録音したファイルでコード2を実行する(ファイルは各自で用意、個人情報に注意)。同じ音を2回録音してメル行列がどれだけ似ているかを相関係数で比べ、何が違いを生むかを書く。
| 入門者 | セクション3・4は飛ばしても流れは途切れない。セクション1・5の音を聞く部分は必ずやってみる |
|---|---|
| 発展 | 窓の長さ・間隔・メルの数が認識性能に与える影響を調べさせる。調べた論文は原文で確認する |
| さらに学ぶ | Sangsun Ahn『ビジネスのためのデータサイエンス』講義案(データサイエンス全般) · STEP [K-デジタル] 人工知能 自然言語処理(3-5・3-8と連動) · STEP [K-デジタル] フィンテックデータ分析の基礎(3-6と連動) |
| 講師用資料 | 確認問題の採点基準と課題の解答例は教育者用解答ページ(3-4)で見られる |
「3-4 音声」の回を最後まで読みました。研究室のみんなが一言ずつまとめます。