[Top Page / 主頁] > [音楽ひとりごと] > ["音色"に関する数学的ハッタリ的考察-準備編-] > [附録-音色スペクトル導出算法]

[Japanese / Nihongo](JPN) [Korean / Han-gug-eo](KOR)

← 本文へ

音色スペクトル導出算法

「文系にとっての禁断の園」へようこそ(バカ)。 ここでは音色スペクトルの算出方法を説明したいと思います。 (数学的には「フーリエ変換(Fourier Transform)」と呼ばれているものの一種です)。

まず最初に・・・このページでは数式をじゃんじゃん使います。 内容を理解するためには、 高等学校卒業程度(数学II以上)の微分・積分の知識が必要です。 また、三角函数/三角関数(sin(サイン,正弦函数/正弦関数), cos(コサイン,余弦函数/余弦関数))に関する知識(一般角への拡張、 加法定理等を含む)も持って居られると仮定します。 更に、 角度は弧度法(ラジアン(radian)による角度表現。 180度が"π"である)によります…そんな次第で、 とにかくこのページはおよそ音楽から遠く離れた雰囲気に満ち満ちております。なにとぞお覚悟を・・・(逝)

さらにご注意。「函数/関数」というとふつうは、

y =f (x )

と記すことが多いのですが、ここではあえて

x =f (t )

と書きます。音波を考える場合、 独立変数は「時間(time)」であり、 " t "のほうがふさわしい(と思った^^)からです。

それでは発車・・・のまえに、 三角函数(三角関数)の微分積分をご存じないかたも居られると思いますので(日本の高等学校の数学IIでは、 有理函数(有理関数)-多項式で定義される函数(関数)-の微分積分しか学習しない)、 まず、三角函数(三角関数)の微分積分をおさらいします。ただし、結果だけ示します。 証明などは数学の参考書(高校数学IIIの教科書以上)をご覧ください。

以下にその公式を書きます。
a を零でない定数として、

(sin(at))' = a(cos(at)), (cos(at))' = -a(sin(at)), ∫cos(at)dt=(1/a)sin(at)+[積分定数], ∫sin(at)dt=-(1/a)cos(at)+[積分定数] ... 数式(1)

それでは今度はホントに発車します。 まず、 我々が取り扱う函数 x = f (t ) は、 以下の条件が成立しているとします。

上の条件はなにやら小難しく見えますが、実は、「音楽」で用いる音波… 我々が普段取り扱う楽器を演奏して出る音波…の多くは、 時間の函数としてみたとき、 おおむね上の条件を満足しています。

具体的には、 以下のような、 持続音が出せる樂器(※脚注1)

から発せられる音波の振動は、 おおよそ、時間t に対して 「連続かつ滑らかな周期函数」です。また、

から発せられる音の振動も、 「最初の撥弦音や打撃音」 「音を出した後減衰していく」という2点を除けば、 時間t の函数として見たとき、 上の条件をおおよそ満たします。 打楽器でも木琴、 鉄琴、 チェレスタ等が出す音は(減衰が早いものもありますが)これに準じて考えられるでしょう(※脚注2)。 今後の計算はすべて上の条件が満足されているとして行います。

さて、上の条件が満たされる波形(音楽で用いる音の場合、肉声や、 弦樂器、管樂器、 鍵盤樂器から出る音波波形の大部分)については、 以下の級数展開が可能です。

f(t)=C[0]+Σ(n=1,∞){a[n]cos(ωt)+b[n]sin(ωt)}, (ω=2π/T) ... 数式(2)

これが、「フーリエ変換」のなかでも「フーリエ級数」と呼ばれる公式です。 T が周期であり、1 / T は振動数です。 更に、この数式(2)に出てくる、

a1, a2, a3, ..., an, ..., b1, b2, b3, ..., bn, ...

を、フーリエ係数(Fourier Coefficient)とよびます。

