music4

本日の内容(10/30)
• (以下、前回資料と重複あり)
• 音響データの分析
– フーリエ級数、フーリエ変換
– 離散フーリエ変換(DFT)、
高速フーリエ変換(FFT)
– 自己相関
– Cepstrum, LPC, MFCC
• 音楽的な性質(調・調性、拍節構造)
• 音楽情報科学について(導入)
1
音響データの分析
• 音響信号データから、もとの音の大域的性質
を表す特徴量を抽出する。
• とりわけ音の高さ(音高)、強さに関する情報
が基本的かつ重要。
– 高さ: 音の周期的な時間変化
– 強さ: 音のパワー値(振幅の2乗平均に対応)
• さらに楽器音識別、音源定位、音源分離等。
2
音の成り立ち(単音)
• 時間的区分
– 立ち上がり部分(アタック attack)
• 楽器音の識別、
音声の子音の識別など
ピアノ
– 持続部分
• 音の高さ。ある程度定常的だが、
時間的な変化もある
• 時間変化
– 減衰音(ピアノ、打楽器等)
– 持続音(管楽器、弦楽器等)
– ピッチの時間変化
• ヴィブラート(演歌のこぶしなども)
• 音高変化: chirp 音、グリッサンド
0.05
0.04
0.03
0.02
0.01
0
-0.01
-0.02
-0.03
-0.04
-0.05
0
0.2
0.4
0.6
0.8
1
1.2
1.4
リコーダー
3
“ADSR” (エンベロープ形状の図式)
• もともとはシンセサイザーのパラメタについて言
われた。
–
–
–
–
Attack(立ち上がり)
Decay(減衰)
Sustain (保持)
Release (開放、残響)
• 実際の楽器音の特徴づけなどにも転用される
• エンベロープ(envelope: 包絡線)
– 時系列データ、スペクトルなどについて、細かい変動
を平滑化して大まかな形状を取り出したもの
4
参考:歌声分析・合成
• 音声では、母音に応じて特定の周波数成分
が強くでる。これを「フォルマント(formant)」
と言う。
• フォルマントをうまく合成すれば音声らしく
聞こえる。
• 子音の合成はもっと難しい。
• Singer’s formant: 主にクラシック歌手に
特有の歌声のフォルマント(3000Hz 付近)
5
歌唱のフォルマント(テノール)
A
800-1200 Hz
E
I
400-600 Hz
2200-2600 Hz
200-400 Hz
3000-3500 Hz
O
400-600 Hz
U
200-400 Hz
6
分析方法の種類
• 時間領域での分析(波形データの分析)
– 音のアタック部分、時間変化の分析
– 波形自体の直接的な分類・比較はあまり意味が
ない(位相差が聴取にあまり影響しない)
• 周波数領域での分析(スペクトルの分析)
– 波形データのフーリエ変換結果(スペクトル)を用
いた分析
– 周波数情報についての精密な情報が得られる
7
音の高さ (1) (復習)
• (以後しばらくは単音について取り上げる)
• 一定の高さ感(ピッチ感)のある音は、
一定の周期で波形が繰り返される。
• この周期を周波数単位で表したものが
「基本周波数」 fundamental (frequency)
• 楽音: ピッチ感のある音
通常の楽器音
• 噪音: ピッチ感のない音
打楽器音(シンバル、ドラム、...)、 white noise
中間的: 鐘、銅鑼など
8
音の高さ (2): 周波数成分
• 「重ねあわせの原理」
2つの音 S1(t) と S2(t) とを同時に鳴らした音 S(t) は
S(t) = S1(t) + S2(t)
で表される。
• 最も「単純な」音(純音)は三角関数(サイン波)として
表せる。
S(t) = Asin(2πf t +α) = Asin(ωt +α)
(A: 振幅、f: 周波数、ω=2πf : 角周波数、α:位相)
• 純音でない音を複合音などと言う。
9
音の高さ (3): Fourier 展開・級数
• (詳細は授業補足資料 wave2.pdf 等を参照)
• 楽音(ピッチ感のある音) S(t) は、基本周波数 f の整数倍
の周波数の音の重ね合わせ(離散スペクトル)。
2πf =ωとおくと:
S(t) = a0 /2 + a1 cos ωt + a2 cos 2ωt + a3 cos 3ωt
+ ... + an cos nωt + ...
+b1 sin ωt + b2 sin 2ωt + b3 sin 3ωt
+ ... + bn sin nωt + ...
• 基本周波数の音: 基音
周波数 nf の音: (基音の)第 n-1 倍音
an, bn : 第 n-1 倍音の振幅
10
重ね合わせによる合成の例
• 矩形波(n=11, n=103)
*** n = 11: add 1/11 sin(11*t) ***
1.5
*** n = 103: add 1/103 sin(103*t) ***
1.5
1
1
0.5
0.5
0
0
-0.5
-0.5
-1
-1.5
0
-1
1
2
3
4
5
6
7
-1.5
0
1
2
3
4
5
6
7
• Gibbs 現象: S(t) の不連続部分でスパイクが
生じる。
11
周波数分布(離散スペクトル)
• 原理(三角関数の直交性)
S(t) = a0 /2 + a1 cos ωt + a2 cos 2ωt + a3 cos 3ωt
+ ... + an cos nωt + ...
+b1 sin ωt + b2 sin 2ωt + b3 sin 3ωt
+ ... + bn sin nωt + ...
(1)
 S (t ) cos ntdt

