3-1

第 3 章 スペクトル分析

音声認識のためのスペクトル分析の目的は，音声波形から，たとえば「あ」と「い」をうまく区別するための特徴を抽出することです．「あ」と「い」を発音す
るとき，我々は舌の位置や口の構えなどを変化させています．「あ」と「い」の区別は，声の高さを変えても話す人が変わっても変わりません．音声認識に必要なのは声の高さや声の個人性といった特徴ではなく，発声器官，とりわけ声道（vocal tract）の形に関する特徴です．

3.1

短時間フレーム分析

スペクトル分析では，音声波形から連続する短い時間区間（数十 ms）を切り出し，切り出された信号が定常信号であると仮定して分析を行います．切り出す
単位をフレーム（frame）といいます．一定の幅の短時間のフレームを一定の幅で時間軸方向にずらし，フレームの範囲の音声波形データを切り出して分析し，
1
スペクトル特徴量（特徴ベクトル）を求めます（図 3.1）
．この処理をフレーム

が音声波形の終端に達するまで繰り返します．このような分析を短時間フレーム
分析（short time frame analysis）といいます．
一度に切り出す音声波形の長さをフレーム幅（frame width）といいます．フ
レームのずらし幅をフレームシフト（frame shift）といいます．普通，フレー
ムシフトはフレーム幅より小さく設定し，隣り合うフレーム同士が一部重複する
ようにします．音声認識では，フレーム幅は 20 ms から 40 ms，フレームシフト
は 5 ms から 25 ms の範囲のものが使われます．
フレーム分析で得られた一連のスペクトル特徴ベクトルを時間順に並べたもの
を音声認識の観測系列 O = o1 o2 · · · oT （T はフレーム数）として用います．Dを音声波形の継続長，W をフレーム幅，S をフレームシフトとすると，この音声を分析するときのフレーム数は ⌊D−(W −S)⌋ です2 ．例えば，1 s（=1000 ms）
Sの音声をフレーム幅 32 ms，フレーム間隔 10 ms で分析する場合，フレーム数は⌋ = ⌊97.8⌋ = 97 となります．
T = ⌊ 1000−(32−10)
10

3.2

高域強調

人間の音声の周波数成分のパワーは，有声音の場合 −6 db/oct，つまり周波数が 2 倍になるごとに 6 dB 下がる性質を持っています．これは次のような理由によります．音声を生成する過程は，(1) 音源の生成（有声音源・無声音源），(2) 声
1 各フレームの分析は，隣接フレームとの関係を考慮せず，個別に行ないます．
2 ⌊ ⌋：床関数．⌊x⌋ は実数 x に対して x 以下の最大の整数．

第 3 章 スペクトル分析

3.2 高域強調

speech waveform s

Frame (Window) duration

Frame (Window) period

xN

x1 x2

Speech Samples: X = x1,..., xN

Pre-Emphasis

H(z) = 1−az−1, xn ← xn− axn−1

Windowingxn ← wn xn , wn = 0.54 − 0.46 cos

Fourier Transform

Xk =

2

N−1

−j

xn e
Σ
n=0

2πnk
N ,

2π n ,
N−1

0

n

N−1

k=0, 1, ..., N−1

DFT Power| Xk |

aL

a1 a2

Wk, j
Mel-Scale Filter Bank
j=1

m1 m2

mP

Discrete Cosine Transform
c1 c2

cQ

j=P

k

energy in each band: M = m1,..., mPci =log m cos ( πi ( j−0 . 5 ) ) , i = 1,..., Q.
Σ
P
√
2
P

P

j

j=1

Mel-Frequency Cepstrum Coefficient: C = c1,..., cQ

図 3.1: 音声波形からスペクトル特徴量 MFCC を計算する手順
道による調音，(3) 口・鼻からの放射の 3 つの作用の組み合わせとして，モデル化することができます（2.1.1 節）．有声音源はパルス列として近似することができるのですが，これはかなり強い高域減衰特性 −12 db/oct を持ちます．一方，放射特性は，逆に+6 db/oct の特性を持つので，最終的に音声は有声音の場合，−6 db/oct の特性を示すことになるのです（図 3.2)．

3-2

第 3 章 スペクトル分析

3.2 高域強調(1) 音源(2)(3)-12 db/oct

音声

パルス
（有声音）

-6 db/oct+6 db/oct

t

声道調音
フィルタ

0 db/oct
雑音
（無声音）

放射

t

図 3.2: 音声生成の工学的モデル
この実験で我々が音声のスペクトルを計算する目的は，スペクトルに現れる音
韻性（「あ」と「い」の性質の違いなど）の抽出です．音韻性は主として舌の形による声道調音フィルタの特性に由来します．したがって，音韻性の情報をより有効に利用するための最初の処理として，音声スペクトルの −6 db/oct の傾斜を元に戻します．すなわち，音声分析の前に +6 db/oct の補正を行います．これを高域強調（pre-emphasis）といいます．この処理は，音声振幅波形サンプ
ル xn に対する差分演算，

