Featured image of post 音声の基礎

音声の基礎

目次

背景

  • 音声処理まわりの記事を書く機会が増えてきた
  • その土台となる「音そのもの」の基礎を、ここで一度整理しておく

音とは何か

音の正体(空気の振動)

  • 音源が振動すると、その振動が空気の疎密波(縦波)として周囲に伝わっていく現象が音
  • 音源から出た振動が、空気の分子を押したり引いたりしながら伝播していく
  • 空気のような媒質が必要なので、真空中では音は伝わらない

波の基本要素

  • 振幅(Amplitude): 波の大きさ。音の大きさ(音量)に対応する
  • 周波数(Frequency): 1秒間に振動する回数。単位はHz(ヘルツ)。音の高さ(ピッチ)に対応する
  • 波長(Wavelength): 1周期分の波の長さ。周波数と音速から決まる
$$ \lambda = \frac{v}{f} $$
  • $\lambda$が波長、$v$が音速、$f$が周波数
  • 位相(Phase): 波が今どの位置(山・谷のどこ)にいるかを表す

可聴域

  • 人間が聞き取れる周波数は、おおよそ20Hz〜20,000Hz(20kHz)程度
  • 年齢とともに、高音域が聞き取りにくくなっていく
  • 会話音声の情報は、主に100Hz〜8kHzあたりに集中している

アナログからデジタルへ

サンプリング(標本化)

  • 連続的なアナログ波形を、一定間隔で区切って数値の列に変換する処理
  • サンプリング周波数(サンプルレート): 1秒間に何回サンプリングするか。8kHz・16kHz・44.1kHz(CD音質)・48kHzなどがよく使われる
  • サンプリング定理(ナイキストの定理): 元の波形を正しく復元するには、含まれる最大周波数の2倍以上のサンプリング周波数が必要
    • 例えば、20kHzまでの音を正しく扱うには、44.1kHz以上のサンプリングが必要(CD音質が44.1kHzなのはこれが理由)
  • サンプリング周波数の半分の周波数をナイキスト周波数と呼び、それを超える周波数成分は正しく記録できない(エイリアシングという歪みの原因になる)

量子化

  • サンプリングした各点の振幅を、有限のビット数の数値に変換する処理
  • ビット深度: 16bit($-32768$〜$32767$)・24bit・32bit floatなどがよく使われる
  • ビット深度が大きいほど、表現できる音量の分解能が高くなり、量子化誤差(量子化ノイズ)が小さくなる

PCM

  • サンプリングと量子化だけで作られた、圧縮のない生のデジタル音声データ
  • WAVファイルなどの基本フォーマットになっている

音の大きさを表す指標

RMSエネルギーとは

  • 波形のエネルギー(音量)を表す、最も基本的な指標の1つ
  • 一定区間の波形のサンプル値を2乗して平均し、平方根を取ったもの
$$ \text{RMS} = \sqrt{\frac{1}{N}\sum_{i=1}^{N} x_i^2} $$
  • $x_i$がその区間の$i$番目のサンプル値、$N$がサンプル数
  • 音量が大きいほど値も大きくなる、直感的にわかりやすい指標
  • 後述のdBは、このRMS(やパワー、振幅)を対数スケールに変換したもの。「RMSを計算してから、dBに変換する」という流れになることが多い

デシベル(dB)とは

  • 音の大きさ(パワーや振幅の比)を対数スケールで表す単位
  • パワー比の場合、以下の式で表される
$$ \text{dB} = 10 \log_{10}\left(\frac{P}{P_{\text{ref}}}\right) $$
  • $P$が測定対象のパワー、$P_{\text{ref}}$が基準となるパワー
  • 人間の聴覚は、音の大きさを線形ではなく対数的に感じる(音のパワーが10倍になっても、感覚的には「少し大きくなった」程度にしか感じない)ため、dBのような対数スケールの方が感覚に合いやすい

dBFS(dB Full Scale)とは

  • デジタル音声で使われる、基準の取り方が特殊なdB
  • 基準$P_{\text{ref}}$を「そのビット深度で表現できる最大振幅(クリッピング直前の値)」に取る
  • そのため、0dBFSが表現できる最大値で、実際の音声データはほぼ常にそれより小さい負の値(例: -20dBFS、-40dBFS)になる
  • アナログの音圧レベル(dB SPL)のような絶対的な物理量ではなく、「そのデジタルシステムの上限からどれだけ離れているか」という相対値である点に注意

