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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Переходные процессы в цифровых фильтрах, вопрос
Zelepuk
сообщение Mar 23 2011, 12:18
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Собираюсь реализвоать Цифровую фильтрацию на Си.
Смотрю в матлабе модель фильтра. Как и положено наблюдается нектороый переходный процесс.

Мой алгорит фильтрации бцдет работать так:

отсчёты из АЦП поступают в некий буфер, раз в 1 секунду возникает прерывание, в котором, выборки из буфера кидаются в друго буфер, и производится фильтрация.

Боюсь, что возникнет переходный процесс. Так как данные при таком подходе фильтруются не непрерывно.

Какими приёмами можно избежать переходных процессов?
Go to the top of the page
 
+Quote Post
SSerge
сообщение Mar 23 2011, 12:29
Сообщение #2


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



"некий буфер" должен быть кольцевым.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
maugli
сообщение Mar 23 2011, 12:32
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 29-07-08
Из: Серпухов
Пользователь №: 39 283



Сохраняйте полное состояние фильтра в прмежутках фильтрации .
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 23 2011, 13:15
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(SSerge @ Mar 23 2011, 15:29) *
"некий буфер" должен быть кольцевым.


да. буфер кольцевой, но фильтрация всё равно осущестлвяется над куском этого буфера...

Цитата(maugli @ Mar 23 2011, 15:32) *
Сохраняйте полное состояние фильтра в прмежутках фильтрации .


Можно по подробнее. Что такое полное состояние фильтра?
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Mar 23 2011, 13:36
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Вы будете использовать какой тип фильтра? КИХ, БИХ, FFT?
Как я понимаю, если вы хотите делать обработку порциями, то это только FFT фильтр. Для отсутствия выбросов на границах блоков с такими фильтрами надо использовать специальный алгоритм сшивки. Точно не скажу, но там вроде подбирается фаза.
Go to the top of the page
 
+Quote Post
V_G
сообщение Mar 23 2011, 13:46
Сообщение #6


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Переходные процессы - неотъемлемая часть любых фильтров, придется смириться.
Вам следует лишь обеспечить непрерывность поступления входных данных от АЦП. В этом случае переходный процесс будет только в начале работы. При любых разрывах во ВХОДНЫХ данных (а не в их обработке) будут переходные процессы на разрывах.
А так - пока непонятно, во время прерывания и передачи части данных на обработку у вас входные данные продолжают равномерно поступать?
И что такое полное состояние фильтра вы поймете, когда напишете формулу для цифровой фильтрации.

ЗЫ. Обработку порциями можно реализовать не только в БПФ (FFT), но и в КИХ- и БИХ-фильтрах. В БПФ для "сшивки" используется суммирование с перекрытием.

Сообщение отредактировал V_G - Mar 23 2011, 13:49
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 23 2011, 13:55
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



У меня данные от АЦП полступают всегда, прерывание от АЦП - высокоприоритетное прерывание.

Надо осуществить постоянное поступление данных в фильтр? Бесконечная циклическая фильтрация? а если фильтров несколько?

Алгоритм по сути такой: данные из циклического буфера фильтруются ких фильтром и идут на FFT, в то же время, необходимо раз в секунду фильтровать блок данных БИХ фильтром (в прерывании) и вычислять частоту сигнала.

Вот как-то так.
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Mar 23 2011, 15:04
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Цитата
Обработку порциями можно реализовать не только в БПФ (FFT), но и в КИХ- и БИХ-фильтрах

Но тогда непонятно как порции результатов сшивать. Если сшивать не надо, то понятно, что можно.

Цитата
Надо осуществить постоянное поступление данных в фильтр? Бесконечная циклическая фильтрация? а если фильтров несколько?

Несколько последовательных фильтров или несколько параллельных каналов фильтров?

Сообщение отредактировал Мусатов Константин - Mar 23 2011, 15:05
Go to the top of the page
 
