[size=150][b]このワークシートは[url=https://www.geogebra.org/m/twxxx3yq]Math by Code[/url]の一部です。[br][br]アプレット、背景、実装の順に見ていきましょう。[br][/b][/size]
[br]前回は、[br]音は振幅と周波数の2要素があり、[br]周波数を2倍、2倍にすると、音がオクターブずつあがることを体験した。[br]また、周波数を増やせば、周期を細かく刻むことになる。[br]だから、周期の最小公倍数はもとの周期と変わらないね。[br][br]今回は、純音ではなく、ミックスした音を詳しくみていこう。
三角関数をたし算することで、複雑な波を作ることができます。[br][br]フーリエ[b]級数(展開)[/b]は、作りたい波が、定義区間が限定されているか、周期関数なら使えます。[br]フーリエ[b]変換[/b]は、その制限がない一般の関数で使えます。[br]どちらも、関数を周波数成分に分解します。[br][br]フーリエ変換もラプラス変換もそうですが、[br]微分方程式を解きたいときに、[br]微分方程式を扱いやすい形に変換してから単純化し、逆変換してあげます。[br]だから、逆フーリエ変換、逆ラプラス変換というものがあります。[br][br]ここでは、作りたい音の波を周波数ごとの純音に分解する方法[br][color=#0000ff][b]フーリエ級数[/b][/color]を中心に確認しよう。[br][br]前回の純音の式を思い出すと、[br][b][color=#0000ff]y=a sin[ 2π f t][/color][/b][br]です。t=1/f=Tの倍数になるたびに、sinの引数、位相が2πになるからy=0になるので、[br]グラフは(0,0)と(T,0)を通る、[b][color=#0000ff]周期Tのグラフ[/color][/b]ができた。[b]fはもちろん周波数[/b]だ。[br]f=1/Tでもあるから、[br][b]f1(T)=a sin[ 2π t/T][br][/b]ともかけるね。[br]さらに、整数nを位相に入れてみよう。[br][b]fn(t)=a sin[ 2π n t/T][br][/b]とおくと、n=2,3,4,...とすると、周波数がfのn倍になり周期はn分の1になるけれど、[br]Tをただn等分するから、それらの波の周期の最小公倍数はTのままだね。[br]また、振幅を変えても周期とは関係ないし、sinをいっせいにcosにしても、[br]波がずれるだけのことで周期と関係ない。[br]だから、次のたされた波W1,W2,W3,W4はどれも周期はTのままになるね。[br]W1(t)=a sin(2π 1t/T)+b sin(2π 2t/T)+c sin(2π 3t/T)+d sin(2π 4t/T)[br]W2(t)=a sin(2π 1t/T)+b sin(2π 3t/T)+c sin(2π 5t/T)+ d sin(2π 7t/T)[br]W3(t)=a cos(2π 1t/T)+b cos(2π 2t/T)+c cos(2π 3t/T)+d cos(2π 4t/T)[br]W4(t)=a cos(2π 1t/T)+b cos(2π 3t/T)+c cos(2π 5t/T)+d cos(2π 5t/T)
[b][size=150]<ノコギリ波>[br][/size][/b][br]ノコギリ波はすべての倍音を含み、豊かで強い音になります。いろいろな音に使われます。[br]特にトランペットやストリングスなどの音色に使われます。[br][br]ノコギリ波を[color=#0000ff][b]たとえば周期2πで[ーπ、+π]の区間で、y=t[/b][/color]としてみよう。[br]y=f(x)とすると、f(-x)=-x=-f(x)だから、奇関数だ。奇関数といえば、y=sin x。[br]だから、y=tは奇関数[b]fn(t)=b sin[ 2π n t/T]をたして作れそうだね。[br][br][/b]f(t)=t, T=2πのときのフーリエ級数展開は[br][b]f(t)=t=Σb[sub]n[/sub] sin(2π n t/T)=Σb[sub]n[/sub] sin(nt)[/b][br]部分積分( ∫ uv' = [ uv] - ∫ u'v )、sinnπ=0, cos nπ=(-1)^n, cos 0= 1, sin 0 = 0 などを使い。[br]フーリエ係数[br][b]bn=2/T ingegral( f(t) sin 2π n t/T, t)( -π, π)[br][/b]= 1/π ∫t sin(nt) dt ( -π , π) [br]= 2/π∫ t sin(nt) dt ( 0 , π)[br]= 2/π[ t (- 1/n cos(nt))] ( 0,π) + ∫ (- 1/n cos(nt)) (0, π)[br]= 2/π{ π (- 1)[sup](n+1)[/sup]/n - 0 } +[ (-1/n) sinnt/n ] (0,π) = 2(-1)[sup](n+1)[/sup]/n + 0[br][b]=2(-1)[sup](n+1)[/sup]/n [br][/b][br]まとめると、[br]f(t) = 2 Σ(-1)[sup](n+1)[/sup]/n [sub][/sub] sin(nt) [br][math]f(t)=t=2(sint-\frac{1}{2}sin2t+\frac{1}{3}sin3t-\frac{1}{4}sin4t+...........)[/math] [br]
[b][size=150]<矩形波>[br][/size][/b][br]矩形波はノコギリ波よりは倍音が少なく、明るく鋭い音で、リード音やゲームサウンドに使われます。[br][br]矩形波は、[color=#0000ff][b]たとえば周期2πで[ーπ、+π]の区間で、y=-1(tが正),1(tが負)[/b][/color]としよう。[br]ノコギリ波と同じ奇関数だ。[0, π]区間で作れたら奇関数だから[-π,0]でも同じ式になる。[br]f(t)=1, T=2πのときのフーリエ級数展開は[br][b]f(t)=1=Σb[sub]n[/sub] sin(2π n t/T)=Σb[sub]n[/sub] sin(nt) dt [br][/b]sinnπ=0, cos nπ=(-1)^n, cos 0= 1, sin 0 = 0 などを使い。[br]フーリエ係数[br][b]bn=2/T ingegral( f(t) sin 2π n t/T, t)( 0, π)[br][/b]= 1/π ∫sin(nt) dt ( 0, π) [br]= 1/π∫ sin(nt) dt ( 0 , π)[br]= 1/π[(- 1/n cos(nt))] ( 0,π) [br]= 1/π{ (- 1)[sup](n+1)[/sup]/n + 1/n } [br][b]= (1- (-1)[sup]n[/sup])/nπ [br]分母はnπ、分子はnが奇数なら2,偶数なら0。[br][/b][br]まとめると、[br]f(t) = Σ(1-(-1)[sup]n[/sup]) /nπ [sub][/sub] sin(nt) [br][math]f(t)=1=\frac{2}{\pi}sint+\frac{2}{3\pi}sin3t+\frac{2}{5\pi}sin5t+\frac{2}{7\pi}sin7t+...........[/math] [br][math]=\frac{2}{\pi}(sint+\frac{1}{3}sin3t+\frac{1}{5}sin5t+..........)[/math]
[b][size=150]<三角波>[br][br][/size][/b]一般に、周期Tのf(t)のフーリエ級数は[br][b][color=#0000ff][size=150]f(t)=a0+ Σ( an cos[ 2π n t/T ] + bn sin[ 2π n t/T] ) [br]a0 = 1/T ∫ f(t) dt (-T/2, T/2) [br]an = 2/T ∫ f(t) cos[ 2π n t/T ] dt ( -T/2, T/2) [br]bn = 2/T ∫ f(t) sin[ 2π n t/T ] dt (-T/2, T/2) [br][/size][/color][/b]とされています。[br](0,T/2)区間で関数f(t)を作り、f(t)を偶関数g(t)に改造する方法もあります。[br]いわゆる偶関数化です。T=2Lとして、(0,L)で、[br]f(t)=a0+Σ( an cos[ 2π n t/T ]) =a0+Σ( an cos[ π n t/L ]) [br]a0= 1/L ∫ f(t) dt (0,L)[br]an= 2/L ∫ f(t) cos[ πnt /L] dt (0, L)[br]bn =2/L ∫ f(t) sin[ πnt /L] dt (0, L)[br][br]もしも、L=πならば、[br][color=#0000ff][b][size=150]g(t)=a0+Σ(an cos nt)= a0 + a1cos1t + a2cos2t+ a3cos3t+ a4cos4t+.......とおきます。[br]a0= 1/π ∫ f(t) dt (0,π)[br]an=2/π ∫ f(t) cos nt dt (0, π)とすると、偶関数化できる。[br][/size][/b][/color][br]まず、三角波の三角形(0,0), (π/2, π/2),( π, 0)としよう。周期がπの三角形だ。[br]f(t) = t (0からπ/2) ;π-t (π/2, π)となるね。[br]g(t) = a0+ a1cos t + a2cos2t + a3cos3t + a4cos4t+............とおくとき、[br]a0= 1/π {∫t dt(0, π/2)+ ∫(π-t) dt(π/2, π) }= 1/π{ (π/2)[sup]2[/sup]/2 +π(π-π/2)-(π[sup]2[/sup]-(π/2)[sup]2[/sup])}=π/4[br]部分積分やsinnπ=sin0=0,cosnπ=(-1)[sup]n [/sup]、cos(nπ/2)=[0,-1,0,1]の周期などを利用する。[br]an =2/π {∫ t cos nt dt (0, π/2) +∫ (π-t) cos nt dt ( π ,π/2)} [br]= 2/π{[ t(sin(nt)/n)] (0, π/2)-∫(sin(nt)/n)dt (0,π/2) [br] +[ (π-t)(sin(nt)/n)] (π/2,π)- ∫(-(sin(nt)/n) )dt (π/2,π) }[br]= 2/nπ{ -∫ sin(nt)dt (0, π/2) + ∫sin(nt)dt (π/2, π) } [br]= 2/(n[sup]2[/sup]π){ -[ -cos(nt) ] (0,π/2) + [-cos(nt) ] (π/2, π) } [br]= -2/(n[sup]2[/sup]π){ cos(n0)- cos(nπ/2)+ cos(nπ)-cos(nπ/2) }[br]= -2/(n[sup]2[/sup]π){ 1-2 cos(nπ/2)+ (-1)[sup]n [/sup]} [br]= 2/(n[sup]2[/sup]π){ 2 cos(nπ/2)- (-1)[sup]n [/sup]-1 } [br]= 2/π{1/1(0+1-1) , 1/4(-2-1-1), 1/9 (0 +1-1), 1/16(2-1-1),[br] 1/25(0+-1), 1/36(-2-1-1), 1/ 49(0+1-1),1/64(2-1-1),..... }[br]=2/π{0, -4/4, 0, 0, 0, -4/36,0,0, 0, -4/100, 0,0, ........}[br]以上から、[br]g(t)=π/4- 2/π{ cos 2t + 1/3[sup]2[/sup] cos 6t +1/ 5[sup]2[/sup] cos 10t + ......1/ (2m+1)[sup]2[/sup] cos2(2m+1)+.......}[br][math]=\frac{\pi}{4}-\frac{2}{\pi}\left\{cos2t+\frac{1}{3^2}cos3\cdot2t+\frac{1}{5^2}cos5\cdot2t+........+\frac{1}{\left(2m+1\right)^2}cos\left(2m+1\right)2t+......\right\}[/math]
[u][color=#9900ff][b][size=150]質問:geogebraでノコギリ波、矩形波、三角波を表示させ、音を出すにはどうしたらよいでしょうか。[br][/size][/b][/color][/u][br]もとになる波のリストを作ります。[br]波の合成はΣではなく、sum(リスト)でよいでしょう。[br]その合計関数[br][b][size=150][color=#1e84cc]wa(x)=sum(リスト)を[br]playsound(wa, 0,2)として、[br]ボタンのスクリプト記述の「クリックして」に貼り付ければ2秒間wa関数の音が鳴る[br][/color][/size][/b]でしょう。[br][color=#0000ff][b]PlaySound(sin(440 2Pi x), 0, 1)とすると、A4の音が出ます。[br][/b][/color][br]・[b]ノコギリ波[/b]です。[br]スライダーを2つ用意しましょう。[br][b]n=slider(1,5,1)[br]frq= slider(1,5,1)[br][/b]として、[br][b]f=220 frq[/b]とすることで、fは220の倍数になる。[br]fは1倍から5倍まであげられる。[br]一方で、無限に倍音をたすこをはできないので、nは1倍音から5倍音までたせるようにした。[br][color=#0000ff][b]para=Sequence(n)[/b][br][/color]というparaという名の倍数リストをzip関数で代入しよう。[br][b][color=#0000ff]sn=Zip((1/m) sin(m f*2 π x) (-1)^(m+1),m,para)[br][/color]n=1のときは、para={1}[br]sn=1/1 sin [1 220 frq *2πx] ですから、frq=2にすると、A4の音になります。[br]frq=2のままn =2 にすると、n=1のときの純音A4にA5の音波を負に反転して加えた音になります。[br]このように、n個の純音の1/n倍にして弱めながらも、たしひきした波形、ノコギリ形の音を出します。[br][/b][b][color=#0000ff]wa(x)=Sum(sn)[/color][br][/b]とすることで、純音の倍音の和で合成したノコギリ波になるね。[br][br]・[b]矩形波[/b]です。[br]一方で、mが奇数の倍音、m=2p+1にしてたせばよいでしょう。[br][color=#0000ff][b]para=Sequence(2 p+1,p,0,n)[/b][br][/color]というparaという名の倍数リストをzip関数で代入しよう。[br][b][color=#0000ff]sqar=Zip((1)/(m)) sin(m f*2 π x),m,para )[/color][br][/b]で、n個の純音関数で、xを含むからsnの1個1個がxを秒とするときの波形を表す。[br][b][color=#0000ff]wa(x)=Sum(sqar)[/color][br][/b][br]・[b]三角波[/b]です。[br]一方で、mが奇数の倍音、m=2p+1にしてたせばよいでしょう。[br][color=#0000ff][b]para=Sequence(2 p+1,p,0,n)[/b][br][/color]というparaという名の倍数リストをzip関数で代入しよう。[br][b][color=#0000ff]tri=Zip(-((2)/(π))*((1)/(m^(2))) cos(m f*2 π x),m,para)[/color][br][/b]で、n個の純音関数で、xを含むからsnの1個1個がxを秒とするときの波形を表す。[br][b][color=#0000ff]wa(x)=((π)/(4))+Sum(tri)[/color][/b]