Неправильный результат в децибелах для данных FFT

Если я помню, диапазон децибел - это битовая глубина * 6.

Я проигрываю wav-файл с его битовой глубиной = 16 (используя NAudio lib) и получаю результат fft, затем вычисляю децибелы для каждого результата fft. 20 * Math.log10(fftData[i]), и я получил странные результаты (-109...), как это может быть больше -96 (для 16-битных)?

(я работаю с.net 4)

Спасибо!

2 ответа

Решение

Д Б является мерой отношения, а не абсолютной амплитуды. Ваша цифра -109 дБ - это отношение относительно некоторой произвольной контрольной точки 0 дБ, которая может соответствовать или не соответствовать полной шкале в вашем случае.

Также важно отметить, что энергия только в одном частотном интервале может быть намного меньше, чем энергия, соответствующая 1-битному сигналу, как уже упоминалось Мэттом М, поскольку она представляет энергию в относительно небольшой полосе пропускания (единицы измерения V / sqrt(Hz)).

Предел динамического диапазона амплитуды во временной области не распространяется на величину составляющих в частотной области. Прямоугольная волна может быть представлена ​​звуковым сигналом с разрешением всего 1 бит, без какого-либо динамического диапазона. Но в частотной области это определяется как sin(x) + 1/3 sin(3x) + 1/5 sin(5x) ... Дробные коэффициенты иллюстрируют эту точку. Верхние гармоники представляют собой бесконечный ряд с все меньшими коэффициентами, без ограничения их динамического диапазона.

Кроме того, чтобы ответить на ваши последующие действия: да, для целей отображения и визуализации вы должны выбрать ограничение, например -120 дБ, и игнорировать приведенное ниже содержимое. Я думаю, что причина игнорирования контента ниже -120 дБ заключается в том, что динамический диапазон человеческого слуха составляет около 120 дБ. Вы могли бы также рассмотреть шум квантования ниже -96 дБ, но я не уверен в этом.

Другие вопросы по тегам