|
Как правильно реализовать КИХ-эквалайзер? |
|
|
|
Jan 4 2011, 10:26
|
Группа: Участник
Сообщений: 12
Регистрация: 4-01-11
Пользователь №: 62 005

|
Такой вот вопрос. Я реализую алгоритм свертки и хочу прикрутить к ней дополнительно эквалайзер, причем чтобы форму кривой АЧХ эквалайзера можно было задавать в принципе любой (т.е. не обязательно привязываться к комбинации стандартных фильтров типа Баттерворта и т.д.). Свертка, естественно, реализуется через БПФ (допустим, overlap-add). Входной сигнал поступает на обработку кусками, для простоты ограничимся кусками, равными целой степени двойки (напр., 512, 1024). Изначальная идея состоит в том, что раз фильтр задается в частотной области, то нужно просто домножить результат преобразования Фурье (ПФ) ИХ на характеристику эквалайзера (т.е. каждый комплексный коэффициент ПФ ИХ на значение коэффициента усиления эквалайзера на данной частоте). Это будет эквивалентно тому, что комплексные коэффициенты БПФ импульсной характеристики эквалайзера являются полностью действительными. Это, по-видимому, не совсем правильно, т.к. фильтры как правило моделируют минимально-фазовыми цепями, у которых АЧХ и ФЧХ связаны преобразованием Гильберта. Допустим, мы реализуем преобразование Гильберта, по АЧХ ищем ФЧХ, по ним определяем правильные действительные и мнимые части ПФ эквалайзера. Вопрос у меня вот в чем. Для получения корректного результата линейной свертки нужно, чтобы оба сигнала во временной области были дополнены нулями до размерности ПФ, так чтобы суммарная длительность ненулевых фрагментов не превышала длину ПФ, иначе получим циклическую свертку. Но ИХ эквалайзера будет ненулевой по всей длине... получается, для корректного результата надо ПФ эквалайзера преобразовать в ИХ эквалайзера с помощью обратного ПФ, обнулить у нее половину отсчетов и вернуть назад в ПФ (причем АЧХ при этом чуть изменится...), и только после этого множить на ПФ ИХ? Но тут возникает та же проблема - мы теперь эту "эквализованную" ИХ будем еще сворачивать с сигналом, т.е. у нее тоже половина отсчетов должна быть нулевой... Опять ОПФ-обнуление коэффициентов-ПФ? Какая-то дикая схема получается... Ощущение такое, что где-то в рассуждениях допущена принципиальная ошибка, только не могу понять где именно... В результате реализации алгоритма без учета эффекта циклической свертки (т.е. если не играться с ОПФ-обнулением-ПФ, а просто множить ПФ ИХ на ПФ эквалайзера), на краях кусков выходного сигнала (тех которые длиной типа 512, 1024) иногда наблюдаются разрывы (собственно чтобы как-то объяснить их появление и была разведена вся эта теория  ) Уточню одну вещь. Мне интересна реализация именно данного принципа (БПФ-свертка + КИХ-эквалайзер), потому советы использовать что-то другое не принимаются
|
|
|
|
|
 |
Ответов
|
Jan 10 2011, 04:27
|

Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 13-05-05
Пользователь №: 4 986

|
Цитата(Alexey Lukin @ Jan 10 2011, 06:19)  Тогда свёртка тут непричём, а задача называется "расчёт фильтра" (filter design). Простейший метод — это действительно метод взвешивания, описанный ivan219.
Кстати, для звукового эквалайзера во многих случаях выгодно использовать биквадратные IIR-фильтры, а не линейнофазовый FIR, получающийся методом взвешивания. Вычислительные затраты обычно получаются значительно меньше. Если это комбинация устройств "конволюционный процессор + эквалайзер" работающий в реальном времени, то IIR фильтры будут вносить дополнительную нагрузку на CPU хотя их параметры и можно изменять во времени, а FIR- фильтр получится автоматически после предварительного преобразования исходной ИХ - все равно свертку надо делать, поскольку это основная задача. Да, кстати, где можно почитать про другие методы, кроме метода взвешивания?(поскольку мне тоже интересна данная тема)
--------------------
О сколько нам открытий чудных ...
|
|
|
|
|
Jan 10 2011, 12:17
|

Частый гость
 