xn ← xn − αxn−1 ,n = 1, . . . , N

あるいは 1 次のディジタルフィルタ

H(z) ≜ 1 − αz −1
によって行います．ここで，α は 1 に近い値（本実験では 0.97）に設定します．
図 3.3 は，母音「あ」について高域強調のスペクトルに対する効果を示したものです．この処理により高周波数成分のパワーが持ち上がっているのがわかります．高域強調によってスペクトルが平坦化されるので，信号のダイナミックレン
ジを圧縮し，実質的に SNR3 を向上させる効果もあります．

40

対数パワー [dB]

20
0
-20
-40

高域強調無し高域強調有り

-60
-80

0

1000

2000

3000

4000

5000

6000

7000

8000

周波数 [Hz]図 3.3: 高域強調の有無による「あ」の対数パワースペクトルの違い．
3 Singal-to-Noise Ratio： 信号対雑音比．値が大きいほど良い．

3-3

第 3 章 スペクトル分析

3.3

3.3 窓関数

窓関数

フレームで切り出した音声波形の端点は不連続になるので，信号の周期性を前提としたフーリエ変換などのスペクトル分析には不都合です．フレームの切り出しによる不連続の影響を低減するために，切り出した区間の両端の振幅を小さくするように重み関数を掛けることが行われます．このような関数を窓関数（window function）といいます．
音声分析で良く用いられる窓関数の１つにハミング窓（Hamming window）
があります．この窓 wn は，

wn ≜ 0.54 − 0.46 cos

2πn
,
N −1

0≤n≤N −1で定義され，図 3.4（a) のような形をしています．この窓を，音声振幅波形サン
プル xn に掛け，

xn ← w n xn ,n = 1, . . . , Nとしたものをスペクトル分析の入力として用います．図 3.4（b) は実際の音声波形からフレームで切り取った波形，その波形にハミング窓を掛けた後の波形です．

1

(a)

wn

wn = 0.54 − 0.46 cos

2πn
N−1

0.08

0

0

N-1

n

Original Waveform
Amplitude

(b)
30000
0
-20000

Amplitude

Windowed Waveform
30000
0-20000
0

50

100
150
Sample Number

200

250

図 3.4: ハミング窓：（a) 窓関数，（b) 音声波形（上段）と窓掛けした音声波形
（下段）．

3-4

第 3 章 スペクトル分析

3.4

3.4 離散フーリエ変換

離散フーリエ変換

音声波形サンプル x1 , . . . , xN についての離散フーリエ変換（Discrete Fourier

Transform: DFT）対は，
Xn

=

N
−1
X

xk e−j2πnk/N

k=0
N −1

xk

=

1 X
Xn ej2πnk/NN
k=0と定義されます．DFT を効率的に計算する手法として高速フーリエ変換（Fast

Fourier Transform: FFT）があります．実習のプログラムでは FFT を用いています．FFT のアルゴリズムについては，信号処理の教科書およびソースコー
ド~/asr/wrecog/program/ad2fb.c を参照してください．

3.5

メル周波数

聴覚の周波数分解能は，低い周波数では高く，高い周波数では低いというように，周波数に対して非線形の特性を持っています．スペクトル分析をこの非線型特性に基づいて行うと，音声認識で良い結果が得られることが知られています．
聴覚の非線型特性を反映した周波数として良く用いられるものとしてメル周波数（Mel-frequency）があり，周波数 f [Hz] とは，Mel(f ) ≜ 2595 log10 (1 +f
) [Mel]700という近似関数 (図 3.5) で対応づけられることが知られています．

3000

Frequency [Mel]

2500
2000
1500
1000
500
0
0

1000 2000 3000 4000 5000 6000 7000 8000
Frequency [Hz]図 3.5: 周波数からメル周波数への変換関数 Mel(f )3.6

フィルタバンク分析

聴覚の周波数に対する対数的特性を反映した分析方法です．まず，フレームで切り出して，高域強調をし，窓関数を掛けた音声波形サンプルをフーリエ変換

3-5

第 3 章 スペクトル分析

3.6 フィルタバンク分析

し，パワースペクトル |Xk |2 を求めます．つぎに，パワースペクトルをメル周波
数軸上で等間隔，つまり，普通の周波数軸上では周波数が高くなるほど幅が広くなる三角窓が並んだフィルタバンク（ﬁlterbank）で処理をします．各三角窓の範囲をチャネル（channel）といいます．三角窓毎に窓の範囲にあるパワースペ
クトル |Xk |2 に対して4 ，窓の重み Wk,j を掛けて和をとることにより，そのチャ
ネルの出力

mj ≜

1
Aj

X

khi (j)Wk,j |Xk |2 ,j = 1, . . . , P(3.1)

