Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Цифровой фильтр
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Olegovich
Надо сделать программную фильтрацию звукового сигнала.
Имеется массив отсчетов сигнала с частотой 44100 Гц.
Как запрограммировать полосовой фильтр, чтоб можно было выделять из сигнала частоты 1-10 кГц, и менять его параметры на лету?
SPS
Цитата(Olegovich @ Mar 11 2005, 12:08)
Надо сделать программную фильтрацию звукового сигнала.
Имеется массив отсчетов сигнала с частотой 44100 Гц.
Как запрограммировать полосовой фильтр, чтоб можно было выделять из сигнала частоты 1-10 кГц, и менять его параметры на лету?
*


Использовать прямые и обратные преобразования Фурье.
Olegovich
Цитата(SPS @ Mar 11 2005, 13:14)
Использовать прямые и обратные преобразования Фурье.
*


Делать преобразование. а потом по мощности в полосе делать вывод?
Может быть, быстрее и надежнее делать свертку с некой импульсной характеристикой фильтра? только вот как её рассчитывать?
sergunas
почитай азы цифровых фильтров, наверняка в инете этой инфы достаточно
angir
Все зависит от доступных вам вычислительных ресурсов. Можно использовать как КИХ так и БИХ фильтры, все зависит от того, что вы хотите получить. Параметры и тех и других, естественно, можно менять на лету, правда, сталкиваясь при этом с некоторыми переходными процессами ж-)
Для расчета коэффициентов можно воспользоваться специальными программами, тем же matlab, например.
SPS
Цитата(angir @ Mar 11 2005, 13:53)
Для расчета коэффициентов можно воспользоваться специальными программами, тем же matlab, например.
*


Или Mathcad.
Alhen
Цитата(SPS @ Mar 11 2005, 16:31)
Цитата(angir @ Mar 11 2005, 13:53)
Для расчета коэффициентов можно воспользоваться специальными программами, тем же matlab, например.
*


Или Mathcad.
*



А что действительно, реально у MathCad-а появился синтезатор фильтров наподобии MatLab-Simulink?
А по существу вопроса, на данном форуме про это много сказано, и если взять и как-то это кратко описать то получится следующее.
1) Запускаем MatLab и в Simulink-е выбираем в разделе DSP инструмент Filter Design.
2) Выбираем тип Фильтра, в нашем случае полосовой с заданным интервалом частот и наклоном характеристик. Чем круче наклон тем больше коэфициентов.
3) Нажимаем на кнопочку Design Filter и получем набор коэффициентов.
4) Смотрим на расчетные характеристики и если они хороши - срисовываем коэффициенты и блок схему вычислений (ее тоже можно посмотреть в соответствующем окошке)
5) Берем подходящий DSP процессор и реализуем схему вычислений с коэффициентами.
Все должно работать в реальном времени (конечно если количество коэффициентов и быстродействие позволяет т.е. здесь надо найти оптимум). Кроме того синтезированный и реальный фильтр могут отличаться из-зи ошибок округления в DSP процессоре, но у MatLab есть возможность подстроиться по ограничения процессора и протестить реальные характеристики. И наконец на некоторые процессоры он может сгенерить програмный код так что 5 пункт будет упрощен.
Dmitron
Не могу себя назвать спецом по DSP, но отвечу.
Цифровой фильтр - аналог аналогового. Так вот, в аналоговой технике берут вначале ФВЧ ставят, потом ФНЧ. Я бы предложил разделить ФВЧ и ФНЧ операции, таким образом можно отдельно менять параметры по полосе сверху и снизу. И рассчётные формулы вывести можно(если нужно). В БИХ фильтре загруженность проца и обьём оперативы будет определяться порядком фильтра.

Анекдот по теме: два студента разговаривают:
- а у меня дипломный проект на основе дэ - эс - пи.
- Круто, DSP - цифровая обработка - нынче модно!!!
- да не! дэ - эс - пи - древесно стружечная плита.
ARTI
Для расчёта коэффициентов КИХ или БИХ фильтров ( с БИХ фильтрами я не связывался) можно например использовать Matlab. Там есть различные варианты расчета коэффициентов. Например в command window набираете fdatool, откроется окошко и в нем можно делать все. Можно спроектировать фильтр в Simulink(это тоже есть в Matlab-e), и там же с вашими данными помоделировать его работу. Дерзайте. Будут вопросы обращайтесь.

Удачи.
fontp
Мне показалось что он хочет рассчитывать фильтр на лету, а не в Матлабе

В сети можно найти готовые программы
КИХ-фильтр лучше считать по Ремезу (или McClellan-Parks что то же самое) - короче будет
С-код есть здесь http://www.janovetz.com/jake/ под именем remez///zip
Можно конечно и по Фурье с окном ....
Здесь полно обучающего материала http://www.nauticom.net/www/jdtaft/
по расчёту цифровых фильтров
Eugeno
Цитата(fontp @ Apr 26 2005, 12:46)
Мне показалось что он хочет рассчитывать фильтр на лету, а не в Матлабе
...

Как вариант - расчитать коэффициенты для предопределённого набора разных фильтров. Далее на ходу выбирать необходимый набор.

Остаётся переходной процесс: если позволяет производительность, то можно на период переходного процесса прогонять сигнал двумя фильтрами параллельно, выдавая на выход сигнал со старого фильтра, после некоторого времени начать выдавать результат с нового фильтра, а старый перестать просчитывать.
ipbatman
Возможна ли реальзация полосового фильтра в "не реальном масштабе" времени? Т.е. принимаю массивы отсчетов -> обрабатываю -> выдаю на кодек.
Herz
Цитата(ipbatman @ Jul 9 2009, 16:31) *
Возможна ли реальзация полосового фильтра в "не реальном масштабе" времени? Т.е. принимаю массивы отсчетов -> обрабатываю -> выдаю на кодек.

А какие проблемы? В "нереальном" всё гораздо проще. Хоть заново сигнал синтезируй. biggrin.gif
rsv
может стоит попробовать адаптивный эквалайзер?
конечно, их основное применение в технике связи, но тем не менее может и вам подойти
des00
Цитата(Olegovich @ Mar 11 2005, 04:19) *
Делать преобразование. а потом по мощности в полосе делать вывод?
Может быть, быстрее и надежнее делать свертку с некой импульсной характеристикой фильтра? только вот как её рассчитывать?


надежнее может быть, но видел в книге по ЦОС что начиная где то с 64 го порядка (для комплексных чисел) сделать свертку сигнала с ИХ фильтра в частотной области дешевле и быстрее с помошью БПФ. Быстрее в смысле количества операций %)
Olegovich
Ничего себе, тема всплыла.
Уже и не помню, зачем мне это было нужно...
laughing.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.