われわれは周波数スペクトルを求めようとしているのですが、 それは結局フーリエ係数を求めることになります。その理由を説明しましょう。 上の数式(2)を少し変形すると、

f(t)=C[0]+Σ(n=1,∞)√{(a[n]^2+b[n]^2)sin(nωt+φ[n])}, (ただし、φ[n]=arctan(b[n]/a[n]) (a[n]≠0),φ[n]=π/2 (a[n]=0)) ... 数式(3)

となります。 添え字1,2,3,…,n ,…は?そう、 これは「第○倍音」というときの数字「○」そのものです。 さらに、sin(…)の部分は、「純音(基音・倍音)」の振動そのものを表します。 それゆえ、添え字n を含んだ√の部分は、 正弦波の振幅=各純音の大きさを表しています。 基音や倍音の大きさを示す√の中には an bnしかありません。 從って、上の式の an bnを求めれば、 基音や倍音の強さが判明するわけです。 さらに、n を横軸に取り、 各第n 倍音(n =1の時は基音)の大きさ√(a[n]^2 + b[n]^2)を縱軸に取り、 グラフ化していくと周波数スペクトルのグラフが作成できます。(下図)

[スペクトル構成方法の例(Spectrum_example.gif, 2.08KB)]

では早速・・・のまえに、またまたひと準備(^_^;)。 これだから数学はうっとおしい? まあ、 そうおっしゃらずに・・・以下の公式を確認しておいてください。 なお、以下の式で p q はともに自然数(正の整数)とします。

∫(t=0,T)cos(pt)cos(qt)dt = 0 (p≠q), =T/2(p=q),∫(t=0,T)sin(pt)sin(qt)dt = 0 (p≠q), =T/2(p=q), ∫(t=0,T)cos(pt)sin(qt)dt = 0 ...数式(4)

この公式は、三角函数の微積分の公式(数式(1))と、 三角函数の加法定理を使用すると出てきます。 途中の計算過程は決して難しくはないのですが、 少々面倒くさいので端折りました(^^;)。

それでは今度こそ本当に an bnを…まず、数式(2)をじっとにらんで、 両辺にcospωtをかけて、 さらに両辺をぞぞっと積分します。 「和の積分は積分の和」という「ことわざ」…じゃない、 「定理」がありますので、そいつを適用します(←※必読注意(脚注3)あり)。すると、

[a[n]を求める途中の計算 (Eq5.gif,2.28KB)] ...数式(5)

ここで数式(4)の最初の式を参考にすると、 数式(5)の右辺の積分は、 被積分函数が"cos pωt cos pωt "になっている項以外は 全部ゼロになってしまうことがわかります。 第1式のC 0を含む項も積分結果はゼロです。 從って、

[計算途中(Eq6.gif, 1016 bytes)] ...数式(6)

ここで p n で書き換え、 両辺に2/T を掛けて、 左辺と右辺をひっくり返すと、

a[n] =(2/T)∫(t=0,T)f(t)cos(nωt)dt ...数式(7)

というわけで、 いつの間にか anが求まりました。

さて、次は bnにいってみます。 今度は数式(3)の両側にsin pωt をかけて、 これまた両辺をぞろぞろっと積分します。すると、

[b[n]を求める途中の計算 (Eq8.gif,2.29KB)] ...数式(8)

ここで再び数式(4)…今度は2番目をご覧ください。 数式(7)の右辺の積分で生き残る項は、 被積分函数が"sin pωt sin pωt "になっている項のみ。 それ以外は全部ゼロです。 定数C 0の項も積分結果はゼロ。 ですから、

[計算途中(Eq9.gif, 1021 bytes)] ...数式(9)

ここでp n で書き換え、 両辺に2/T を掛けて、左辺と右辺をひっくり返すと、

b[n] =(2/T)∫(t=0,T)f(t)sin(nωt)dt ...数式(10)

というわけで、 bnが求められました。

定数項のC0も計算しておきましょう(※脚注4)。 まず、 数式(2)の両辺を積分して、