k=klo (j)を計算します．P はチャネル数です．フィルタの重み Wk,j は，Wk,j ≜

k − klo (j)

,



k
 c (j) − klo (j)






klo (j) ≤ k < kc (j)(3.2)

khi (j) − k, kc (j) ≤ k ≤ khi (j)khi (j) − kc (j)となります．klo (j)，kc (j)，khi (j) はそれぞれ j 番目のフィルタの下限，中心，上限のスペクトルの要素番号であり，隣り合うフィルタ間で kc (j) = khi (j−1) = klo (j+1)という関係があります．中心周波数 kc (j) はメル周波数軸上では等間隔に並んでいます（図 3.6）．3.1 式の Aj はフィルタの面積を正規化する係数で，Xkhi (j)

Aj ≜

Wk,j

(3.3)

k=klo (j)で定義されます．
フーリエ変換によって得られたスペクトル（図 3.3）には，細かく変化するギザ
ギザの波形と大きく変化する凸凹があります．前者は有声音の音源（図 3.2）に由来する成分で，音源の基本周波数とその高調波成分です．後者は声道調音フィ
ルタの特性を表わす成分です．各チャネルの帯域は基本周波数に比べてずっと広いので，チャネル内での積和計算（＝平均化）により高調波の影響が相殺されます．結果として，フィルタバンク出力には，声道調音フィルタ特性の概形が得られることになります．

j-1

j

j+1

klo( j)kc( j)khi( j)kc( j-1)khi( j-1)

kc( j+1)

Frequency [Mel]klo( j+1)

図 3.6: MFCC を計算するためのフィルタバンクの三角窓

4 振幅スペクトル |X

k | を用いる計算法もあります．

3-6

第 3 章 スペクトル分析

3.7

3.7 メル周波数ケプストラム係数（MFCC）

メル周波数ケプストラム係数（MFCC）

フィルタバンク分析によって得られた各チャネルの出力 mj (j = 1, . . . , P ) の
対数を離散コサイン変換（Discrete Cosine Transform: DCT）
r


P
2 X
πi
ci ≜
(j − 0.5) , i = 1, . . . , Q
log mj cos
P
P

(3.4)

j=1

することにより，メル周波数ケプストラム係数（Mel-Frequency Cepstrum

Coeﬃcient: MFCC）が得られます．Q はケプストラムの次元数です．
MFCC の値はマイクロフォンの種類，マイクロフォンと口の位置関係によって変動し，音声認識の結果に影響を与えます．その変動の影響を抑えるのに有効な方法としてケプストラム平均分散正規化（Cepstral Mean and Variance

Normalization，CMVN）があります．第 t フレームのケプストラム係数ベクト
(t)

(t)

ルを ct = (c1 , . . . , cQ )，ケプストラム係数ベクトルの時系列を C = {c1 , . . . , cT }とするとき，正規化されたケプストラム ct ′ は，

1X
ct
T t=1
v
u
T
u1 X
t
(ct − µ)2
T t=1
T

µ

=

σ

=

ct ′

=

ct − µσと計算されます．ここで，µ は平均値ベクトル，σ は標準偏差ベクトルです．平均
値と標準偏差を計算する時系列 C の範囲は，音声認識処理の応用目的などによって，単語，文，段落，文章などが取られます．本実験では，単語単位の正規化を行ったものを特徴量として用いています．ちなみに，CMVN の処理は ad2mfcc.c というソースコードに記述されています．興味があれば確認しておいてください．

3.8

特徴抽出はデータ圧縮

音声波形から MFCC を得るまでの各段階でどのような結果が得られるのか，
具体例で見てみましょう（図 3.7）．本実験の分析条件の下で順を追って説明します．サンプリング周波数は 16 kHz，フレーム幅は 32 ms なので，1 フレームの音声サンプル数は 16 × 32 = 512 です．フレーム内に/a/の波形が 3 周期入っています．高域強調を行い，窓関数を掛けた音声波形のサンプル数は 512 です．
これをフーリエ変換して得た振幅スペクトル，および振幅スペクトルを 2 乗した
パワースペクトルの点数は 256 になります．スペクトルで大きな値を示しているのは/a/のフォルマント（formant）（2.2.1 節）に対応する周波数成分です．
パワースペクトルでは振幅スペクトルに比べて周波数成分の強弱が強調されています．メルフィルタバンク分析のチャネル数は 28 なので出力は 28 次元です．
チャネルの幅は低い周波数ほど広いので，スペクトルに現れているフォルマント
ピークは高周波数側が圧縮された位置で表示されています．フィルタバンク出力の対数を離散コサイン変換して得られる MFCC は 20 次元です．

3-7

第 3 章 スペクトル分析

3.8 特徴抽出はデータ圧縮

スペクトル分析の過程において，音声認識に必要な情報を抽出しつつ，パラメータ数は 512 から 20 まで 1/25.6 に減っています．画像など他のメディアのパターン認識においても，このような特徴抽出（feature extraction）によって，不要なデータを捨て，必要な情報のみを残して認識に利用しています．つまり，特徴抽出はデータ圧縮（data compression）とみることができます．