Группа: Участник
Сообщений: 159
Регистрация: 3-01-11
Пользователь №: 62 000

|
Цитата(phantom @ Jan 10 2011, 10:27)  Если это комбинация устройств "конволюционный процессор + эквалайзер" работающий в реальном времени, то IIR фильтры будут вносить дополнительную нагрузку на CPU хотя их параметры и можно изменять во времени, а FIR- фильтр получится автоматически после предварительного преобразования исходной ИХ - все равно свертку надо делать, поскольку это основная задача. Тут всё зависит от соотношения длин имеющейся свёртки и нового эквалайзера, т.к. добавление эквалайзера удлиняет исходное ядро свёртки. Для руления низких частот приходится использовать FIR-фильтры длиной несколько тысяч или даже десятков тысяч отсчётов. А если делать IIR, то зачастую хватает нескольких умножений на входной отсчёт. Цитата(phantom @ Jan 10 2011, 10:27)  Да, кстати, где можно почитать про другие методы, кроме метода взвешивания?(поскольку мне тоже интересна данная тема) Я изучал это по Рабинеру/Голду, но там ниже есть даже отдельная книжка: "Digital Filter Design".
|
|
|
|
Сообщений в этой теме
elk Как правильно реализовать КИХ-эквалайзер? Jan 4 2011, 10:26 bahurin Если вы хотите сделать эквалайзер на основе бпф, т... Jan 4 2011, 14:05 Alexey Lukin bahurin, если эквалайзер делать на основе БПФ без ... Jan 4 2011, 16:24 bahurin Цитата(Alexey Lukin @ Jan 4 2011, 22:24) ... Jan 5 2011, 13:57 elk Цитата(bahurin @ Jan 4 2011, 19:05) Если ... Jan 5 2011, 05:06 Alexey Lukin Цитата(elk @ Jan 5 2011, 11:06) Т.е. я пр... Jan 5 2011, 05:33 elk Цитата(Alexey Lukin @ Jan 5 2011, 10:33) ... Jan 5 2011, 06:47 Alexey Lukin bahurin, строго говоря, такая схема не обеспечивае... Jan 5 2011, 14:47 phantom В последнее время, что-то всех в электронную музык... Jan 5 2011, 15:44 Serg76 2 Alexey Lukin Вы не верите, что сигнал можно обра... Jan 5 2011, 15:50 Mad_max Цитата(Serg76 @ Jan 5 2011, 18:50) 2 Alex... Feb 5 2011, 01:06  Serg76 Цитата(Mad_max @ Feb 5 2011, 05:06) А что... Feb 5 2011, 11:35   Mad_max Цитата(Serg76 @ Feb 5 2011, 14:35) Ну и з... Feb 5 2011, 12:59    petrov Цитата(Mad_max @ Feb 5 2011, 15:59) да я ... Feb 5 2011, 14:10 Alexey Lukin Почему же? Очень даже верю! Просто я призываю ... Jan 5 2011, 16:18 phantom Как я понимаю, у elk-a правильно реализована блочн... Jan 5 2011, 17:04 Alexey Lukin Цитата(phantom @ Jan 5 2011, 23:04) Как я... Jan 5 2011, 17:45 elk Цитата(bahurin @ Jan 5 2011, 18:57) Берет... Jan 6 2011, 11:30 Alexey Lukin Я просто не очень понимаю, в чём тут затруднение. ... Jan 7 2011, 15:24 elk Цитата(Alexey Lukin @ Jan 7 2011, 20:24) ... Jan 8 2011, 14:26 petrov Цитата(elk @ Jan 8 2011, 20:26) Просто ум... Jan 8 2011, 14:49 Alexey Lukin Цитата(elk @ Jan 8 2011, 20:26) Ну вот эт... Jan 9 2011, 02:10  petrov Цитата(Alexey Lukin @ Jan 9 2011, 08:10) ... Jan 9 2011, 06:09  phantom Цитата(Alexey Lukin @ Jan 9 2011, 09:10) ... Jan 9 2011, 13:25 elk petrov, а можно что-то типа ссылки на первоисточни... Jan 8 2011, 16:59 blackfin Цитата(elk @ Jan 8 2011, 22:59) ... а мож... Jan 8 2011, 17:19 ivan219 Сделать ИХ по АЧХ очень просто. Берём все Im = 0 а... Jan 9 2011, 14:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|