|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Aleksey V. Vaneev 2:5003/15.1 04 Nov 2001 11:02:05 To : Alexander Rebrov Subject : FFT -------------------------------------------------------------------------------- AR> Простенький эквалайзеp пpоще сделать чеpез moving average filter Да мне не нужен IIR или FIR фильтр (ты о нем, кстати?). Мне нужен именно FFT-фильтр. Плюс у него существенный есть - он фазы в сигнале не сдвигает. AR> Кстати, вpоде ты делал pевеpбеpатоp и аypалайзеp. е мог бы описать AR> алгоpитмы? Ревербератор: Сначала нужно реализовать delay-line (задержку обычную) желательно со встроенным ФВЧ и с параметром усиления сигнала. Далее просто сгруппировать штук 12 этих задержек по 6 на каждый канал. Причем если входной файл - стерео, то нужно обеспечить проникновение сигнала в обе ветви задержек. То есть если в стерео-файле активен только один канал, он все равно в какой-то степени должен присутствовать в обеих ветвях линий задержек. Далее нужно провести простые вычисления. Если мы задаем входной параметр "длина хвоста ревера" 1.5 секунд, то это означает, что сигнал ревера за 1.5 секунд должен уменьшится на 60 дб (это стандарт дефакто, если я ничего не путаю). Обычно длина задержки равна где-то 20-40 мс и у ней имеется параметр "feedback" (обратная связь). Параметр "feedback" у каждой линии задержки нужно подобрать так, чтобы все такие линии вместе давали нужную характеристику спада общего уровня ревера. Естественно, при этом нужно учитывать длины задержек (которые выбираются случайным образом, или каким-либо образом моделируются). Вообще, если оставлять одну единственную линию, то получающийся сигнал ревера похож на "тарахтение", но когда таких линий много, сигнал получается "гладким", практически неотличимым от сложных отражений помещения. Еще в реверах часто присутствует параметр "pre-delay" - это время атаки сигнала ревера (обычно от 0 до ~50 мс). Я сам с этим параметром, к сожалению, не разбирался, хотя он и очень существеннен для достижения реалистичности ревера. Как показывают опыты, для длин задержек лучше не выбирать простые числа - в этом случае получается очень неестественный "плоский" ревер - оно и понятно, ведь в этом случае не будет возникать резонансов и поглощений, когда как в реальных помещениях они существуют. Поголовно во всех реверах существует одна проблема - это песочный звук отрывистых сигналов - удары, щипки и пр. Hасколько я понимаю, никто толком эту проблему в цифровом исполнении так и не решил. Существует очевидное решение - увеличение числа линий задержек, например, до 100, но это слишком ресурсоемко. Я как-то пытался сделать "софтенер" для ревера, но не "добил" его. Идея в нем была простой - если уровень сигнала резко возрастает, нужно сначала его быстро и плавно уменьшить, а потом плавно вывести его до исходного. Получается подобие компрессора, но в отличие от него, граничный уровень выбирается алгоритмом автоматически (и в этом есть, похоже, сложности). Ауралайзер: Тут все просто - к сигналу с небольшой задержкой примешивается такой же, но с инвертированным правым или левым каналом. Перед примешиванием этот сигнал необходимо профильтовать - оставить диапазон частот, например, 1000-7000 Гц. И желательно пропускать его через стерео-задержку, у которой каналы имеют разную длину - это необходимо, чтобы при сведении общего сигнала в моно, не исчезали некоторые его компоненты. Естественно, нужно еще сбалансировать эту линию задержки - уменьшить громкость канала, длина задержки в котором меньше. e-mail: picoder@sbis.komi.ru --- GoldED+/W32 snapshot-2001.5.29 * Origin: We're all God's people (2:5003/15.1) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/27083be4f09c.html, оценка из 5, голосов 10
|