512

Amplitude#Parameter
0.4

Speech Samples

0
-0.4

1
0

512 Sample Number
32 Time [ms]25616

Amplitude

Pre-Emphasis
0.4

Pre-Emphasized
Speech Samples

0-0.4

512 Sample Number
32 Time [ms]

256
16

1
0

Amplitude

Windowing
0.2

Windowed
Speech Samples

0
-0.2

1
0

512 Sample Number
32 Time [ms]25616Fourier Transform
256

4.5

Amplitude Spectrum| Xk |
0
18

2| Xk |
0

1
0Power Spectrum

256 Sample Number
8000 Frequency [Hz]

128
4000

Mel-Scale Filter Bank
28

7

0

Filter Bank Output

28

1

ChannelDiscrete Cosine Transform
20

2.5

Mel-Frequency
Cepstrum Coefficients

0
-1.5

1

20

Coefficient

図 3.7: 512 点の/a/の音声波形をスペクトル分析し 20 次元の MFCC を計算．音声認識に必要な情報を抽出しつつ，パラメータ数は 512 から 20 まで 1/25.6 に削減することができました．特徴抽出はデータ圧縮の処理でもあるともいえます．

3-8

第 3 章 スペクトル分析

3.9

3.9 スペクトル分析例

スペクトル分析例

実際の音声のスペクトル分析例で，音の違いがどのようにスペクトルのパター
ンに現われているかみましょう．図 3.8 は/kakuritsu/（「確率」）という単語の音
声波形，スペクトログラム，音素ラベル，MFCC の値を表示したものです.
音声波形データの最初と最後には 345 ms の無音区間があります. 単語音声は

345 ms から 1000 ms に存在し，その部分では音声波形の振幅が大きくなっています（図 3.8（a））．音声波形に対応して，スペクトログラムの濃淡パターン（図3.8（b））は時間とともに絶えず変化していますが，局所的なパターンには他の部分とは明らかに異なった特徴があることがわかります. 図 3.8（c）には，この波形の音素（第 2.2 節）名および音素の開始時間と終了時間を図示しました．この情報に基づいて音声波形とスペクトログラムに音素境界を引いてあります. そのようにしてみると，音によって波形やスペクトログラムのパターンに特徴があることがわかります. 例えば，母音は 4 kHz 以下の低い周波数のエネルギーが強いこと，子音 /ts/ はその逆であること，さらに，同じ音素 /u/ であっても前後の音によってパターンに違いがみられることなどがわかります. MFCC（図 3.8（d））のパターンも，局所的に特徴のあるパターンがみられ，音素ラベルと対応(a)

Amplitude

している様子がわかります.

Waveform
0(b)Frequency [kHz]

0
8

200

400

600

1000

Time [ms]Spectrogram

40
Phoneme segments:

(c)

a

k

i

u

k

(d)

800

ts

u

r

Database labels: 345.0 k 360.0

360.0 a 465.0

465.0 k 545.0

545.0 u 610.0

610.0 r 630.0

630.0 i 735.0

735.0 ts 850.0

850.0 u 1000.0

MFCC

Coefficient #

20

0
0

20

40

60

80

100

120

140

Frame

図 3.8: 音声のスペクトル分析例（/kakuritsu/「確率」）．(a) 音声振幅波形，(b) ス
ペクトログラム（周波数成分の強さを濃淡で表わしたもの），(c) ラベル情報，(d) メ
ル周波数ケプストラム係数（MFCC）．

3-9

第 3 章 スペクトル分析

3.10

3.10 実習

実習

音声波形から MFCC を求める過程のうち，フィルタバンク分析と MFCC 分
析の計算式を C 言語でプログラムし，サンプル音声を用いて計算結果を確認します．以下の説明は，計算機実験を~/asr/wrecog で行うことを前提としています．端末を開き，事前にこのディレクトリに移動しておいてください．

フィルタバンク分析

3.10.1

program というディレクトリに ad2fb.c という C の言語のソースファイルがあります．これは，音声波形からフィルタバンク出力を計算する関数です．ただし，肝心のコードの部分が空白になっています．穴埋め指示のある部分を埋めてソースコードを完成させてください．完成したら，以下のコマンドを入力してコンパイルを実行します．

[~/asr/wrecog]% make -C program fb
ソースコードに C 言語の文法エラーがある場合は，その旨メッセージが出力されるので，エラーメッセージが出なくなるまで修正してください5 ．文法エラーがない場合は，fb というコマンドができています．これは，音声波形を分析してフィルタバンクを出力するコマンドです．プログラムが正しく出来ているか確認しましょう．端末で，次のように入力して，計算確認用のサンプル音
声~/asr/wrecog/sample/sample.wav を分析し，結果を./mysample.fb に保存します．