SNR(Signal-to-Noise Ratio)とは

  • 欲しい信号(音声など)の強さと、それ以外のノイズの強さの比率
  • 通常dBで表す
$$ \text{SNR(dB)} = 10 \log_{10}\left(\frac{P_{\text{signal}}}{P_{\text{noise}}}\right) $$
  • 値が大きいほど、信号がノイズに対してクリアに聞こえる(SNRが高い=綺麗な音)
  • 値が小さい、あるいはマイナスだと、ノイズに埋もれて聞き取りにくくなる
  • 音声認識やVADの文脈では、マイクに近い目的話者ほど音量が大きくSNRが高くなりやすく、遠くの背景話者ほど音量が小さくSNRが低くなりやすい、という前提で距離のフィルタ代わりに使われることがある

音声ファイルフォーマット

  • 非圧縮: WAVなど。PCMのデータをそのままファイルに入れたもの
  • 可逆圧縮: FLACなど。ファイルサイズは小さくなるが、展開すれば元のデータと完全に一致する
  • 非可逆圧縮: MP3・AACなど。人間の聴覚特性を利用して、聞こえにくい成分を削ることで大きく圧縮する。一度削った情報は元に戻せない

周波数領域で見る

時間領域と周波数領域

  • 波形をそのまま表示したもの(時間領域の表現)では、どんな高さの音がどれくらい混ざっているかが分かりにくい
  • フーリエ変換を使うと、波形を「どの周波数の成分がどれだけ含まれているか」という周波数領域の表現に変換できる

FFT(高速フーリエ変換)

  • 離散フーリエ変換(DFT)を高速に計算するアルゴリズム
  • 音声処理では、一定区間(フレーム)ごとの周波数成分を計算するのに使われる

STFTとスペクトログラム

  • 音声は時間とともに周波数成分が変化していくので、全体を一度にFFTするのではなく、短い時間窓(フレーム)に区切って、それぞれにFFTをかける
  • この手法をSTFT(短時間フーリエ変換)と呼ぶ
  • STFTの結果を、時間×周波数×パワーの2次元画像として可視化したものがスペクトログラム
  • フレームを切り出す際は、端で波形が不連続にならないよう、窓関数(Hann窓など)をかけてから変換するのが一般的

メル尺度(Mel scale)とは

  • 人間の聴覚は、低い周波数の変化には敏感だが、高い周波数になるほど変化を感じにくくなる
  • この人間の知覚特性に合わせて周波数を変換した尺度がメル尺度で、以下のような式で変換する
$$ m = 2595 \log_{10}\left(1 + \frac{f}{700}\right) $$
  • $f$が実際の周波数(Hz)、$m$がメル尺度上の値
  • 低周波数では実周波数とほぼ線形の関係になり、高周波数になるほど圧縮されていく
  • 700と2595という定数は、理論から導かれたものではなく、「1000Hzの音=1000mel」という基準点を通るように、心理音響実験のデータへ対数カーブをフィットさせた近似式のパラメータ

log-melスペクトログラムとは

  • 音声をSTFTでスペクトログラムにした後、周波数軸をメル尺度に沿ったフィルタバンク(メルフィルタバンク、通常20〜80程度)でまとめ、さらにdB(対数)に変換したもの
  • 音声認識・話者認識・音声合成など、ディープラーニングを使う音声モデルで、生波形の次によく使われる入力表現

MFCC(Mel-Frequency Cepstral Coefficients)とは

  • log-melスペクトログラムに、さらにDCT(離散コサイン変換)をかけて得られる係数
  • DCTによって、隣り合うメルバンド同士の相関(情報の重複)を取り除き、少ない次元(通常12〜13次元程度)に情報を圧縮できる
  • 音声認識・話者認識で長年使われてきた定番の特徴量
  • 近年はディープラーニングの発展により、DCTで圧縮する前のlog-melスペクトログラムをそのまま入力に使うケースも増えている
    • 次元圧縮の仕方を人間が設計するより、ニューラルネットワーク自身に学習させた方が精度が良いことが多いため

