mikeo_410


 うなり

  ギターの調律で、うなりがなくなるようにします。
  うなりが周波数の差であることは経験的にも理解できます。
  しかし、何秒かに1回の周波数を聴く能力はないので、聞こえているのは音の高さの差ではありません。
  20Hz以下の音は普通聞こえません。

  以下に述べるようなことを考えて、それを試してみるプログラムを作りました。
  Silverlightアプリケーションで、下図をクリックすると起動します。

 

  1. 「Start」をクリックすると、左右のスピーカーから、設定した周波数の音が 5秒間 鳴ります。
  2. 1秒間のうなりの回数は、周波数の差に等しいので、左右、近い周波数を指定します。
  3. 初期位相や音量がどう関係するのか試せます。
  4. 左の波形の図は、2つの周波数のずれを見るものです。先頭の短い時間の波形を描いています。
    青が、左のスピーカーから出る音の波形です。
  5. 右の図は、耳に達するはずの波形です。左右のスピーカに出力している波形の合成波形の1秒分です。
  6. 周波数は、2から2000Hzの範囲で入力できます。
  7. Vol(音量)を左端に寄せるとゼロになり、片側の出力を確認できます。

音の強弱と周波数

  100Hz と 105Hz の正弦波を合成して1秒分を描いています。
  5回振幅がゼロになり、音の大きさの変化がうなりだと言うことが分かります。
  (一方の位相を30°ずらしてあります。)

  1. # 100Hzと105Hzの正弦波の合成
  2. t <- seq(0,1,length=1000)   # 1
  3. s1 <- sin(2*pi*100*t+(pi/6))# 位相を30度ずらす
  4. s2 <- sin(2*pi*105*t)
  5. s <- (s1 + s2) / 2
  6. plot(t,s,type="l",col="red",xlab="時間(秒)",
  7.      ylab="振幅")
  8. title("100Hz,105Hz正弦波合成",cex.main=1)

  空気の振動は、振幅データで表されますが、この振幅データは音の大きさと、周波数の両方を表しています。
  100Hz と 105Hz は、1つの音高(1つの周波数)に聞こえ、うなりを伴うと言うことです。
  音階の差程度の周波数差になると、1つの音高ではなく、和音のように独立した音高を認識できるようになります。

  この、うなりと、独立した音高に聞こえる場合の差は、わたしには説明が付きませんが、合成波形の様子を上げておきます。
  まず、100Hz と 105Hz の正弦波の合成波形の詳細を見ておきます。

  図は、100Hz と 105Hz の正弦波の位相が同じ場合の例です。青が100Hz、緑が105Hzです。2つの計の半分を合成波形として赤で描いています。
  波形がズレていくにしたがって計は小さな値になっていきます。0.1秒の時点で、100Hzは10回、105Hzは10.5回回転し、位相が反対になり計はゼロになります。それ以降は、増加に転じます。

  次に、うなりに聞こえない例を見ます。

  左図は、130.81Hz(c)  と 164.81Hz(e) の正弦波の合成波形です。(低い方のドとミ)
  これも振幅がゼロに近い箇所がありますが、その間隔はうなりの例よりずっと短いことが分かります。
  この場合、音の大きさの変化としては認識されません。
  音は、同じ大きさでなり続けていて、2つの音が鳴っていると感じます。


mikeo_410@hotmail.com