[~/asr/wrecog]% fb sample/sample.wav ./mysample.fb
このファイルと正解ファイルを比較して同じであれば，フィルタバンク分析のプログラムが正しく書けていることになります．比較のために，[~/asr/wrecog]% head -28 sample/sample.fb ./mysample.fbと入力し，正解と自分の分析結果の第 1 フレームのフィルタバンク出力値を表示します．1 列目は時間 [ms]，2 列目はチャネル番号，3 列目はフィルタバンク
出力値です．

[~/asr/wrecog]% head -28 sample/sample.fb ./mysample.fb==> sample/sample.fb <==10.0

1

6.926785e-04

10.0

2

5.409857e-01

10.0

3

4.872707e-01

（中略）

10.0

26

4.739638e-02

10.0

27

2.987086e-02

5 コンパイル時にエラーメッセージが出なくなっても，プログラムの内容に間違いがないとは限り
ません．

3-10

第 3 章 スペクトル分析

10.0

28

3.10 実習2.556659e-02==> ./mysample.fb <==10.0

1

6.926785e-04

10.0

2

5.409857e-01

10.0

3

4.872707e-01

（中略）

10.0

26

4.739638e-02

10.0

27

2.987086e-02

10.0

28

2.556659e-02

この実行例では数値が一致していますが，計算の順序などによっては数値計算の誤差により若干異なる数値になることがあります．その場合でも，少数点以下

5 桁まで一致していれば問題ありません．

3.10.2

MFCC 分析

program というディレクトリに fb2mfcc.c という C の言語のソースファイルがあります．これは，フィルタバンク出力から MFCC を計算する関数です．ただし，肝心のコードの部分が空白になっています．穴埋め指示のある部分を埋めてソースコードを完成させてください．完成したら，以下のコマンドを入力してコンパイルを実行します．

[~/asr/wrecog]% make -C program mfccf
ソースコードに C 言語の文法エラーがある場合は，その旨メッセージが出力されるので，エラーメッセージが出なくなるまで修正してください．文法エラーがない mfccf というコマンドができています．これは，音声波形を分析して MFCCを出力するコマンドです．プログラムが正しく出来ているか確認しましょう．端末で，次のように入力して，計算確認用のサンプル音声 sample/sample.wav を分析し，結果を./mysample.mfcc に保存します．

[~/asr/wrecog]% mfccf sample/sample.wav ./mysample.mfcc
このファイルと正解ファイルを比較して同じであれば，MFCC 分析のプログラムが正しく書けていることになります．比較はつぎのように行います．.mfcc
ファイルはバイナリ形式なので，まず，prtmfcc コマンドによって，テキスト形
式のファイルに変換します．

[~/asr/wrecog]% prtmfcc ./mysample.mfcc > ./mysample.mfcc.txt
つぎに，[~/asr/wrecog]% head -20 sample/sample.mfcc.txt ./mysample.mfcc.txtと入力し，正解と自分の分析結果の第 1 フレームのフィルタバンク出力値を表示します．1 列目は時間 [ms]，2 列目は次元番号，3 列目は MFCC の値です．

3-11

第 3 章 スペクトル分析

3.10 実習[~/asr/wrecog]% head -20 sample/sample.mfcc.txt ./mysample.mfcc.txt==> sample/sample.mfcc.txt <==10.0

10.997497

10.0

2-2.034434

10.0

31.693631

（中略）

10.0

18

2.06219210.0

19-1.878791

10.0

20

-0.653017==> ./mysample.mfcc.txt <==10.0

10.997497

10.0

2-2.034434

10.0

31.693631

（中略）

10.0

18

2.06219210.0

19-1.878791

10.0

20

-0.653017

この実行例では数値が一致していますが，計算の順序などによっては数値計算の誤差により若干異なる数値になることがあります．その場合でも，少数点以下

5 桁まで一致していれば問題ありません．

3-12

第 3 章 スペクトル分析

3.10 実習

音声収録の練習3.10.3

自分の声を録音してスペクトル分析をしてみましょう．ヘッドセットを用いて音声を録音し，録音した音声を聞いて正しく録音できているか検査します．普通の録音と異なり，実験用データとして音声収録を行うので，その手順には特別な注意が必要です．今回の実習のための手順を説明します．
音声の入出力を伴う実習を行うときは，音声入出力を伴う他のアプリケーショ
ン（メディアプレイヤー，YouTube や goo 辞書など）は，終了しておいてくだ
さい．WaveSurfer など実習に用いる音声入出力アプリケーションの動作に影響を及ぼすことがあります．

