Нормализация данных БПФ для человеческого слуха

StackOverflow https://stackoverflow.com/questions/842704

  •  20-08-2019
  •  | 
  •  

Вопрос

Типичный БПФ для аудио выглядит примерно так, при этом большая часть действий происходит на дальней левой стороне

http://www.flight404.com/blog/images/fft.jpg

Он умножил это на частичную синусоидальную волну, чтобы добраться до сути, но статья не слишком конкретизирует эту часть.Это также похоже на "достаточно хорошую" модификацию набора данных, а не на модификацию, основанную на каком-то свойстве.Я понимаю, что человеческий слух лучше приспособлен к более высоким частотам, поэтому в большинстве музыкальных произведений будут усилены низкие и ослаблены высокие частоты, так что и те, и другие звучат для нас относительно одинаково.

Мой вопрос заключается в том, какую модификацию необходимо внести в FFT, чтобы компенсировать это стандартное падение?

for(i = 0; i < fft.length; i++){
     fft[i] = fft[i] * Math.log(i + 1); // does, eh, ok but the high
                                        // end is still not really "loud"
                                        // enough
}

Редактировать ::

http://en.wikipedia.org/wiki/Equal-loudness_contour

Я наткнулся на эту статью, я думаю, что это может быть направление, в котором следует двигаться, но все еще может существовать какое-то свойство FFT, которому необходимо противодействовать.

Это было полезно?

Решение

Во-первых, вы уверены, что хотите это сделать?Имеет смысл компенсировать некоторые вещи, например, не ровный отклик микрофона, но не человеческое восприятие.Люди привыкли слышать звуки со спектральным содержанием, которое они имеют в реальном мире, а не по кривым одинаковой громкости для восприятия.Если вы воспроизведете звук, который вы изменили так, как вы предлагаете, это будет звучать странно.Возможно, некоторым людям нравится, чтобы в музыке были усиленные низкие частоты, но это вопрос вкуса, а не психофизики.

Или, возможно, вы компенсируете это по какой-то другой причине, например, принимая во внимание меньшую чувствительность к более низким частотам, вы можете улучшить алгоритм сжатия.Это и есть идея?

Если вы действительно хотите нормализовать с помощью кривых равной громкости, следует отметить, что большинство кривых и уравнений приведены в терминах уровня звукового давления (SPL).SPL - это логарифм квадрата амплитуды сигнала, поэтому, когда вы работаете с БПФ, вероятно, проще всего работать с их квадратом (спектром мощности).(Или, конечно, вы могли бы компенсировать другими способами, скажем, умножив на sqrt (log (i + 1)) в вашем уравнении выше - предполагая, что log был приближением обратной кривой равной громкости.)

Другие советы

Я думаю, что контур равной громкости это совершенно правильное направление.Однако его форма зависит от уровня абсолютного давления.Другими словами, кривая чувствительности нашего слуха изменяется в зависимости от звукового давления.

Нет никакой "правильной нормализации", если у вас нет информации об абсолютных уровнях.Является ли это проблемой, зависит от того, что вы хотите сделать с данными.

Контур громкости стандартизирован в стандарте ISO 226, но этот документ недоступен для свободного скачивания.Хотя она должна быть в приличной университетской библиотеке.Вот другой источник для контуров громкости

Итак, вы пытаетесь повысить уровень высоких частот?Похоже, может сработать фильтр высоких частот с минимальным множителем, чтобы вы не слишком ослабляли низкочастотные сигналы.Возьмите хорошую книгу по дизайну фильтров, может быть, поиграйте с этот апплет

В старые времена первых сэмплеров это было до того, как люди MOTU Boost :) это был не FFT, а простая (я думаю, сначала это был Fairlight или Roland) нормализация, выполняемая для исходного или результирующего сигнала во временной области (если вы выполняете нарезку ритмов, в стиле recycle);ты не можешь этого сделать?Или переходите к БПФ только после того, как вы компенсируете его, чтобы противодействовать ему?

Похоже на двухэтапную процедуру, в противном случае я бы лично оставил FFT как есть для этой задачи..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top