Симметричный полосовой фильтр в Matlab? - PullRequest
1 голос
/ 01 июня 2011

Я использую Matlab, чтобы найти эффективные способы деконволюции выхода спектрометра для получения исходного ввода.Функция deconvwnr () работает хорошо, за исключением того, что она вносит много синусоидального шума, от которого я избавляюсь с помощью встроенной в Matlab фильтрации по Баттерворту по полосе:

[b,a] = butter(3,[iters-freq,iters+freq],'stop'); recovered = filter(b,a,toBS);

Проблема в том, чтофильтр является односторонним, определяется как

Если x [n] является массивом, а y [n] является фильтрованным массивом, f: x-> y является односторонним, если y [n] = f (x [n], x [n-1], x [n-2] ...)

и вносит сдвиг в пики спектрометра:

shift

Таким образом, мне нужно использовать двусторонний симметричный фильтр.Есть ли простой, встроенный способ сделать это в Matlab?

--- В качестве альтернативы - есть ли действительно хорошие, "это просто работает", устойчивые к шуму алгоритмы деконво-поддержки?

1 Ответ

2 голосов
/ 01 июня 2011

Все фильтры производят «сдвиг» или «задержку» на выходе на столько количества выборок, сколько длина фильтра. Это поведение с использованием команды filter.

Чтобы не задерживать вывод, вы должны фильтровать его один раз вперед и один раз назад (+ shift -shift = 0). Это легко реализовать с помощью команды filtfilt. Синтаксис

filtfilt(b,a,toBS)

Недостатком (если вы действительно заботитесь об этом) является то, что эффективный порядок фильтрации удваивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...