Генерация коэффициентов фильтра DSP в C / Java для свертки во временной области - PullRequest
4 голосов
/ 04 ноября 2011

Я пишу приложение для смартфона (Android, iPhone), которое выполняет некоторые DSP.Я опытный программист.Я также взял один класс бакалавриата EE в DSP и знаю, как использовать Matlab.

Я хотел бы применить низкочастотные и полосовые фильтры для моего сигнала во временной области.Насколько я понимаю, мне нужно выполнить свертку моих выборок во временной области и коэффициентов фильтрации.В Matlab я бы использовал функцию fir1 () для получения коэффициентов фильтра и функции conv () / filter () для применения свертки.

Я знаю, как написать функцию свертки в Java / C,но Я не знаю, как сгенерировать коэффициенты фильтра .Я знаю, что для фильтра нижних частот коэффициенты берутся из функции sinc, а полосовой фильтр является в основном смещенным фильтром нижних частот. Как программно сгенерировать эти коэффициенты?

Ответы [ 4 ]

1 голос
/ 04 ноября 2011

На веб-странице nicholson.com dsp имеется код для генерации коэффициентов FIR для низкочастотных и полосовых фильтров с использованием метода windowed-sinc . Код содержит около 10 строк старомодного языка Basic, но его можно легко преобразовать в C или Java. На этой странице есть объяснение, если вы хотите заново получить код.

Искусство при использовании windowed-sinc заключается в выборе лучшего окна. Более современный метод, который требует меньше догадок, заключается в использовании алгоритма Remez-exchange для генерации фильтра из спецификаций.

0 голосов
/ 07 ноября 2011

В прошлом я успешно использовал версию метода Parks-McClennan (Remez exchange), написанную на C как Jake Janovetz для программной генерации коэффициентов для полосового FIR-фильтра.Вы можете попробовать.

0 голосов
/ 05 ноября 2011

Если вы не ожидаете, что параметры фильтра (полоса пропускания, полоса перехода и т. Д.) Изменятся, самый простой метод - это сгенерировать коэффициенты в matlab и жестко кодировать их в вашей программе. Вы обнаружите, что matlab может генерировать хорошие фильтры со значительно меньшими коэффициентами, чем метод окна. Учитывая, что свертка является операцией порядка MxN (M = количество коэффициентов фильтра, а N - количество выборок), уменьшение M может существенно повлиять на производительность.

0 голосов
/ 04 ноября 2011

Я нашел учебник, который генерирует коэффициенты фильтра в коде C ++, который относительно легко перевести в код Java.Учебное пособие можно найти здесь: http://baumdevblog.blogspot.com/2010/11/butterworth-lowpass-filter-coefficients.html. Надеюсь, оно вам пригодится.

Это довольно интересная тема, и я скоро собираюсь сделать подобный проект сам:)

...