[定数項c[0]の導出(Eq11.gif, 1.67KB)] ...数式(11)
ごらんの通り、 C0を含む項のみが生き残り、 ほかの項はゼロになってしまいます。 したがって、
C[0] = (1/T)∫(t=0,T)f(t)dt ...数式(12)

このようにして、anbn (n = 1,2,3,…)とC0が出ましたので、 √(a[n]^2 + b[n]^2)を求め、n の順に並べることで周波数スペクトルが完成します。 数学的には「フーリエ変換が完了した」ということ、めでたしめでたし・・・と、 「音色スペクトル導出算法」は、 以上で終わり・・・なのですが、

「音波の波形がx = f (t )という数式ではなくて、 時間(t )-振動変位(x (t ))の数値データで与えられている」(要するに、音波の波形が数値表の形で得られている)

という場合も少なくありません、 というか、 今回の「樂器の音色分析」自体がそうです。 この場合には、 上で得られた an , bn についても、 「積分」を数値計算で求める必要があります。 データが時間 t に対して連続的に与えられていないので、 「積分」は「和」で置き換えられます。 この置き換えの詳細は省略しますが、 an , bnは、 以下のように求められます(脚注5)

a[n]=(1/π)Σ(k=1,M){cos(2πnk/M)}, b[n]=(1/π)Σ(k=1,M){cos(2πnk/M)} ...数式(13)

なお、M は一周期分のデータの個数、X ( k )は、 k 番目のデータの値を意味します。 この式を用いた an , bn の計算は、 MS-Excelに代表されるような「表計算ソフト」を用いて行うことができます。 本文のページでお見せした各種のグラフも、 実は上の式をMS-Excelで計算したものなのです。 「俺もやったるでぇ!」という根性のある人は、 いろんな波形をMS-Excelで計算してみてください(^^;)ソンナ ヒマ人 居ナイカ。

以上が、 「音色スペクトル導出算法」です。 およそ音楽のページとは思われない数式たっぷりの内容でしたが、 音樂と数学との深いつながりの一端をお見せしたつもりです。 最後までおつきあいくださり、 どうもありがとうございました。「←本文へ」という項目から、 元のページにお戻りください。




※脚注1:耳慣れない楽器名が含まれているかもしれません。 皆様にあまりなじみがないかもしれない思われる楽器名に注釈をつけます。 なお、以下の内容は主に「新音楽辞典-楽語-(音楽之友社,1977)」を参照しつつ我流でまとめて記載したものです。 「私が実際に見たこともないし聴いたこともない樂器」も多数含まれているので、あまり内容を詮索しないでください(爆)

・バンドネオン(bandoneón(西), Bandonion(獨)):アコーディオンの系統に屬する樂器。
いわゆるアコーディオン(ピアノ・アコーディオン)が片手側にピアノ式鍵盤をつけているのに対して、 バンドネオンは両手にボタンスイッチ式の鍵盤をつけています。ドイツで発明された樂器ですが、19世紀に南米に伝わり、アルゼンチンタンゴで必須の樂器になりました。

・胡弓:東アジアに広く分布する、弓で演奏する弦楽器
弓で演奏する弦楽器(弓奏弦樂器)はインドが原産といわれ、 アラビア経由で西に進んだものはヴァイオリンの祖先になり、 東へ進んだものが「胡弓」になったといわれています。
「胡弓」にはいろいろな種類のものがあります。 日本の胡弓は富山県八尾市の「風の盆」で使用されているものが有名で、形は三味線に似ています。弦の本数は4本です。
中国の胡弓(胡琴ともいう)の中では、「二胡」が有名です。これは、太鼓に少し似た筒型の共鳴胴を持ち、弦の本数は2本です。
朝鮮半島のものはhae-geum(ヘグム,奚琴)とも称されます。さらに、モンゴルの胡弓は棹の先に馬の頭の形をした裝飾品を持つ2弦のもので、「馬頭琴」(現地語ではMorin Khuur(モリン・ホール))として有名です。

