このファイルは、3年春学期科目「音声情報処理」の授業において、口頭で説明する内容をテキスト(.txt)に書き起こしたものです。 事前に科目のHPにアクセスして「講義ノート」の PDF ファイルをダウンロードし、印刷しておいてください。このテキストには講義ノートの記述より多くの情報を含んでいます。講義ノートの行間に、テキストの説明を書きこんで行くことをお勧めします。最後にプリントを綴じれば、将来必要になったときに見返せる自分の「講義ノート」ができあがります。 「学生用ページ」「レポート提出システム」 から、その日の「宿題」レポートを提出してください。 〆切は 次回授業日の前日 23:59 です。 _/_/_/ 第五回 線形予測分析(1) _/_/_/ これまで数回に亘って、音声がいろいろな周波数の波(三角関数)の集合であることを学んできました。 横軸に周波数をとって、縦軸がその周波数成分の強さを表すようにグラフで表したものを「スペクトル」というのでした。 母音を発声するとき、声帯で発生する周期的音源成分には声の「大きさ」「高さ」の情報が多く含まれています。この音声信号に、声道における共振現象によって、ホルマントで特徴づけられる「音色」情報が加わります。 人間の音声が「何と言っているかわかる」ためには、この音色情報が重要になります。 前回勉強した「ケプストラム」を用いると、スペクトルのおおまかな形(概形)を求めることによって、ホルマント周波数を見つけやすくなり、母音の判定が行いやすくなります。 さて、今回から2回「線形予測分析」と呼ばれるスペクトル分析の方法を勉強します。ケプストラムもスペクトル概形を求める強力な手法でしたが、線形予測分析もまた、それに匹敵する、あるいはそれ以上に強力な手法です。 実は、線形予測は音声信号と極めて相性のいい分析手法で、現実の音声サービスにおいて多用されています。例えば、みなさんがケータイとかスマホで誰かと話をしているとき、まずは音声が線形予測を用いた手法により符号に変換され、その後に無線でデジタル通信され、通話相手の端末で復号される、といったことが、普通に身の回りで起きているのですね。 ということで、音声の線形予測分析は極めて重要な手法です。しっかり勉強しましょう。 【講義ノート】複素指数関数 では、信号処理の復習から始めましょう。 まず「複素関数」を理解しましょう。難しくありません。ある関数 out = f(in) において、入力 in 出力 out がそれぞれ実数であるような関数を「実関数」といいます。 これを拡張して、入力 in 出力 out がそれぞれ「複素数」であるような関数を「複素関数」というのです。 ・複素関数  - 定義域、値域が複素数である関数 複素数 z は実数 x, y を用いて、z = x + j y と表現することができます。 x を実部、y を虚部といいます。 x = Re(z) y = Im(z) と表現することもあります。 ここでは記号「 j 」は「虚数単位」を表しています。虚数単位を表す記号としては「 i 」がより一般的かも知れませんが、電気・通信の工学分野では伝統的に「 j 」を使います。この科目の資料中では「 j 」を虚数単位とします。 さて、指数関数 e^z を考えます。ネイピア数「 e 」の z 乗です。 z = x + j y として、「複素」指数関数を次のように定義します。角度は弧度法です。 Re( e^z ) = e^x cos y Im( e^z ) = e^x sin y すなわち、 e^{x + j y} = e^x cos y + j e^x sin y 指数関数を「exp()」で表現します。 exp(x + j y) = exp(x) cos y + j exp(x) sin y = exp(x) (cos y + j sin y) 注意すべきは、複素指数関数をこの式のように「定義」するという点です。この式がどこからか導かれるというわけではありません。この定義を基に、以降の議論を進めます。 【講義ノート】(実)指数関数 実数値の指数関数の概形をグラフに表示しておきます。 【講義ノート】フーリエ級数と複素指数関数 さて、数学者オイラー先生によって、三角関数は複素指数関数で表現できることが示されています。   【オイラーの公式】   cos θ = (1/2) (exp(jθ) + exp(-jθ))   sin θ = (1/2j) (exp(jθ) - exp(-jθ)) オイラーの公式は、複素指数関数の定義式より容易に導出できます。皆さんもやってみてください。 なお、exp(j y) = cos y + j sin y をオイラーの公式という場合もあります。 【講義ノート】フーリエ級数と複素指数関数 (2) さて、以前に勉強したフーリエ級数の式の cos, sin のところをオイラーの公式で複素指数関数に置き換え、整理すると次のような式が得られます。 ∞ x(t) = Σ c_n exp( j 2π (n/T) t ) n=-∞ c_0 = a_0 T/2 c_n = (1/T) ∫ x(t) exp( -j 2π (n/T) t ) dt -T/2 フーリエ級数の式の中に同じ周波数の三角関数が cos と sin 2種類含まれていて、多少ややこしかったものが、ある周波数を受け持つ一つの「複素指数関数」にまとまることがわかります。 【講義ノート】フーリエ変換 同じようにフーリエ変換の式にオイラーの公式を適用し、整理するとこのようになります。 ・フーリエ変換 (Fourier Transform) ∞ x(t) = (1/2π) ∫ X(ω) exp( j ωt) dω -∞ ∞ X(ω) = ∫ x(t) exp( -j ωt) dt -∞ 下の式が音声波形 x(t) からスペクトル X(ω) を求める式。これがフーリエ変換の式。 下の式の黄色い吹き出しに「フーリエ変換」とメモ。 上の式がスペクトル X(ω) から音声波形 x(t) を求める式。こちらがフーリエ「逆」変換の式。 上の式の黄色い吹き出しに「逆フーリエ変換」とメモ。 ここで気が付いていただきたいのは、フーリエ変換とフーリエ逆変換の式は、一部「-」がついたり、係数(1/2π)が異なる以外は、「対称」な形になっているという点です。 実は「時間」領域と「周波数」領域は、対称な関係にある。自然現象の背後に、何か整然とした世界があることを感じませんか? 【講義ノート】時間遅れとフーリエ変換 さて、フーリエ変換は周期性のない信号、例えばこの上の図のように一定時間のみ値があってその前後はゼロといった信号について、そのスペクトルを求めることができます。 今、この信号を一定時間 T だけ遅らせてみます。時間を遅らせた波形のフーリエ変換はどのようになるのでしょうか? 【講義ノート】時間遅れとフーリエ変換 (2) ある波形を時間関数 x(t) で表します。この波形を時間τだけ遅延させた時間関数は x(t - τ) となります。 「F」の花文字でフーリエ変換を表します。 ∞ F[ x(t-τ) ] = ∫ x(t-τ) exp(-j ωt) dt -∞ >> exp(-j ωτ) を積分の外に括りだす ∞ = exp(-j ωτ) ∫ x(t-τ) exp(-j ω(t-τ)) dt -∞ >> 積分範囲は -∞ → ∞ なので、t を t-τ に変えても同じ = exp(-j ωτ) F[ x(t) ] 結局、ある波形を時間τだけ遅延させると、そのフーリエ変換には exp(-j ωτ) が掛け算されます。 すなわち、exp(-j ωτ) という要素は、フーリエ変換(スペクトル)の世界での時間遅れを表すということがわかりました。 複素指数関数の中に「時間のずれ」が出現するのです。 = exp(-j ωτ) を指す黄色い吹き出しに 「フーリエ変換の世界での時間遅れを表す」とメモ。 【講義ノート】「 z 」の導入 複素数「 z 」を次式のように定義します。 z = exp( j (π/ω_m) ω ) ここで「 j 」は虚数単位、「π」は円周率、「ω_m」はスペクトルに含まれる最大の角周波数とします。 オイラーの公式により z = cos( (π/ω_m) ω) + j sin( (π/ω_m) ω) と変形すると、z は複素平面の単位円(半径1の円)の円周上にあることがわかります。 図をよく見て考えてください。実数軸から z までの角度(ラジアン)が「ω」、z の実部が cos 、虚部が sin です。三角関数ですよ。よろしいですね。 座標(1, 0)から左回りに角度が増えていって、ω = ω_m のとき、半周して座標(-1, 0)に達します。 【講義ノート】z-変換 ・z-変換 (z-Transform) これまで学んできたスペクトル分析の手法は、フーリエ級数にしろフーリエ変換にしろ、信号は連続時間上の関数 x(t) でした。関数の入力である時間 t が連続だということです。 しかし、コンピュータで信号処理を行う場合、まずは、A/D変換によって、信号を一定時間ごとの数値列に変換します。この一定時間間隔を「標本化周期」(sampling period)といいます。またその逆数を「標本化周波数」(sampling frequency)といいます。 一定間隔で数値化された時間は、連続量ではなく離散量です。この時刻を整数 p で表します。また標本化された信号を x_p (p=0, ... , ∞) と表します。 この表記法と、本日の授業で勉強した「時間のずれ」に対応する複素数 z を用いて、時間軸が離散化された、すなわち A/D変換した信号に対する、スペクトル表現を求めることができます。これが「z-変換」(z-transform)です。 ∞ X(z) = Σ x_p × z^{-p} p=0 ただし、 z = exp( j (π/ω_m) ω ) 【講義ノート】「 z 」とは何か 「exp(-jωτ)」が時間遅れτを表す要素であったことを思い出しましょう。ならば、 z^{-1} = exp( -j (π/ω_m) ω ) は、τ = π/ω_m の時間遅れを意味することになります。 今、標本化周期 T_s = 2π/ω_s をこの時間遅れと一致させてみましょう。 添字「s」は sampling の「s」。 τ = π/ω_m = 2π/ω_s = T_s → ω_s = 2 × ω_m すなわち、標本化周波数は信号に含まれる最大周波数の2倍に設定すればよい。このとき、 z 平面上の単位円が -ω_s / 2 〜 0 〜ω_s / 2 の角周波数に対応します。 標本化によって離散化された信号 x_p と、単位円上の複素数 z の値を z-変換の式に代入して計算した X(z) の値が、対応する角周波数に対するスペクトルになります。 複素数 z は単位円の上を回転するので、角周波数の範囲は実は -ω_s / 2 〜 0 〜ω_s / 2 の範囲にとどまらず計算することができます。周波数を横軸にとったグラフを考えます。横軸をどんどん伸ばしていくとスペクトル形状がくりかえすように(周期的に)なります。z-変換のスペクトルは「標本化周波数」を周期としてくりかえします。 実際には余裕をもって、 「標本化周波数は信号に含まれる最大周波数の2倍『より大きい』値に設定すればよい」ことが知られています。 これを「標本化定理」「サンプリング定理」といいます。 さて、今回は、線形予測分析というスペクトル分析の手法を学ぶために必要な信号処理の概念を復習しました。 複素指数関数の導入。複素指数関数によるフーリエ級数、フーリエ変換の表現法。 時間遅れτに対し複素指数関数 exp(-jωτ) が対応すること、これを用いて、A/D変換によって時間軸上で離散化された信号のスペクトルを求めるための「z-変換」。 結構盛りだくさんでしたね。 次回、これらの概念を総動員して、線形予測分析というスペクトル分析の手法を説明したいと思っています。しっかり復習しておいてください。 --