モノラルとステレオ

  • チャンネル数: 1本のマイクで録音したものがモノラル、2本(左右)で録音したものがステレオ
  • 音声認識・VADなどの処理では、扱いを単純にするため、まずモノラルに変換してから処理することが多い

フォルマント

基本周波数 vs. フォルマント

  • 周波数
    • 音の高さを表す基本的な物理量
    • 音を構成する振動の速さ
  • 基本周波数
    • その音が1秒間に何回くり返されているかを表す、いちばん基本の周波数
    • たとえば声帯が1秒間に100回振動していれば、基本周波数は 100 Hz。200回なら 200 Hz
    • 一般にF0が高いほど「高い声」、低いほど「低い声」と感じる
    • 重要なのは、実際の声にはF0だけが入っているわけではないこと
    • たとえばF0が100 Hzなら、声には 100 Hz、200 Hz、300 Hz、400 Hz… のような成分が含まれる
    • 100 Hzが基本周波数、その整数倍の200、300、400 Hz…が倍音となる
    • F0 → 声の「音程・ピッチ」に強く関係
  • フォルマント(formant)
    • 声の中で特に強く響いている周波数帯
    • つまり、声道の共鳴によって強められる周波数帯域の事
    • 母音の調音においては、フォルマントは複数現れる
    • F1, F2… → 声の「母音・声質」に強く関係

基本周波数の基音 vs. 倍音

基本周期波は「基音」と「倍音」から構成される。

  • 基音(fundamental tone)
    • f と同じ高さの周波数の成分を指す
    • 「第一倍音」(first harmonic; H1)とも呼ばれる
    • 通常は、周期波の複数の成分のうち最も低い成分になる
  • 倍音(harmonic)
    • 基音の整数倍の周波数の成分を指す
    • 例えば、200 Hz の周期波は、200 Hzの基音と、400 Hz、600 Hz、800 Hz … の倍音によって成り立っている

200 Hz の周期波のスペクトルの例

倍音は必ず基音の周波数の整数倍になるので、倍音の周波数の間隔は基本周波数と等しくなる。

1
2
3
4
5
6
200      400      600      800      1000 Hz
 │        │        │        │         │
 H1       H2       H3       H4        H5
 └─200Hz─┴─200Hz──┴─200Hz──┴─200Hz──┘
      間隔 = f₀

共鳴と振動

  • 共鳴(きょうめい)
    • 同じ振動数を持つ別の物体がその影響を受けて一緒に揺れ動き、音が大きくなる現象
    • ある物体が特定の振動数(固有振動数)で揺れているときに発生する
    • 「ア」を高い声や低い声でだすのは、共鳴を一定に保って音源の周波数を変化させているということ
  • 声道(せいどう)
    • 声帯から口唇(くちびる)や鼻孔に至るまでの空気の通り道(空洞部分)
    • 共鳴は、声道によってもたらされる
    • 例えば、「ア」と「イ」では声道の形状が大きく異なる
  • 声帯振動
    • バイオリンであれば弦の振動のように音を出すメカニズム
    • 声の高さは基本的に、声帯振動の周波数と関わっている

第一フォルマント vs. 第二フォルマント

  • 第一フォルマント(first formant; F1)
    • 一番低いフェルマント
  • 第二フォルマント(second formant; F2)
    • 次に低いフェルマント

日本語の「イ、エ、ア、オ、ウ」のサウンド・スペクトログラム

  • 上図は、日本語の「イ、エ、ア、オ、ウ」のサウンド・スペクトログラム
  • ここで横長の黒い帯のように見えるのが、フォルマント
  • 母音によってフォルマントが異なる周波数に現れている

日本語の「イ、エ、ア、オ、ウ」のサウンド・スペクトログラムとピーク

  • Praatでフォルマントのピークを自動で検出し、赤いドットでプロットすると、上図のようになる
  • 各母音において、一番下の赤線が第一フォルマント(F1)、下から2番目の赤線が第二フォルマント(F2)を表している

