N88-BASICでうなり

2021/11/21(日)
N88-BASICでうなり
 
例えば振動数440Hzと443Hzの音
を同時に聞くと1秒間に3回
(|443Hz-440Hz|)の音量の大小が
聞こえる現象をうなりと言います。
楽器のチューニングなどに使うと
思います。
 
この現象をBASICで視覚化して
見ましょう。
 
話を簡単にするために、音を
正弦(sin)波で表す事にします。
 
そこで
三角比のsin(正弦),cos(余弦),tan(正接)

加法定理
sin(α±β) = sinαcosβ±cosαsinβ
cos(α±β) = cosαcosβ∓sinαsinβ
tan(α±β) = (tanα±tanβ)/(1∓tanαtanβ)

https://ulprojectmail.blogspot.com/2021/09/1.html
三角関数 (1回目)
を見てください
 
次に正弦波の合成を考えます。
a = α+β   、b = α-βと置くと
α= (a+b)/2 、β= (a-b)/2
Asina + Asinb
= Asin(α+β) + Asin(α-β)
= Asinαcosβ+Acosαsinβ
 +Asinαcosβ-Acosαsinβ
= 2Asinαcosβ
= 2Acos{(a-b)/2}sin{(a+b)/2}
 
振幅A(m),振動数f(Hz)の音(正弦波)
の変位y(m)と時間t(s)の関係は、
y = -Asin2πft
-Aになっているのは正弦波がx軸の
正の方向に移動すると初めyは負の
方向に変化するからですが、ここでは
あまり重要ではありません。
0~2π(ラジアン)は0~360(°)の
角度の弧度法表記です。
 
a = 2πft、 b = 2πf'tと置くと、
a-b=2πt(f-f')なので、
a-bは振動数の差、(a+b)/2は振動数
の平均になります
 
Asina + Asinb
= 2Acos{(a-b)/2} sin{(a+b)/2}
の2Acos{(a-b)/2}を振幅と考えると
cosは1周期(0~2π)で2回振幅が
増加しますので(a-b)/2では、
|a-b|回振幅が増加します
つまり、振動数|f-f'|(=|a-b|)の
うなりが聞こえることになります
(1秒間に|f-f'|回うなる)
 
次に、振幅と周期が異なる正弦波の合成です
 
まずは、周期が同じsin、cosの合成
(tanの逆関数はtan-1ですがTが大文字の
時はθが1周分に限定されます)
 
底辺X、高さY、斜辺R、辺XR間の角θ
の直角三角形において、
 
θ = Tan-1(Y/X)、R = √(X2+Y2)
X = Rcosθ、Y = Rsinθ
となります。
 
また加法定理
Rcosθsina+Rsinθcosa = Rsin(a+θ)
に代入して、
Xsina + Ycosa = Rsin(a+θ)
= √(X2+Y2)sin{a + Tan-1(Y/X)}
となります。
 
振幅と周期が異なる正弦波の合成
 
加法定理
Asin(α+β) = Asinαcosβ+Acosαsinβ
Bsin(α-β) = Bsinαcosβ-Bcosαsinβ
を加えて
Asin(α+β) + Bsin(α-β)
=(A+B)sinαcosβ+(A-B)cosαsinβ
X=(A+B)cosβ、Y=(A-B)sinβと置くと
Xsinα + Ycosα
= √(X2+Y2)sin{α + Tan-1(Y/X)}
 
R2 = X2+Y2 
= (A+B)(A+B)cosβcosβ+(A-B)(A-B)sinβsinβ
= A2+B2+2ABcosβcosβ-2ABsinβsinβ
より、
= A2+B2+2ABcos2β
または、
= A2+B2+2ABcosβcosβ-2AB(1-cosβcosβ)
= (A-B)2+(2ABcosβ)(2ABcosβ)
 
今回は、B=Aのとき、
Asina + Asinb = 2Acosβsinα
となることが分かり易い後者を使います。
 
X = (A+B)cosβ、Y = (A-B)sinβ
より
 
まとめると
Asina + Bsinb
=√{(A-B)2+4ABcosβcosβ}
sin[α + Tan-1(Y/X) + γ]
(通常γ=0)
Y/X={(A-B)/(A+B)}tanβ
α=(a+b)/2、β=(a-b)/2
 
 
BASICのATNは(-π/2~π/2)
の範囲でしか計算できませんので
Xが負ならATN(Y/X)+πとすることで
(-π/2~3π/2)となります
X=(A+B)cosβなので、cosβ<0の時
γ = πとなります
 
画面を見ると
水色の線の間を1秒とすると
6Hzと4Hzの合成で2回うなりが
生じている事が分かります
 
NL-BASICとblg~.zip(beat001.bas)は
このブログ(以下のリンク)から
ダウンロードできます

https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい










このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)