Одна и та же нота, разное звучание: измерение, которое я сначала просчитался
Три сигнала частотой 528 Гц соответствуют одной и той же ноте, но звучат совершенно по-разному. В поисках причины я наткнулся на число, которое не должно было существовать, и моя первая попытка его измерить оказалась ошибочной.
Воспроизведите синусоидальную и прямоугольную волны с одинаковой частотой — никто их не перепутает. Одна звучит мягко, другая — резко. Однако если спросить у музыкального инструмента, какую ноту он играет, он в обоих случаях даст один и тот же ответ.
Именно этот разрыв и является предметом исследования. Он также привёл меня к величине, которая, согласно теории, вообще не должна была там фигурировать — и мой первый результат измерения этой величины оказался неверным, причём настолько, что об этом стоит рассказать, а не просто незаметно исправить.
Нота — это не звук
Создайте в Python три сигнала с частотой 528 Гц — синусоидальный, прямоугольный и треугольный — и выполните для каждого из них преобразование Фурье (FFT). Все три сигнала показывают основную частоту 528,00 Гц. С точки зрения нот они идентичны.
Отличается всё, что находится выше основной частоты. Периодическую волну можно представить в виде наложения простых синусоидальных волн, частоты которых кратны основной частоте целыми числами. Эти кратные частоты называются гармониками, и именно их наличие и уровень воспринимается ухом как тембр.
Для прямоугольной волны правило старое и чётко определённое: сохраняются только нечётные кратные, и каждая из них несет долю амплитуды основной частоты, равную обратному её номеру. Треть амплитуды приходится на третью гармонику. Пятая часть — на пятую.
Результаты измерений на моем собственном файле:
| 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 |
Правило действует вплоть до десятичного знака. Это самая простая часть.
Число, которое должно было равняться нулю
Согласно тому же правилу, четные гармоники должны полностью отсутствовать. Не в незначительной степени. А вообще отсутствовать.
Они не отсутствуют. Вторая гармоника находится на 75,9 дБ ниже основной частоты — примерно одна шеститысячная часть. Крошечная, неслышимая, но не равная нулю. Теория предсказывала нуль.
Очевидным подозреваемым является измерительный прибор. Но дело не в этом: если провести такое же измерение на чистом синусоидальном сигнале, в том же диапазоне показатель составит 238 дБ ниже, что является ни чем иным, как арифметическим шумом самих чисел. Прибор способен фиксировать гораздо более мелкие отклонения, чем это.
На самом деле дело в том, что дискретизированная прямоугольная волна вовсе не повторяется с частотой 528 Гц.
Найдём наибольший общий делитель частоты и частоты дискретизации: gcd(528, 44100) = 12. Паттерн отсчётов повторяется всего двенадцать раз в секунду, поэтому преобразование воспринимает не чистую гармоническую серию, а гребень с линиями через каждые 12 Гц. Некоторые из этих линий гребня приходятся примерно на те места, где должна была бы находиться гармоника, и одна из них и отображается в четном бине.
В чём я ошибся
Вот та часть, которой в видео уделяется больше всего времени, ведь именно её большинство каналов вырезали бы.
При первом измерении этой четной гармоники я получил значение −67,3 дБ и записал его в качестве ответа.
Это был не тот ответ. Я искал пик в окне шириной примерно ±14 Гц вокруг ожидаемой частоты, полагая, что небольшой допуск не повлияет на результат. Но линии гребня расположены с интервалом 12 Гц. В окне такой ширины обязательно будет находиться соседняя линия гребня, и эта линия была громче той гармоники, на которую я на самом деле ориентировался. Измерение добросовестно зафиксировало самый громкий сигнал в окне, а я ошибочно принял его за то, о чём спрашивал.
Правильное значение, зафиксированное именно в этом диапазоне, а не по самому громкому источнику рядом с ним, составляет −75,9 дБ. Это на восемь с половиной децибел тише, чем то значение, которое я первоначально опубликовал для себя.
Из этого материала можно сделать следующий вывод: диапазон допуска не является неограниченным. Если расширить его из соображений безопасности, то результаты измерений с большей вероятностью будут отвечать на другой вопрос, а не на тот, который вы задали. Если вы вынесете из этой статьи только одну практическую мысль, пусть это будет именно она.
Расширив окно, обнаружил нечто ещё худшее
Как только я перестал полагаться на узкое толкование и рассмотрел всю картину в целом, выявился более значительный артефакт, и он не имеет никакого отношения к гребневым линиям.
Прямоугольная волна содержит бесконечное количество гармоник. Все частоты, превышающие половину частоты дискретизации, не могут быть воспроизведены и сводятся обратно в слышимый диапазон. На более высокой ноте это слышно без какого-либо анализа: сгенерируйте прямоугольную волну на частоте 3000 Гц, и под ней будет слышен низкий тон, которого нет в самой ноте. Это пятнадцатая гармоника с частотой 45 кГц, скомпрессированная до 900 Гц — на две октавы ниже того, что играется.
При частоте 528 Гц самый громкий изгиб находится на уровне −33 дБ. Это на сорок децибел выше артефакта с четными гармониками, который я пытался обнаружить. То, что я называл артефактом, на самом деле не было самым значительным.
Два теста подтверждают, что это именно сгибание, а не что-то другое:
Если удвоить частоту дискретизации, уровень гармоник снижается на шесть децибел — и так каждый раз. −33, −39, −45, −51. Это не случайность: первая гармоника, которая больше не укладывается в диапазон, удваивает свой номер, а гармоника, частота которой в два раза выше, становится на шесть децибел тише в соответствии с тем же правилом «один на n».
Построим ту же самую форму из синусоид, которые все помещаются — без бесконечных рядов, без краев, вызывающих наложение сигналов, — и уровень шума снизится до 236 дБ, вернувшись к уровню арифметического шума.
Три вещи, которыми тембр не является
Не нота. Все три фигуры имеют частоту 528,00 Гц. Если спросить инструмент, что он играет, он трижды отвечает одно и то же.
Дело не в громкости. При одинаковой высоте пика прямоугольная волна несет примерно на 3 дБ больше энергии, чем синусоидальная. Это факт, но речь идет о разнице в коэффициенте амплитуды — о том, насколько плотно та же энергия сконцентрирована в пике, — а не о доказательстве того, что гармоники увеличивают громкость. Если же сравнить эти две формы по энергии, то собственная основная частота прямоугольной волны окажется примерно на 1 дБ ниже основной частоты синусоидальной волны: одинаковая энергия, распределённая по большему количеству ступеней.
Дело не в качестве. Ни одна из этих форм не является более насыщенной, чистой или подходящей для вас. Мы измерили распределение энергии по лестнице — шесть чисел для квадрата, шесть разных чисел для треугольника, при этом под обоими лежит одна и та же нота. Это полное описание устойчивого тона, и именно это утверждение подтверждает физика. Настоящий инструмент также меняется во время игры, но это уже отдельный вопрос.
Попробуйте и ознакомьтесь с точным содержанием корзины
Четыре строки. Постройте прямоугольную волну с частотой 528 Гц и частотой дискретизации 44 100 отсчётов в секунду, выполните её БПФ и снимите уровень на частоте, равной тройной основной частоте, а затем — на частоте, равной двойной основной частоте.
Считывайте показания именно этого датчика, а не самого громкого источника рядом с ним, иначе вы повторите мою ошибку. На нечетном датчике вы должны зафиксировать значение −9,5 дБ, а на четном — примерно на 76 дБ ниже.
Затем измените частоту и запустите программу снова. Значение −9,5 не изменится в диапазоне от 100 Гц до 1000 Гц, поскольку это закон. Чётные значения будут смещаться, и вы можете предсказать, куда именно, ещё до запуска: возьмите наибольший общий делитель вашей частоты и 44 100 — это и будет интервал, на который сдвигаются все значения под действием сетки дискретизации.
Обе вышеуказанные поправки включены в опубликованную версию видео. Публикация неверного числа наряду с верным — это не скромность; это единственный способ, с помощью которого утверждение о результатах измерений может быть проверено кем-либо, кроме самого автора.
Список литературы
Здесь речь идет скорее об определениях в области обработки сигналов, чем о клинических данных: дискретное преобразование Фурье и его биновая сетка (numpy.fft), спектральная утечка и разрешение окна, предел Найквиста и наложение сигналов, а также ряд Фурье для прямоугольной волны с амплитудами нечетных гармоник, равными «1/n». Реализовано с помощью numpy; скрипт измерений и его результаты показаны на экране в сопутствующем видео.
Образовательные материалы по обработке аудиосигналов. Не является медицинской рекомендацией.
Listen · FFT-verified session Одна и та же нота, разное звучание: измерение, которое я сначала просчитался Watch on YouTube →