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

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

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

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

У меня вопрос: какие изменения необходимо внести в БПФ, чтобы компенсировать этот стандартный спад?

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

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

Ответы [ 4 ]

3 голосов
/ 10 мая 2009

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

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

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

3 голосов
/ 09 мая 2009

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

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

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

1 голос
/ 09 мая 2009

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

0 голосов
/ 09 мая 2009

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

Похоже, что это двухэтапная процедура, в противном случае я бы лично оставил БПФ для выполнения задачи.

...