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