同じ音符でも響きは異なる:最初に間違えてしまった測定結果
528 Hzの3つの波形は、同じ音高を示しているにもかかわらず、その音色はまったく異なっています。その理由を探ったところ、本来存在してはならない数値が見つかり、それを測定しようとした最初の試みは誤りでした。
同じ周波数の正弦波と矩形波を再生しても、誰もそれらを混同することはありません。一方は柔らかく、もう一方は鋭い音です。しかし、楽器に「どの音が出ているか」と尋ねると、どちらの場合も同じ答えが返ってきます。
その差こそが、まさにこの研究の核心なのです。また、その差によって、理論上はそもそも存在してはならないはずの数値にたどり着きました。そして、その数値に関する私の最初の測定結果は誤りでしたが、それは黙って修正するよりも、むしろ公表する価値があるような誤りでした。
音符は音そのものではない
Pythonで528 Hzの3つの波形(正弦波、矩形波、三角波)を作成し、それぞれに対してFFTを実行します。3つすべてで、基本周波数が528.00 Hzと算出されます。音として聴くと、これらはまったく同じです。
異なるのは、基本波より高い周波数のすべての成分です。繰り返し現れる波形は、その基本波の整数倍の周波数を持つ単純な正弦波の重ね合わせとして表すことができます。これらの倍数は「倍音」と呼ばれ、どの倍音がどのレベルで存在しているかによって、耳には「音色」として認識されるのです。
方形波の場合、その法則は古くから定まっており、明確です。奇数倍の成分のみが残り、それぞれが基本波の振幅の、その倍数に等しい1/nの割合を持ちます。第3高調波では振幅の3分の1、第5高調波では5分の1となります。
自分のファイルで測定した結果:
| Harmonic | Predicted | Measured |
|---|---|---|
| 3rd | −9.5 dB | −9.5 dB |
| 5th | −14.0 dB | −14.0 dB |
| 7th | −16.9 dB | −16.9 dB |
| 9th | −19.1 dB | −19.1 dB |
この規則は小数点以下1桁まで適用されます。そこが簡単なところです。
本来ならゼロであるはずだった数字
同じ規則によれば、偶数次の高調波は完全に欠けているべきである。わずかに少ないのではなく、存在しないのだ。
それらが存在しないわけではない。第2高調波は基音より75.9 dB低い位置にあり、これはおよそ6000分の1に相当する。ごく微弱で、耳には聞こえないが、ゼロではない。理論上はゼロとされていた。
疑わしいのは測定器そのものです。しかし、そうではありません。純粋な正弦波でまったく同じ測定を行うと、同じビンで238 dBの低下が示されますが、これは数値そのものの算術的ノイズに他なりません。この測定器は、これよりもはるかに微小な変化を検出することができます。
実際のところ、サンプリングされた矩形波は528 Hzでまったく繰り返されていません。
周波数とサンプリングレートの最大公約数を求めます:gcd(528, 44100) = 12。 サンプルのパターンは1秒間に12回しか繰り返されないため、変換処理で認識されるのは純粋な高調波列ではなく、12 Hzごとに線が現れるコームとなります。これらのコーム線のいくつかは、本来高調波が存在するはずの付近に位置しており、そのうちの1本が偶数ビンに現れるのです。
私が間違っていた点
この部分が、動画の中で特に多くの時間が割かれている箇所です。というのも、ほとんどのチャンネルならこの部分をカットしてしまうからです。
その偶数次高調波の最初の測定値は**−67.3 dB**となり、私はそれを答えとして書き留めました。
それは正解ではなかった。予想周波数を中心に、幅がおよそ±14 Hzの範囲内でピークを探していた。多少の許容範囲があれば問題ないだろうと考えていたからだ。しかし、コームラインの間隔は12 Hzだった。 それほど幅の広いウィンドウには、必ず隣接するコームラインが含まれており、そのラインは私が実際に狙っていた高調波よりも大きな振幅を示していた。測定結果は忠実にウィンドウ内で最も振幅の大きいものを報告したため、私はそれを自分が調べようとしていたものと勘違いしてしまったのだ。
そのビンそのもので(その近くで最も大きな音ではなく)測定した正しい値は、−75.9 dBです。私が当初自分用に公表した値よりも、8.5デシベル静かでした。
このファイルの枠を超えて、この教訓はより広く当てはまります。許容範囲は無限に広いわけではありません。安全を期して許容範囲を広げると、測定結果が、あなたが尋ねた質問とは異なる質問への答えになってしまう可能性が高まります。この記事から実用的なことを一つだけ学ぶとすれば、ぜひこの点に留めておいてください。
窓を広げると、さらにひどいものが見つかった
狭い解釈を信じないようになると、全体像が見えてきて、より大きなアーティファクトが現れました。それはコームラインとは何の関係もありません。
方形波には無限に高調波が存在します。サンプリングレートの半分を超える周波数はすべて表現できず、可聴範囲内に折りたたまれてしまいます。 高音域では、分析をしなくてもそれを聞き取ることができます。3000 Hzの矩形波を生成すると、その音には含まれていない低音がその下から聞こえてきます。これは45 kHzの第15高調波が、再生されている音より2オクターブ低い900 Hzまで折り返されたものです。
528 Hzに戻ると、最も大きなフォールドは**−33 dB**の位置にあります。これは、私が追いかけていた偶数次高調波のアーティファクトよりも40デシベル高い値です。私がアーティファクトと呼んでいたものは、実は大きなものではなかったのです。
以下の2つのテストにより、これが「折りたたみ」であり、それ以外の現象ではないことが確認されました:
サンプリングレートを2倍にすると、折れ目は毎回6デシベル低下する。 −33、−39、−45、−51。これは偶然ではない。収まらなくなった第1高調波の周波数が2倍になり、周波数が2倍になった高調波は、「1/nの法則」に従って6デシベル小さくなるからだ。
すべてが収まる正弦波から同じ形状を構築する — 無限級数も、エイリアシングの発生源となる境界もなし — すると、レベルは236 dB低下し、算術ノイズの範囲に戻る。
音色が「~ではない」という3つの点
音符のことではありません。 3つの音形すべてが528.00 Hzです。その楽器に「何が演奏されているのか」と尋ねると、3回とも同じ答えが返ってきます。
音量ではありません。 ピーク高さを同じに設定した場合、方形波は正弦波よりも約3 dB多くのエネルギーを持ちます。これは事実ですが、これはクレストファクター(同じエネルギーがピークにどれだけ密に詰め込まれているか)の違いであり、高調波が音量を増加させるという証拠ではありません。 代わりにエネルギーで両者を一致させると、方形波の基音は正弦波の基音より約1 dB 低い位置になります。つまり、同じエネルギーが、より多くのステップに分散しているのです。
質の問題ではない。 ここで取り上げているどの音形も、より豊かでも、より純粋でも、あなたにとってより優れているわけでもない。 私たちが測定したのは、音階全体にわたるエネルギーの分布です――四角形には6つの数値、三角形には6つの異なる数値があり、その下には同じ音高があります。これが安定した音色の完全な記述であり、物理学が裏付ける主張のすべてです。実際の楽器は演奏中に変化しますが、それは別の問題です。
ぜひ試してみて、そのバイナリを詳しく読んでみてください
4行。528 Hz、44,100サンプル/秒で方形波を生成し、そのFFTを計算して、基本波の3倍の周波数と2倍の周波数におけるレベルを読み取ります。
その特定のビンを読み取ってください。その近くで最も大きな音ではなく、そうしないと私と同じ間違いを繰り返してしまいます。奇数番号のビンでは−9.5 dB、偶数番号のビンではおよそ76 dB低い値が得られるはずです。
次に、周波数を変更して再度実行してみてください。−9.5という値は、100 Hzから1000 Hzまでのどの範囲でも変化しません。これは法則だからです。 偶数側の値は確実に移動します。実行する前にその位置を予測することも可能です。周波数と44,100の最大公約数を求めれば、それがサンプリンググリッドによって追加されるすべての要素の間隔となります。
上記の2つの訂正は、いずれも公開版の動画に反映されています。正しい数値と誤った数値を併記することは、謙虚さからではなく、測定結果を主張した本人以外の人々がその主張を検証できる唯一の方法だからです。
参考文献
ここで取り上げる内容は、臨床的エビデンスというよりは、信号処理の基礎的な定義に関するものです。具体的には、離散フーリエ変換とそのビン格子(numpy.fft)、スペクトルリークとウィンドウ分解能、ナイキスト限界とエイリアシング、そしてn分の1の奇数次高調波振幅を持つ方形波のフーリエ級数などです。 numpyを用いて実装されており、測定スクリプトとその出力結果は、付随する動画で画面上に表示されています。
音声信号処理に関する教育コンテンツです。医学的なアドバイスではありません。
Listen · FFT-verified session 同じ音符でも響きは異なる:最初に間違えてしまった測定結果 Watch on YouTube →