日本語の5母音のフォルマント計測値

  • 各母音の時間軸上の中央における第一フォルマント(F1)と第二フォルマント(F2)を計測し、表にまとめると、上のようになる

日本語のフォルマントの散布図

  • それを散布図にすると上になる

日本語のフォルマントの散布図(F1を縦軸、F2を横軸にし、それぞれの軸を反転させたもの)

  • それを入れ替えると、上になる

IPAにおける母音チャート

  • 母音の音響分析においては一般に、第一フォルマントと第二フォルマントに注目する
  • 多くの言語において、母音の音響的特徴はこの二つの変数によって捉えることができる

音声処理でよく使われる特徴量

ゼロ交差率(Zero-Crossing Rate, ZCR)とは

  • 波形が正から負、または負から正に切り替わる回数を、一定区間内で数えた指標
  • 以下のような式で表される
$$ \text{ZCR} = \frac{1}{2(N-1)} \sum_{i=1}^{N-1} \left| \text{sign}(x_i) - \text{sign}(x_{i+1}) \right| $$
  • $\text{sign}(x)$は、$x$の符号(正なら1、負なら-1)を返す関数
  • 隣り合うサンプルの符号が変わるたびに差の絶対値が2になるので、それを$2(N-1)$で割ることで「切り替わった割合」になる
  • 高い周波数成分が多いほどZCRは大きくなる傾向がある
  • 無声子音(s、shなど、声帯を震わせずに出す音)はノイズに近い波形になりやすく、ZCRが高くなる
  • 逆に母音のような有声音は、周期的な波形になりやすく、ZCRは低くなる傾向がある
  • 古典的なVADでは、エネルギー(音量が小さい=無音)だけでなく、ZCR(ノイズっぽい波形かどうか)も組み合わせて判定に使うことがある

基本周波数(F0・ピッチ)とは

  • 声帯の振動によって生まれる、音の高さを決める周波数
  • 有声音(母音など、声帯が振動する音)にはF0が存在し、無声音(子音の一部など、声帯が振動しない音)にはF0が存在しない
  • F0が検出できるかどうかは、有声音/無声音の判定や、話者の特定(声の高さの特徴)に使われる
  • 抽出方法としては、自己相関関数を使う方法、YINアルゴリズム、CREPEのようなディープラーニングベースの手法などがある

スペクトル重心・スペクトル平坦度とは

  • どちらも、周波数スペクトル(音をどの周波数がどれだけ含むかに分解したもの)の形状を要約する指標
  • スペクトル重心(Spectral Centroid)は、スペクトルの「重心」にあたる周波数
$$ \text{Centroid} = \frac{\sum_{k} f_k \, S(f_k)}{\sum_{k} S(f_k)} $$
  • $f_k$が周波数、$S(f_k)$がその周波数のパワー
  • 値が高いほど高周波成分が多く「明るい」音、低いほど「こもった」音という印象になる
  • スペクトル平坦度(Spectral Flatness)は、スペクトルがノイズのように平坦か、特定の周波数に偏っているかを表す指標
  • 幾何平均と算術平均の比で計算され、1に近いほどホワイトノイズのような平坦なスペクトル、0に近いほど特定の周波数(ピッチなど)に偏ったスペクトルになる

まとめ

  • 音は空気の振動で、振幅(音量)・周波数(音の高さ)・位相という要素で表される
  • デジタル化は、サンプリング(時間方向の離散化)と量子化(振幅方向の離散化)の2段階で行われ、その生データがPCM
  • サンプリング定理により、記録したい最大周波数の2倍以上のサンプリング周波数が必要になる
  • 音声ファイルには、非圧縮(WAV)・可逆圧縮(FLAC)・非可逆圧縮(MP3など)がある
  • FFT・STFTを使うと、波形を周波数領域(スペクトログラム)に変換して、音の中身を分析できる
  • RMS・dB・dBFS・SNRは、音の大きさやノイズとの関係を表すための一連の指標
  • メル尺度は人間の聴覚特性に合わせた周波数の圧縮で、log-melスペクトログラムやMFCCの土台になっている
  • ZCR・F0・スペクトル重心/平坦度は、VADや音声分類などで昔からよく使われてきた古典的な特徴量

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。