2009-05-09 1 views
4

Типичная FFT для аудио выглядит очень похоже на это, большая часть действия происходит на дальней левой сторонеНормализация FFT Данные для человеческого слуха

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 
} 

EDIT ::

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

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

+0

Большинство действий для человеческого слуха происходит <20 кГц, поэтому в зависимости от вашего размера FFT вы можете увидеть доминирующее «действие» на левой стороне. Помните, что БПФ отражается около 1/2 размера БПФ. –

+0

Ну, аудиосигнал составляет 44100 Гц, а полученный FFT закрыт при 22500 Гц. Я только что объединил вторую половину данных. – 2009-05-09 05:27:11

+0

вы не можете усечь последнюю половину данных! он используется для преобразования из частотной области во временную область (также звучит снова слышимый звук). –

ответ

3

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

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

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

+0

Действительно, я только анализирую БПФ для информации о битах - поэтому компенсация заключается только в том, чтобы сделать обнаружение проще и не имеет никакого отношения к звуку, который воспроизводится (который исходит из исходного файла). Итак, если бы у нас была функция с названием equalLoudnessCurve (частота), которая вернула значение, скажем, 80 для частоты 10hz, мы могли бы изменить код выше, чтобы быть fft [i] = fft [i] * sqrt (equalLoudnessCurve (frequencyFromIndex) (i)) , который ослабляет бас (но не тишину) и усиливает высокие частоты? – 2009-05-10 01:32:26

+0

Да, я думаю, что это уравнение верно, хотя equalLoudnessCurve должно быть в реальных количествах, а не в дБ (большинство графы используют дБ). Тем не менее, теперь, когда вы уточнили свою проблему больше, я не думаю, что эта равная громкость - правильный подход. Например, рассмотрите периодическую ноту скрипки, устанавливающую ритм. 1) Это не получая пик в спектре мощности на частоте биений. 2) Это слишком сложно для того, что вы хотите выбраться из него; если вы хотите улучшить низкую частоту, просто используйте любую функцию, которая выглядит разумной, нет ничего особенного в равной громкости. – tom10

1

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

+0

Возможно, это может произойти, но здесь должен быть какой-то принцип. – 2009-05-09 05:29:38

0

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

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

+0

Я не совсем понимаю, что вы имеете в виду, но я пытаюсь компенсировать разницу в силах удара, бас-биты - два, в три раза больше, чем высокие шляпы. У меня может быть другое пороговое значение для каждого поддиапазона БПФ - но если есть основной принцип, почему максимумы менее мощные, чем минимумы, то я могу применить его к БПФ, и полученные величины биений будут исправленный. – 2009-05-09 17:34:56

+0

Хм .. не уверен, что я сделал бы и что попытался бы в результате, и это не звучит просто. Я считаю, что Смелость пошла на него и остановилась на некоторых подобных проблемах; источники и вики, чтобы они могли помочь. Я только вижу, что вы делаете это по числу нормализации, а также по пропускам FFT, за один кусочек или набор из них, что, по-видимому, всегда занимало Recycle. Другим, но дорогостоящим/трудоемким маршрутом было бы «обратить вспять» на то, что делают другие пакеты .. много новых бит вокруг, хотя я совсем позади, но парни NI были на вершине игры в прошлый раз, когда я проверил. –

+0

Или дайте это, чтобы посмотреть, было ли это сделано: http://freecycle.redsteamrecords.com/features/ –

2

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

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

Контур громкости стандартизован в ISO 226, но этот документ не доступен для свободного скачивания. Однако он должен быть в приличной университетской библиотеке. another source for loudness contours

+0

Я только трансформирую аудиофайлы, есть ли что-нибудь, что мы можем предположить об абсолютных уровнях, зная это? – 2009-05-09 18:00:03

+0

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

Смежные вопросы