+Quote Post
bahurin
сообщение Mar 23 2011, 15:38
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 20-09-08
Пользователь №: 40 347



любой фильтр КИХ или БИХ может работать бесконечно. Переходной процесс будет только в начале если данные идут без разрывов. Цифровой фильтр это набор ячеек памяти и коэффициентов нерекурсивной и рекурсивной части (если она есть). Поскольку коэффициенты не изменяются то вам нужно запомнить состояние ячеек памяти на последнем отсчете предыдущего куска и использовать эти значения как начальные условия на следующем куске. Сшивка в этом случае будет автоматической.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 23 2011, 15:39
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Алгоритм обработки данных должен выглядеть как на рисунке ниже.
Как фильтрация по уму делается?
Понимаю что накапливать блок данных, а затем фильтровать не совсем good (это для FFT годится).

как я понимаю фильтрация (как КИХ так и БИХ в моём случае) должна выполнятся непрерывно с приходом новго отсчёта? Соответственно формируются новые буферы циклические (ещё два буфера помимо основного), в которых лежат фильтрованые данные...
а в прерывании (1 раз в секунду для расчёта частоты) уже обработывать фильтрованые данные, а не фильтровать...

Наставтье на путь истиный...
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Mar 23 2011, 20:40
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Цитата(bahurin @ Mar 23 2011, 18:38) *
любой фильтр КИХ или БИХ может работать бесконечно. Переходной процесс будет только в начале если данные идут без разрывов. Цифровой фильтр это набор ячеек памяти и коэффициентов нерекурсивной и рекурсивной части (если она есть). Поскольку коэффициенты не изменяются то вам нужно запомнить состояние ячеек памяти на последнем отсчете предыдущего куска и использовать эти значения как начальные условия на следующем куске. Сшивка в этом случае будет автоматической.

Это все понятно. Выражение блоковая обработка означает, что получили ограниченный блок и с ним возимся. А КИХ или БИХ фильтры потоковые, работающие на FIFO или циклических буферах. В том то и суть, что операция выполняется на каждом отсчете (не важно потом или сразу), в отличие от FFT, где берется блок и операция выполняется над блоком. Хотя, вроде есть алгоритмы непрерывного FFT...

Цитата(Zelepuk @ Mar 23 2011, 18:39) *
Алгоритм обработки данных должен выглядеть как на рисунке ниже.
Наставтье на путь истиный...

То, что Вы называете блок компенсации - это так же фильтр, КИХ или БИХ, в зависимости от сложности и требований. Его было бы логично объединить с децимирующим, что бы снизить вычислительные нагрузки. Но это надо смотреть вам исходя из параметров. КИХ фильтр исполняется на каждом отсчете. Имеете циклический буфер, на место самой старой записи пишете новую, сдвигаете курсор начала и выполняете операцию свертки. Полученный результат идет дальше. И так на каждом шаге. Где надо делать FFT, копите буфер. Как заполнился, выполнили FFT и очистили буфер. Может потребоваться два буфера, если FFT не выполнится за цикл оцифровки.
Go to the top of the page
 
+Quote Post
Pavel_SSS
сообщение Mar 23 2011, 21:43
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 11-10-10
Из: Москва
Пользователь №: 60 055



Цитата(Zelepuk @ Mar 23 2011, 18:39) *
Алгоритм обработки данных должен выглядеть как на рисунке ниже.
Как фильтрация по уму делается?
Понимаю что накапливать блок данных, а затем фильтровать не совсем good (это для FFT годится).

как я понимаю фильтрация (как КИХ так и БИХ в моём случае) должна выполнятся непрерывно с приходом новго отсчёта? Соответственно формируются новые буферы циклические (ещё два буфера помимо основного), в которых лежат фильтрованые данные...
а в прерывании (1 раз в секунду для расчёта частоты) уже обработывать фильтрованые данные, а не фильтровать...