1. 録音(a) ヘッドセット（ELECOM HS-HP22TBK あるいは USB 接続の HSHP14SUBK・HS-HP07SUBK）のコードを解き，フレキシブルパイプの根本の固い部分を持って，180 度回転してください．マイクロフォ
ンが左側に来るようにヘッドセットを装着します．マイクロフォンの先端は口のやや下にセットします（図 3.9）．マイクロフォンの角度を変えるときは，本体の取り付け部の固い部分を回してください．
マイクアームの柔らかいアームの部分は微調整に用います．マイク
アームを急な角度で曲げたり，捩ったりしないように扱ってください．これは，できるだけマイクロフォンと口の位置関係を一定に保つ
ことにより，入力特性を安定させるためです．ヘッドセットを頭に付
けずマイクを持って録音しないようにしてください．再生音量を調整するボリュームコントローラーがありますので，確認してください（HS-HP07SUBK はボリュームコントローラーとミュートスイッチがヘッドフォン部にあります．）．

図 3.9: ヘッドセットは頭部にきちんと装着し，マイクは口のやや下にセットしてください．このイラストは HS-HP22TBK です．

(b) PC の本体前面に音声入出力ジャックがあります．ヘッドセットの 4
極ミニプラグをしっかりと奥まで差し込んでください．プラグが適切に差し込まれると「オーディオデバイスを選択」が表示されるので，「ヘッドセット」を選択してください．（図 3.10）．

3-13

第 3 章 スペクトル分析

3.10 実習① ヘッドセットの 4 極ミニプラグを② 適切に差し込まれると、「オーディオ

PC 本体前面のオーディオジャックにデバイスの選択」が表示される。

「ヘッドセット」を選択する。

しっかりと奥まで挿し込む。

OptiPlex 3080

D LL

intel

CORE i5

図 3.10: ヘッドセットの 4 極ミニプラグが適切に差し込まれると，「オーディオ
デバイスを選択」が表示される．
「ヘッドセット」をクリックする．

(c) 作業用のディレクトリ（~/asr/wrecog）に移動します．ディレクト
リの移動は端末で cd コマンドによって行います．現在のディレクト
リを確かめるためには pwd コマンドを使います．

(d) 音量調節をします．ランチャー（デスクトップの左下角）から「設定」
を起動してください（図 3.11）．

(e) メニューから「サウンド」を選択します（図 3.13）

図 3.11: 音声入出力の設定をするために「設定」パネルを起動する．アイコンの配置はユーザによって異なります．

3-14

第 3 章 スペクトル分析

3.10 実習

出力 「出力デバイス」メニューで「アナログヘッドフォン-内部オー
ディオ」を選択します．次に「テスト」クリックして，ヘッドフォ
ンの左右の音の再生を検査します．マイクロフォンが取り付けられている方が左側です．「システム音量」と「音量レベル」を調節して，聴きやすい音量にします（図 3.13）．
入力 「入力ディバイス」メニューで「ヘッドセットマイクロフォン-内部オーディオ」を選択します．次に，音量を調節します．リラッ
クスした楽な発声で適当な文を読み上げ（例えばこの文），音量の表示が 7 割付近で振れる状態になるように，スライドを調節します（図 3.14）．このパネルはデスクトップ画面に出したままにしておいてください．「サウンド」設定パネルが開いだ状態でな
いと，音声が入力されないことがあります．入出力音量は実験の途中で適宜調節するとよいでしょう．HS-HP07SUBK のマイクは指向性なので，音量が大きく出ない場合はマイクの位置を上下させるなどして試してください．

USB ヘッドセットの場合 PC の本体前面の USB-A のポートに差し込んでください．4 極ミニプラグの場合のように「オーディオデ
バイスを選択」の表示（図 3.10）はありません．「出力ディバイス」では「デジタル出力（S/PDIF）- USB PnP Audio Device」
あるいは「アナログ出力 - USB PnP Audio Device」のいずれかを選択してください（どちらでもよい）(図 3.12)．「入力ディバ
イス」では「マルチチャンネル入力 - USB PnP Audio Device」
あるいは「マイク - USB PnP Audio Device」のいずれかを選択してください（どちらでもよい）(図 3.12)．その後，上記の出力
音量および入力音量の調整をします．

図 3.12: USB ヘッドセットの場合

3-15

第 3 章 スペクトル分析

3.10 実習①「サウンド」の「出力ディバイス」を「アナログヘッドフォン - 内部オーディオ」に設定する .

②「テスト」をクリックして，ヘッドフォンの左右の音の再生を検査する．
このとき，「システムの音量」と「音量レベル」を調節しておく．

図 3.13: ヘッドフォンの左右確認と音量調節

3-16

第 3 章 スペクトル分析

3.10 実習①「サウンド」の「入力ディバイス」を「ヘッドセットマイクロフォン- 内部オーディオ」に設定する .

② リラックスした楽な発声で適当な文を読み上げ（例えばこの文），

音量の表示が７割付近で振れる状態になるように，スライドを調節する．

図 3.14: 入力音量の調節

3-17

第 3 章 スペクトル分析

3.10 実習(f) WaveSurfer 6 を起動します．端末のコマンド入力で，% wavesurfer &と入力してください．

