音解析

【音】うなりってナンジャラホイ?


うなりが聞こえないよぉ

おはこんばんちは(´・ω・`)

4月始め以来の投稿になります。ん~、そろそろ皆も5月病かな?

今回のテーマはズバリ【うなり】です。
うなりって言うのは

うなりとは,音の高さがわずかに異なる二つの音が鳴っているとき,各々の基音の周波数の差に相当する周期で音の強弱が聞こえる現象です. このとき二つの音は,ひとつの音の強弱が変化しているように聞こえます. 二つの音の高さがある程度まで離れると,両者は一つの音の強弱ではなく別の二音として聞こえます.
-引用”うなり [物理のかぎしっぽ]

だそうです。まぁ、知ってますよねみなさんも。

でね、なんでこんなこと今更言うのかと。

ちょっと話はずれますが

人間ってどうやって聴覚してると思いますか?

完全な私見ですが、頭のなかでフーリエ変換っぽいことがなされて周波数成分に分けられて知覚なんて感じじゃないんですかね?(フーリエ変換わかんない方はこちらがおすすめ1.フーリエ級数(やる夫で学ぶディジタル信号処理)

人間、音の高低なんかは割りと機微に反応しますから周波数らしいものを捉えてるものは確かなのですよ。

でね、人間って位相差には弱いらしいんですわ。

つまりは、聞いた音を周波数に分けてその成分の強さだけに反応してるってことですよ。

うん?

そうここでおかしなことに気づきませんか?

「あれ、これうなり知覚できなくね?」

そうですよね。例えば同じ音量の400Hzの音と440Hzの音を合わせたら、40Hzのうなりが生まれるはずですが、さっきの過程だと、400Hzと440Hzの成分が同じだけ立って終わりですよね。決して40Hzの成分なんて生まれません。

あれ、おかしいなと。そこでお互いが干渉して、成分が時間方向で変化とかしないかとか考えたんですが、当たり前ですがフーリエ変換上そういうことは起こりえません。sin波の和音はただのsin波の和音です。

そこで、ネットで軽く調べたんですが、見つからず、しょうがないので伝家の宝刀『オシエテワカルヒト』を抜いて、信号処理の教授にも聞いてみたんですがあんまり良い回答は得られませんでした。むしろ「わかったら教えて」とまで言われてしまい。もうこうなったら自力で解くぞと頑張りました・・・・・。一時間

わかりました。個人的にはこの問題は終息しました。

では、そのお話を

まずポイントは離散フーリエ変換です。そもそも人間ってそんなに周波数領域に分解能ある訳ないよな~と電車の中で閃きまして、そしたら「おっとこれは窓関数を考えなくてはならんですなぁ」と考えにいたりました。これは一悶着ありそうです。

調べました。今回は以下の様な設定で実験してみました。

$$f_s = 40kHz, f_0 = 400Hz, N=100$$

\begin{aligned}
ただし、f_{s}はサンプリング周波数。\newline f_{0}は基底となる周波数。\newline NはDFTで使うデータ数。
\end{aligned}

この設定のもとで、以下の式について考えました。

\begin{aligned}
F(k) = |\sum_{n=0}^{N-1}  (sin(2\pi f_0(t + delay)) + sin(2\pi (f_0 + beat)(t + delay))\exp( -j\frac{2\pi k}{N} n) )|
\end{aligned}

$$ ただし、t = n/f_s、 beatはうなりの周波数$$

単に、2つのsin波に対してDFTしてるだけです(ただし、今回は振幅のみに注目するので最初から絶対値をとりました)。delayは時間で人間がこの音を聞くタイミングのズレを表しています。今回はこのdelayを動かすことで、その変化を追います。

で、以下が結果です。

まず40Hzのうなりから

400Hzと440Hzの合成波の400Hz成分
400Hzと440Hzの合成波の400Hzの成分

下の時間軸はdelayを動かした様子です。図にも書いてありますが、これは400Hzの周波数の振幅成分を図示したもので、ちゃんと書けば

\begin{aligned}k=1(=\frac{f_s=40kHz}{N=100}\times \frac{1}{400Hz})\end{aligned}

なのでF(k=1)をdelayに関して[0.0s,0.05s]の範囲で動かしたものとなります。

どうでしょう、ちゃんとうごめいてますよね。しかもその周期はどうやら40Hzです。つまり、400Hzの音の成分が変化しちゃってるんですね。

一応、こっちも見ときましょう。下図は400Hzだけを鳴らしたときの400Hzの周波数成分です。

400Hz単音時の400Hzの成分
400Hz単音時の400Hzの成分

当たり前ですね。そりゃそうだという話です。こういうふうに聞こえてるおかげで、一定の音量の音を我々は知覚できます。逆に先のうなってる方は音量が400Hzのが変化してますね。これがうなりの本質です。

なんだか、ゲシュタルト崩壊気味な気分になってくる感じがします。

(僕だけ?)それは、何故か?

それは、うなりが聞こえるのはわかったけど、和音を聞いているんだからもちろん440Hzの成分も検出されないとおかしいという点だと思います。

ですが、すぐにそれが無理であると気づきます。例えば今回なら440Hzの成分はDFTではでてきません。連続周波数空間で440Hzの成分だったものはそこら中に分散しています。では、その様子も観察してみましょう。

下図は先程のうなりの図の次の周波数成分つまり、F(k=2)です。

400Hzと440Hzの合成波の800Hz成分
400Hzと440Hzの合成波の800Hz成分

なんかごちゃごちゃしてます。最初の400Hzの振幅に比べると大分小さい値なのと、なんとなく周期的なことはわかりますし、それはどうやら0.05sの間に45,6周期がありそう。つまりは約900Hzってことも読み取れます。900Hzって大体440Hzの二倍ですから関係がありそうです。

で、よく考えたらこの振幅は元々はF(k=2)の絶対値をとったもの。つまりは周波数は振幅上では2倍されたものが観測されるはず(2倍角の定理)なのでこれでOKということになりますね。ちゃんと800Hzの成分の中に残骸があったわけです。

で、残骸があったのはわかった訳ですが、「それが?」っていうね。やっぱ440Hzは聞こえてないじゃんと。「これは800Hzでしょ、その成分が440Hzで振動してるだけっしょ」、つまりは800Hzの音が440Hzでうなっていると先ほどの文脈から行くと言えるわけです。流石に440Hzがうなってるってのはおかしいし、そもそも800Hzなんて聞こえてないはず・・・。んん、くまった

消えた440HZ

ここからも持論で申し訳ないのですが、視覚で例えてみましょう。

人間は赤、緑、青の三色しか見えてないってのは割りと有名だと思うのですが、じゃぁの中間色はどう見てるかというと、赤と緑が同じくらい反応したらオレンジみたいな感じで折衷案みたいなのを頭が解釈してるようです。三原色の合成

今回の聴覚の例もその一つではないでしょうか?

つまりは「400Hzと800Hzが400Hz強めで800Hz弱めで反応してる=>おっしゃ440Hzや」みたいな論理展開がされてても不思議じゃありません。

ただ、興味深いのは視覚なら「赤色」と「オレンジ色」を混ぜると「赤が強いオレンジ色」という単色にみえるのに対して、音の場合は400Hzと440Hzをしっかりと分別してみていることです。普通、400Hzと440Hzを聞いて「あっ420Hzがなってる」みたいには感じませんよね。視覚と聴覚では混ざると言っても聴覚のほうがより分けたい気持ちが強いみたいです。

このことからわかるのは、今回の例ではN=100、fs=40kHzとテキトーに決めましたから、DFTでは400Hzと800Hzと言った周波数しか持ちえませんでしたが、人間でそうである保証はどこにもないですね。

例えば、N=2000として、DFT上で20Hzごとに成分を持てるようにしてやれば、無事440Hzの成分も持つことができます。ただし、この場合人間の耳にはうなりは聞こえないはずです。それは、先ほどの例の様に400Hzの成分に440Hzの成分が分散して来ないからです。

fs=40kHz,N=2000の時の400Hzの成分 が一定になっている様子
fs=40kHz,N=2000の時の400Hzの成分

fs=40kHz,N=2000の時の400Hzの成分 が一定になっている様子
fs=40kHz,N=2000の時の440Hzの成分

 

実際、周波数の異なる2つの正弦波の合成波を聞いてみるとわかるのですが、その周波数差を徐々に大きくしていくと、最初は確かに唸ってるのが知覚できるのですが、途中から「あれ、これ唸ってる?まぁ唸ってるっちゃ唸ってる?けど、いきなり聞いたら只の和音かなぁ?ハーモニー的な?」ってなります。これは、人間の分解できる周波数成分に相方の正弦波が入るかどうかってのがボーダーになっていること、そして、人間の分解できる周波数成分に入っている度合いが連続的に推移しそうなのは数式からもなんとなくは推測されます。

要はうなりと言っても「うなり or そうじゃない」と二値化できるものではなくて、連続的に変化しているのがわかります。

このことの応用として、例えば何百人とか何千人規模の人を集めてうなり度合い見たいなのを今回で言えば400Hzとそれ以上の周波数の波の合成波に対して答えさせることで、統計的にどこからどこまでが人間の分解できる周波数なのかがわかるんではないかと思います。例えば、430Hzあたりでたくさんの人が和音だけになったと答えれば、30Hzが400Hz付近での人間の周波数分解能といえるのではないでしょうか?

まぁ、人間はDFTほど単純な機構をしているともあんまり思えませんが、数多くある指標の一つくらいにはなるかと、つか、もうありそう。

実際に聞いてみよう

最後に、うなりがうなりでなくなる様子を確かめるために音源をおいておきます。暇だったら聞いてみてちょ

以下音源についての説明

400HZと400Hzから500Hzまでの和音 どこまでがうなって聞こえるかが、確かめられます。 和音は最初の1秒がそれぞれ独立に0.5秒ずつなって、そのあと2秒それらの和音がなります。
片方は400Hzで固定ですが、もう一方は400Hzから10Hzずつ大きくなっていきます。