реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> фильтрация, как правильно реализацется
Dubov
сообщение Dec 21 2012, 11:26
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Слышал тезис что при обработке блоков данных конечной длины например КИХ фильтром появляются "проблемы на краях сигнала". Я несовсем понял, но кажется речь шла о переходных процессах.
Вопрос как обрабатывать данные непрерывно? Скажем хочу промоделировать эти процессы на компьютере. Пишу программу на Си, которая заполняет массив (вместо реального АЦП). Данные нужно обрабатывать КИХ фильтром.
Как сделать "по уму"?
Я хочу сделать так: по указателю считать N отсчётов -> отфильтровать -> затем взять ещё N отсчётов - > отфильтровать....
Go to the top of the page
 
+Quote Post
evil_laugh
сообщение Dec 21 2012, 15:44
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 4-10-11
Пользователь №: 67 546



Цитата(Dubov @ Dec 21 2012, 14:26) *
Слышал тезис что при обработке блоков данных конечной длины например КИХ фильтром появляются "проблемы на краях сигнала". Я несовсем понял, но кажется речь шла о переходных процессах.
Вопрос как обрабатывать данные непрерывно? Скажем хочу промоделировать эти процессы на компьютере. Пишу программу на Си, которая заполняет массив (вместо реального АЦП). Данные нужно обрабатывать КИХ фильтром.
Как сделать "по уму"?
Я хочу сделать так: по указателю считать N отсчётов -> отфильтровать -> затем взять ещё N отсчётов - > отфильтровать....

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

Цитата(Dubov @ Dec 21 2012, 14:26) *
Я хочу сделать так: по указателю считать N отсчётов -> отфильтровать -> затем взять ещё N отсчётов - > отфильтровать....


Получите ужосчто. Циклическая свёртка вместо линейной. Сигнал фильтровать нужно непрерывно, а не блоками. Для этого и нужен сдвиговый буфер.

Если хотите делать фильтрацию в частотной области, то гугль по ключ. слову overlap-save Вам в помощь.
Go to the top of the page
 
+Quote Post
beaRTS
сообщение Dec 21 2012, 16:41
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111



по поводу кольцевого буфера/адресации делал гиф анимацию, а так же расписывал алгоритм такого ких фильтра-дециматора. коль интересно гляньте здесь

сам блоки данных не обрабатывал.
о краевом эффекте не наслышан.. только когда фильтр не полностью сперва "загружен" входными отсчетами (а именно пока во входном буфере нет половины длины импульсной характеристики), то наблюдался переходный процесс, а потом тишь-гладь.

Сообщение отредактировал beaRTS - Dec 21 2012, 16:42


--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
Go to the top of the page
 
+Quote Post
Dubov
сообщение Dec 21 2012, 17:03
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Цитата(evil_laugh @ Dec 21 2012, 18:44) *
Для непрерывной обработки данных потребуется циклический буфер длиной N, где N - кол-во коэфф-тов импульсной хар-ки фильтра. Вдвигаете в буфер отсчёт вх. сигнала, перемножаете буфер с ИХ фильтра, произведения суммируете. Краевой эффект будет заметен при недостаточной длине фильтра.



Получите ужосчто. Циклическая свёртка вместо линейной. Сигнал фильтровать нужно непрерывно, а не блоками. Для этого и нужен сдвиговый буфер.


то что вы описали - это тоже длоками по N отсчётов(пусть N = кол-во к-ф фильтра).

так как же тогда на Си реализовать сдвиговый буфер?
или, если я правильно понял, делать нужно так: при каждой итеррации в умножениях участвуют N-1 старых отсчётов и один новый?
не до конца понимаю...
Go to the top of the page
 
+Quote Post
Serg76
сообщение Dec 21 2012, 18:19
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Цитата(Dubov @ Dec 21 2012, 20:03) *
или, если я правильно понял, делать нужно так: при каждой итеррации в умножениях участвуют N-1 старых отсчётов и один новый?
не до конца понимаю...

именно так
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 06:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016