(g) 録音条件を設定します．サンプリング周波数を 16kHz，1 チャンネルに設定してください．まず，「File」メニューの「Preferences...」を選択します（図 3.15）．

図 3.15: WaveSurfer の録音条件の設定パネルの起動
つぎに，「Sound I/O」パネルの「New sound default rate:」に “16000”，「New sound default channels:」に “1” を設定します．「New sounddefault encoding:」を “Lin16”，「Record time limit:」を”600” に設定し，パネル下に表示されている「OK」ボタンを押してください（図3.16）．

6 スウェーデンの KTH が開発したオープンソースの音声分析ソフトウェア．Linux, Windows,
macOS で動作．https://sourceforge.net/projects/wavesurfer/3-18

第 3 章 スペクトル分析

3.10 実習

図 3.16: WaveSurfer の録音条件の設定．サンプリング周波数=16000Hz（16kHz），
チャネル数=1．録音時間制限は 600 秒．

(h) WaveSurfer で新しい窓を生成します．「File」メニューの「New」を選択すると（図 3.17（a）），新しい窓の種類を指定するための「Choose Con-ﬁguration」というダイアログボックスが表示されます．「Waveform」
を選択してください（図 3.17（b））．

3-19

第 3 章 スペクトル分析

3.10 実習(a)(b)

図 3.17: WaveSurfer を起動して新しい窓を作成する．

(i) WaveSurfer の窓の中央でマウスを右クリックして押したままとし，現われたメニューの「Create Pane」を選択して現われたメニューから「Time Axis」を選択して時間目盛を表示します（図 3.18）．時間目盛
は左端に「time」と表示されていますが，初期状態では空白です．

図 3.18: 時間目盛を表示する．

3-20

第 3 章 スペクトル分析

3.10 実習(j) WaveSurfer の録音ボタンを押すと収録が始まります．画面に音声波形がリアルタイムに表示されます．自分の名前（姓（family name）または名（given name）あるいはそれに相当する呼び名）を 5 回録音
してください．普通に会話をするときの自然な感じで発声してください．単語の間は 1 秒程度置くようにしてください．音量の調整はマイクの位置でも調整することができます．波形の振幅が範囲（−32768〜+32767）を超えてしまうと（図 3.19），歪んだ音声になってしまいます．歪んだ音声は音声分析・認識のデータとして用いることができません．今回は練習として 5 回発声しますが，実際に分析に用いるのは 5 つの発話のうちの 1 つです．一般に音声収録において，最初の方の発声は不安定で，中間辺りで発声された単語がサンプルとして適当な場合が多いです．2 番目以降から比較的明瞭発音のものを 1 つ選んでください．

図 3.19: 入力レベルが過大で最大値を越えた部分は音声が歪んでしまう．

(k) 停止ボタンを押して，録音を終えます．WaveSurfer は録音した音声
波形全体をバッファに蓄えています．

(l) 再生ボタンを押して，一度全体を聞きましょう．どうでしたか？ 録
音された音声が妥当かどうか判断できない場合は，スタッフに聞いてください．

(m) 録音した音声を編集します．まずは，再生ボタンを押して，一度全体を聴きましょう．5 つの中から良い発声と思うものを 1 つ選んで保存します．音声の一部だけを選んで聴きたい場合は，マウスの左ボタンを押しながら範囲を指定し，再生ボタンを押します（図 3.20）．

3-21

第 3 章 スペクトル分析

3.10 実習

図 3.20: 音声の一部を選択する．
次に，「File」メニューの「New」を選択して新しい窓をつくり，そこに 5 つの発話がある元のファイルから選択した 1 つの発話の波形をコ
ピー＆ペーストします（図 3.21）．音声の前後に 100ms（0.1s）の余
白を付けてください．横軸の表示倍率によって目盛の時間幅が異なる
ので，間違えないように十分注意してください．余白が多すぎると，スペクトル表示の結果を見たときに，音の特徴やスペクトルの変化を観察しにくくなります.

(a) 波形を選択してコピーボタンを押す(b) 新しい窓でペーストボタンを押す

図 3.21: 選択した音声をコピーして，新しい窓（バッファ）に貼り付ける．

(n) 編集が済んだ録音データをファイルに保存します．メニューから「File」→「Save As」を選択し，ファイル名を入力します．「Files of type:」は「MS Wav Files (*.wav,*.WAV)」を指定してください．ファイルを保存するディレクトリは~/asr/wrecog/wav とし，ファイル名は ‘‘名前のローマ字表記.wav’’ とします（図 3.22）．以下では，録音した音
声データファイルを takagi.wav として説明します．

3-22

第 3 章 スペクトル分析

3.10 実習wav