Наставтье на путь истиный...

Какие частоты на входе и на выходе? По идее Вам надо спроектировать, к примеру в Матлабовском FDATool децимирующий фильтр, потом сделайте кольцевой буфер длиннее порядка фильтра и такой длинны, чтобы данные не наползали за время обработки, после чего вычисляйте каждый N-ный отсчет (N - коэффициент децимации, надеюсь у Вас - целый), результат сохраняйте в другой кольцевой буфер и обрабатывайте дальше.
Кстати, а зачем перед измерителем частоты БИХ - фильтр? Частоту можно измерить например путем подсчета переходов через ноль - чтобы не мешал шум переход засчитывайте только если сигнал после перехода пересек также некий пороговый уровень в ту же сторону. Пороговый уровень может быть, например, 1/3 размаха, либо, если сигнал зашумлен, можно сделать ФАПЧ.
Go to the top of the page
 
+Quote Post
V_G
сообщение Mar 24 2011, 04:37
Сообщение #13


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Про "сшивку", суммирование с перекрытием и "фильтрацию по уму" в случае FFT.
Сначала выясняете длину импульсной характеристики M. Если имеете только частотную характеристику, делаете обратное ДПФ от нее и выясняете, при каком M отсчеты становятся меньше требуемой точности вычислений.
Потом определеяте потребную длину FFT N.
Входной поток разбиваете на блоки по N-M отсчетов, дополняете M нулями и делаете FFT. При необходимости фильтруете и делаете обратное FFT.
Таким образом, входные блоки имеют длину N-M, выходные N. Непрерывный выходной поток получаете, объединяя выходные блоки с перекрытием M отсчетов. Внутри зоны перекрытия суммируете одновременные отсчеты из разных блоков. От более раннего блока это затухающие отсчеты, от более позднего - начальные отсчеты переходного процесса. В сумме они обеспечивают математически корректную сшивку блоков.
Все, непрерывный выходной поток не имеет переходных процессов внутри себя, только в начале.
Хотя, может, ваша задача и не требует обратного преобразования и суммирования с перекрытием.

Сообщение отредактировал V_G - Mar 24 2011, 04:38
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Mar 24 2011, 06:29
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



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

Итого имеем систему:

АЦП -> кольцевой буфер -> КИХ-фильтр дециматор -> кольцевой буфер -> БИХ-фильтр


Вывод: до каждого фильтра должен стоять кольцевой буфер.

Сообщение отредактировал Zelepuk - Mar 24 2011, 06:30
Go to the top of the page
 
+Quote Post
Pavel_SSS
сообщение Mar 24 2011, 07:01
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 11-10-10
Из: Москва
Пользователь №: 60 055



Цитата(Zelepuk @ Mar 24 2011, 09:29) *
Спасибо всем за коментарии. Ситуация проясняется.
Выходит что если меем некий каскад КИХ-фильтров (к примеру), то нужно для каждого этапа (для каждого нового фильтра) делать свой колцевой буфер?
Есть какие-то критерии повыбору длины? иначе говоря как расчитать длину кольцевого буфера чтобы успеть брать и обробатывать по одному тсчёту(фильтрация)?

Итого имеем систему:

АЦП -> кольцевой буфер -> КИХ-фильтр дециматор -> кольцевой буфер -> БИХ-фильтр


Вывод: до каждого фильтра должен стоять кольцевой буфер.

В принципе да. Входной кольцевой буфер необходим для того, чтобы хранить достаточное для работы фильтра количество входных отсчетов, выходные отсчеты, соответственно, сохраняются в выходном кольцевом буфере.
КИХ - фильтры каскадно практически никогда не включают - их почти всегда можно привести к одному фильтру. БИХ - фильтры наоборот - почти всегда разбивают на звенья второго порядка и эти звенья включают последовательно.
Go to the top of the page
 
+Quote Post

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

 


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


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