Цифровая обработка звука и звуковые эффекты (часть 2)

    В предыдущей статье я разжевал устройство цифрового частотного полосно-пропускающего фильтра (Цифровая обработка звука и звуковые эффекты (часть 1) (mmcs-magnus.blogspot.com)). Самое время узнать зачем он собственно нужен.

РЕАЛЬНО ЗАЧЕМ

    Человеческий слуховой аппарат устроен так чтобы чувствовать интенсивность колебаний давления воздуха в наиболее часто слышимом частотном диапазоне (30-20000 Гц). Все звуки слышимые человеком (включая голос) занимают определенные части этого спектра и имеют свой характерный разброс интенсивностей по частотам. Вот пара примеров в диапазоне 0-10 кГц:
    На этой спектрограмме (график зависимости интенсивности спектра от времени) показаны несколько секунд аудирования по английскому. На ней можно выделить 2 интересных участка: сплошное и полосчатое покрытие спектра. Первое характерно для шипящих и ударных звуков, второе для гласных. 
    Здесь изображена игра на электронной гитаре. К (не)счастью я абсолютно не знаю музыкальную теорию поэтому не могу описать как это звучит. Электрогитары покрывают довольно узкую часть спектра тем не менее обычно их легко заметить даже в композиции с другими инструментами.
    А вот так выглядят практически все духовые инструменты. Очень похоже на гласные но здесь гораздо больше пиков, у них меньше разброс амплитуд и они практически не колеблются. Кстати у скрипки спектр неожиданно идентичный.
    И напоследок пианина. Куда же без пианины. Как некоторые наверное догадываются пианино характерно одиночными пиками. Отчасти. Я как человек который пробовал так написать пианино говорю что одиночные пики звучат по-пианиновски но тем не менее непохоже.

ЭКВАЛАЙЗЕР

    Для того чтобы подстроить звук под определенные уши проигрыватели обычно предлагают пользователям 10-полосный графический эквалайзер с которым можно по-разному усилить\ослабить 10 кусков спектра (чаще всего ширины полос образуют геометрическую последовательность). Эквалайзер может быть реализован как извращенная форма фильтра с отличием от описанного в предыдущей статье только картиной усиления, или он может быть составлен из нескольких фильтров. Делать 10 фильтраций по отдельности на самом деле жутко затратно поэтому все вычисления можно и лучше всего будет свести к одной свертке.

  Поскольку реализованный фильтр работает на одной лишь свертке (взвешенном суммировании) результат сложения двух фильтров приведет к сложению соответствующих весов их сверток:
   Аналогичным образом сумма массива фильтров сводится к одной свертке:
    Важно заметить что размер свертки с обрабатываемым сигналом f(t) такой же как и у входящих в него фильтров что означает что эквалайзер из М фильтров работает так же быстро как и любой из его фильтров. Единственный нюанс - веса этой свертки считаются при помощи другой свертки, которая меняется до вместе с диапазонами фильтров и амплитудой их усиления. 

ЧАСТОТНЫЙ СДВИГ

   Продолжая тему об обработке спектра звука хочется рассказать про частотный сдвиг. Как следует из названия он делает сдвиг частот увеличивая или уменьшая их на определенное число герц. Самая простая идея которая может прийти на ум это разбить сигнал на спектр, подвигать его и собрать обратно. БПФ трудоемкая и капризная тема когда речь идет о бесконечном потоке звуковых данных и обработке в реальном времени, я расскажу как сделать сдвиг аналогичным образом как с фильтрами.
    
    Прежде всего немного тригонометрии:
    Казалось бы дело в шляпе нужно просто умножить действительную часть сигнала на C а комплексную на S и вычесть их. Вопрос на засыпку - откуда взять комплексную часть в действительном звуковом сигнале? Сделать БПФ, сдвинуть фазовый спектр сигнала на 
π/2 и собрать обратно - самое то когда мы стараемся не делать БПФ.

    На помощь приходит Гильберт со своим одноименным преобразованием позволяющим повернуть сигнал по фазе при помощи свертки. В идеале такое преобразование работает с интегралом или со сверткой бесконечных размеров но мы ограничимся дискретным преобразованием пожертвовав незначительной долей точности:
    Имея рассчитанное по этой формуле так называемое аналитическое дополнение сигнала можно выполнять частотный сдвиг сигнала s(t) не такой сложной формулой:
    Здесь следует отметить что частотный сдвиг таким образом может запросто привести к падению частот ниже нуля или превышению частоты дискретизации что вызовет алиасинг (явление при котором дискретные выборки из разных сигналов совпадают). В результате этого уменьшение частоты ниже 0 приведет к ее росту а увеличение частоты равной частоте дискретизации будет выглядеть как уменьшение частоты. Если сказать еще более простыми словами, частоты будут отскакивать от границ спектра.
    Низкие частоты в композициях обычно имеют значительно большую амплитуду чем высокие поскольку к ним ухо менее чувствительно, поэтому частотный сдвиг может вызвать резкое увеличение или падение ощущаемой громкости что может быть исправлено при помощи эквалайзеров или фильтров.