図 3.22:WAV 形 式 で 音 声 波 形 を 保 存 す る ．保 存 す る デ ィ レ ク ト リ は∼/asr/wrecog/wav．拡張子.wav を付け忘れないように．
(o) WAV 形式で音声データで保存されていることを確認するため，端末
で，play wav/takagi.wav と入力し，録音した音声が再生されることを確認してください．play コマンドを実行すると，ヘッドセット
から音声が聞こえ，[~/asr/wrecog]% play wav/takagi.wav
play WARN alsa: can’t encode 0-bit Unknown or not applicable
wav/takagi.wav:
File Size: 28.8k
Bit Rate: 256k
Encoding: Signed PCM
Channels: 1 @ 16-bit
Samplerate: 16000Hz
Replaygain: off
Duration: 00:00:00.90
In:100% 00:00:00.90 [00:00:00.00] Out:14.4k [ -====|====- ]Done.
[~/asr/wrecog]%

Clip:0というように端末に表示されます．“Encoding:”（波形値記録形式），”Chan-

nels:”（チャネル数および量子化ビット数），”Samplerate:”（サンプリング周波数）が上記の例と同じでなければなりません．“Duration” は
音声データの長さです．この際に表示される “rec WARN alsa: can’t

encode 0-bit Unknown or not applicable” のメッセージは無視して結構です．

2. スペクトル分析
保存した音声のフィルタバンク分析および MFCC 分析を行い，音声波形と並べて図として表示します．そのために drawspec というコマンドを使います．端末で，[~/asr/wrecog]% drawspec wav/takagi.wavと入力すると，fb と mfccf でこの音声ファイルを分析し，その結果を音声波形とともに gnuplot を用いて，図 3.23 のように表示します．
この図を PNG ファイルとして保存するときは，[~/asr/wrecog]% drawspec wav/takagi.wav png takagi.png
3-23

第 3 章 スペクトル分析

3.10 実習と入力してください7 ．図 3.23 のような出力が得られます．ただし，フィルタバンクの出力値は対数を取っています．PNG ファイルのファイル名

Waveform

は，この例のように「発話内容.png」とします．

wav/takagi.wav

0

100

200

300

400

500

600
4

Filterbank Output

25

2
0

20

-2

15

-4
10

-6

5

-8

MFCC

0

100

200

300

400

500

600

20
18
16
14
12
10
8
6
4
2

-10
4
3
2
1
0
-1
-2

0

100

200

300

400

500

600

-3

Time [ms]図 3.23: drawspec の出力例．発話は/takagi/．上から，音声波形，フィルタバ
ンク出力，メル周波数ケプストラム係数（MFCC）．横軸は時間 [ms]．
スペクトル分析の結果の図の中段に描かれるフィルタバンク出力に現れる音声のスペクトルパターンを見てみましょう．縦軸はフィルタバンクチャネル番号です．フィルタバンク出力にはメル周波数軸で分析した声道調音フィルタ特性の概形が得られます（3.6 節，3.8 節）．母音のフォルマント（2.2.1 節）に対応する
チャネルの出力値は大きいので，明るい色で表示されています．
図 3.23 は/takagi/という音声データの 50ms〜130ms 付近と 210ms〜330ms 付
近の母音/a/の区間では，第 6，第 13，および第 17 チャネル付近に明るい領域があります．母音/a/のフォルマントがここに現れているのです．この音声デー
タの 460ms〜580ms 付近は母音/i/です．明るい領域は第 3，第 16，および第 22
チャネル付近にあります．母音/a/とはフォルマントの位置が異なることが分かります．
暗い色で表示されているのはエネルギーが少ない周波数の領域です．無声子音の区間や無音声の区間に対応していることが分かります．
自分の音声データに含まれている音素の種類や位置とフィルタバンク出力のパターンの対応を観察してください．

7 drawspec はシェルスクリプトです．他の形式で保存したい場合は自分で改造してください．

3-24

第 3 章 スペクトル分析

3.10.43.10 実習

レポート（第 1 週）

1. 実習課題の目的
2. プログラミングおよびスペクトル分析(a) ad2fb.c および fb2mfcc.c の穴埋め部分．
(b) 自分の名前の分析結果（図 3.23 の形式の drawspec の出力）．第 2 章を参考にして，メルフィルタバンク出力について上記の例のような所見を，できる範囲で良いので，述べてください．メルフィルタバンクのチャネルとその中心周波数の対応は以下のとおりです.
channel
1
2
3
4
5
6
7
8
9
10
11
12
13
14

center frequency [Hz]
64
133
208
291
381
479
586
703
830
969
1120
1286
1466
1663

channel
15
16
17
18
19
20
21
22
23
24
25
26
27
28

center frequency [Hz]
1877
2111
2367
2645
2949
3280
3641
4035
4465
4934
5446
6004
6612
7276

3. 考察
4. 一般事項(a) 本日のポイントは何であったか？
(b) 良くわかったこと(c) わからなかったこと(d) 要望(e) 感想，その他 (USB 接続のヘッドセットを使用した場合はその型番を記録すること)3-25