(2.2) πbn =  S (t ) sin ntdt
• (2.1) πan =
•
2
0
2
0
• (一般には連続分布(フーリエ変換)になる。)
12
参考:フーリエ級数の収束性
• S(t) が前スライド (1) のように表せる場合、
S(t) は f (2πf =ω)を基本周波数とする周期関
数である。
⇒ これはまあ、明らか
• 問題はその逆: 任意の周期関数は sin, cos
の級数として表せるか?
– 連続関数の場合に成り立つことは比較的容易
– 問題は不連続関数の場合
これについては、19世紀数学のかなりの部分がこ
の解明に関わっている大問題
13
複素フーリエ級数・変換
i
e
 cos   i sin 
• オイラーの定理:
を用いると、cos, sin の組と複素指数関数を相互に行
き来できる。
S (t ) 

c e
n  
n
i nt


 c cos nt  i sin nt 
n  
n
• 数学的には複素指数関数のほうが扱いやすいので、
フーリエ級数を複素数で表すことも多い。さらにフーリ
エ変換(後述)は複素数で表すのが普通。
• (詳しくは授業資料 3.2 等を参照)
14
フーリエ変換(導入)
• 基本周波数が ω でない(場合によっては周
期的でさえない)音 S(t) について、(2.1, 2.2)
によりフーリエ係数を計算するとどうなるか
• ⇒ωが十分細かければ、S(t) の周波数成分の
付近にピークが現れる(デモ、資料参照)
• 周期 T→0(ω→∞)の極限をとれば、周波数
成分分布が得られる ⇒「フーリエ変換」
15
フーリエ変換(連続スペクトル)
• 信号関数 S(t) に対し、次式で表される S*(ω)
を S(t) の「フーリエ変換」という。

S ( )   eit S (t )dt
*

