Неправильный результат в децибелах для данных 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 дБ, но я не уверен в этом.