A-jaeng(アジェン,雅箏):朝鮮半島の民族樂器。「箏」の系統に屬するチター屬擦弦樂器の一種。
日本の箏(こと)と似た構造の樂器本体を弓でこすって演奏します。「弓奏の箏」は珍しい。

・チンバロム,或いはハックブレット,或いはダルシマー:ヨーロッパと東アジアに分布する民族樂器。チター屬の打弦樂器の一種。
チンバロム(cimbalom(ハンガリー), salterio tedesco(伊), dulcimer(英), Hackbrett(獨), tympanon(佛))は、長方形もしくは台形の箱に弦が多数張られており、この弦を小さなハンマーでたたいて音を出します。 ハンガリーの作曲家コダーイ(Kodály / Kodaly)が、オペラ「ハーリー・ヤーノシュ」でこの樂器を用いました。この機構に「鍵盤」がついたものがいわゆる「ピアノ(Pianoforte)」で、それゆえチンバロムはピアノの先祖樂器ともいえます。この樂器は中国・朝鮮半島まで伝わりそれぞれ 「揚琴(yáng-qín)」「yang-geum(ヤングム,洋琴)」と名付けられました。

・サントゥール(Santur):西アジアで使われる樂器。チター屬打弦樂器。
箱に張られた複数の弦を小さなハンマーでたたいて音を出します。上の「チンバロム」の先祖だと考えられています。

・・・ううむ、このページで唯一「音楽のページ」らしい記載だ(爆)・・・丸印●を 選択すると読みかけの部分に戻ります

※脚注2:音階を演奏できる打樂器としては「ティンパニ(Timpani)」も無視できません。 しかしここでは記載を省きました。それは、以下の理由によります。
フーリエ級数展開による考察ができるのは、 「弦」「管」のような「一次元的な形をした振動体」から出る音です。 一方、ティンパニのような「太鼓類」に属する樂器の場合、 音波の元となる振動が発生するのは「膜」(二次元的な振動体)の部分です。 実は、「膜」のような振動体から発生する音波は、 フーリエ級数展開のみで解析することはできません。 このため、「膜」の振動が音になるティンパニについては記載を省きました、というわけで、丸印●を 選択すると読みかけの部分に戻ります

※脚注3(必読注意!):実は無限個の和からなる函数の場合(今回の場合はまさにそうです)、 一般には「和の積分=積分の和」ということはできません。 (「無限個の和」は「有限個の和」と全く異なった性質を持っているのです) ただし、今回扱っているような「区分的に連続な函数のフーリエ級数展開」については、 「積分操作」と「無限個の和をとる操作」の順番を入れ替えることができます。
この話は、フーリエ級数展開を習得する時には重要な部分なのですが、 「証明」は、ここで記載すると長くなってしまうので省略します。興味ある人はフーリエ変換の参考書をご覧ください、 ・・・というわけで丸印●を 選択すると読みかけの部分に戻ります

※脚注4:定数項C0は、 波形分析をする場合にはあまり重要視しないのがふつうです。 ある音波について、「横軸に時間をとり、縱軸に振動変位をとったグラフ」を書いたとき、 定数項C0は、 グラフの上下の位置を定めるだけで、定数項C0が変わってしまっても、 グラフの形そのものは変わらないからです。 なお、私の本文に出てくる音波波形のグラフでは、 C0=0になるように調整しています。 ・・・というわけで、丸印●を 選択すると読みかけの部分に戻ります

※脚注5:このように、有限の数のデータからフーリエ級数を求める手順を "DFT(Discrete Fourier Transformation, 離散フーリエ変換)" と呼びます・・・というわけで丸印●を 選択すると読みかけの部分に戻ります



(2003 June 23)

← 本文へ

[Back]「音楽ひとりごと」目次に戻る

ご意見などありましたら、メールまたは掲示板でどうぞ


[Top]Return to Top Page / トップページに戻る