• S*(ω) は S(t) の角周波数 ω 成分の大きさを
表す。( S*(ω)自身は複素数値なので、実際
にはその絶対値をとった |S*(ω)| が大きさを表
す。)
– 実際の計算では、S(t) は有限範囲でしか与えら
れず、上も有限範囲の積分となる。
16
離散フーリエ変換(DFT)
• フーリエ変換の離散化。
(discrete Fourier Transform)
• 有限個の離散的な信号データ x0, x1,..., xn-1
に対して(複素)フーリエ級数展開を適用:
• 結果は(複素)フーリエ係数値 fj
• このとき fj にも周期性がある(上の j の範囲だけし
か値が得られない)。
• 上の計算は行列・ベクトルの計算として実行できる
17
高速フーリエ変換(FFT)
• 離散フーリエ変換(DFT)を効率的に計算するため
のアルゴリズム (Fast Fourier Transform)
– Cooley & Tukey 1965 による。
• 原理は、行列計算で同じ計算になる部分をうまく
まとめて、1回の計算で済むようにすること。
– これにより計算量が通常の O(N2) から O(Nlog N) 程度
にまで減少する。
• DFT の計算だけでなく、応用範囲が広い。
• 基本的には N=2n の場合に適用されるが、拡張に
より一般の N にも利用可能。
18
DFT/FFT で得られる値
• 周波数分解能: データ点数に依存。
– サンプリングレート Fs、データ点数 N のとき、得られ
る周波数成分は Fs/N 単位。
例えば Fs = 44100 Hz、N=2048 の場合、
44100/2048 = 21.5 Hz おきの値になる。
• 窓幅(=データ点数)を大きくすればより精密な
周波数値が得られるが、一方では信号の時間
変化を平均化して取り込んでしまう。(デモ)
• つまり周波数精度と時間精度とは相補的関係に
ある(=「不確定性原理」)。
19
STFT, 窓関数
• FFT は短い窓幅に適用するのが普通。
(N = 1024, 2048 等)
STFT (Short Term Fourier Transform)
• 窓の両端では変換結果が歪むことになる。
• 主として周波数分解能改善のため、様々な窓関
数を乗じてから FFT を行う。
–
–
–
–
–
矩形窓(原データのまま)
Hanning 窓
Hamming 窓
Gaussian 窓
等々
20
基本周波数の抽出
• 得られた周波数スペクトルから、
基本周波数 f0 を抽出する。
• 実際には周波数スペクトルを得ることより、こち
らのほうがいろいろ難しい点が多い。
• f0 の求め方:
–
–
–
–
まずピーク値(極大値)を求める。
最大点が f0 ..... とは限らない。
フィルタの利用(櫛形フィルタ、ガウシアンフィルタ)
ケプストラム(再フーリエ変換)
21
自己相関 (Autocorrelation)
• 時間領域での周波数抽出法。
• (ほとんど周期的な)信号 S(t) を、時間的に少し
ずらした S(t+τ)と重ねて一致度を見る。

A( )   S (t )S (t   )dt

• τが周期(の整数倍)であれば一致度が大きく、
そうでなければ一致度は低い(逆位相であれば
負の大きな値になる)と予想される。
• ピークとなる正のτの最小値が周期に対応。
(基本周波数はその逆数)
• 離散データでは1点ずつずらして重ね合わせれ
ば(乗算すれば)よい。 ⇒デモ
22
基本周波数の抽出(続)
• フィルタ
– 特定の周波数帯域だけを通す関数(フィルタ関数)を
ずらしながら乗じて、極大値となる点を求める。

G( )   S (t ) F (t   )dt

– 周波数方向の対数値をとるとオクターブごとに周期
性がある。
• ケプストラム
– スペクトル自体に周期性がある:
– 周波数方向を対数値にとったスペクトルにフーリエ変
換をかける。最大ピークが f0 になる。
– これを応用した MFCC (Mel frequency cepstrum
coefficients) が実用でも多く利用されている。
23
残された問題
• f0 決定の問題点: オクターブエラーなど
• 複数音が同時に鳴っている場合(音源分離)
– それぞれの音のスペクトルが重なっている。
– 原理的には分離は不可能、しかし様々な手掛かりは
ある。
• 既知のスペクトル分布の利用
• アタック部分の情報
• 音の時間変化(のパターン)
• アタックなど、非定常部分、時間変化の解析
24