Практическа реализация цифрового фильтра

Обсуждаем цифровые устройства...
Ответить
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Решил выделить этот вопрос в отдельную тему.
Теоретических аспектов работы фтлльтра в интернете полно, но вот практических реальзаций не очень.
Обьясните пожалуйста, как все-таки на практике все происходит. Изучая КИХ сложилось такое впнчатление об НЧ фильтрах. Сначала в буфер записываем значения с ацп, затем, когда пройдет один период порогового сигнала(максимальной пропускаемой частоты) преобразоваваем эти значения плавно в прямую, соединяющую начальную и конечную точки массива.
Логика подсказывает, что получится какая-то угОльная херня, но оазмышления по теории не дают других вариантов....
Реклама
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Сообщение misyachniy »

На структурной схеме фильтра:
http://www.kit-e.ru/articles/cad/2010_10_61.php
Видно, что для получения одного значения сигнала на выходе фильтра нужно взять значение нескольких выборок, помножить каждую на отдельный коэффициент, затем сложить вместе.
Реклама
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

А откуда коэфициент брать? Сколько выборок нужно сделать и лт чего зависит их количество?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Была когда-то тема...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Эиком - электронные компоненты и радиодетали
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

За ссылку спасибо, очннь интересная ветка.
Попробую поставить вопрос по другому :)
Нам, чтоб реализовать фильтр нужна текущая выборка, предыдущие выборки и коэфициент. Это теоретическая сторона. На практике нам нужно взять текущее значение напряжения с ацп и записать его в буфер(это будет предыдущая выборка), считать новое значение с ацп(это будет текущая выборка) и
Спойлерпопрыгать с бубном вокруг костра
что-то сделать (это должно стать кофициентом).
Вот я как раз и не пойму, что нужно сделать на практике для получения коэфициента... :dont_know:
Реклама
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Сообщение misyachniy »

isx писал(а):А откуда коэфициент брать? Сколько выборок нужно сделать и лт чего зависит их количество?
Предполагает научиться задавая вопросы? ;-)

Частота выборок зависит от частоты сигнала.
О теореме Котельникова расказывать не буду.

Количество выборок зависит от порядка и типа фильтра который требуется.

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

Для практиков и "обычных" инженеров программы ищутся в Гугле по строке "программа для расчета коэффициентов фильтра"
Например http://www.winfilter.20m.com/
Реклама
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Тоесть изучать поднаготную теории фильтров не имеет смысла и нужно использовать готовые программы?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Для общего развития и более глубокого понимания, успешного обхода вероятных граблей можно и изучить. Но в большинстве случаев достаточно знать типовые области применения различных фильтров аналоговой природы и их особенности. Затем изучить какие ограничения накладывает цифра (ее дискретность), как будет влиять частота дискретизации, тип характеристики - КИХ, хвостатые БИХ и т.п. А сами коэффициенты вычислять довольно трудоемкое занятие (погуглите синтез цифровых фильтров), которое нужно предоставить специально обученной программе. Я вижу такой путь.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Спасибо за информацию. Попробую завтра посмотреть программки. Как вопросы появятся вернусь :)
Держит паяльник хвостом
Сообщения: 958
Зарегистрирован: Вс июл 13, 2014 09:42:26

Сообщение IRMADE »

[quote="isx"]Решил выделить этот вопрос в отдельную тему.

Цифровые фильтры НЧ, полосовые дискриминаторы, ВЧ, строятся очень просто. Я разработал такие на основании информации, полученной в "Интегральные микросхемы с КМОП структурами", Р. Милин, Г. Гарланд, Москва, Энергия, 1979г. Изучайте!
Друг Кота
Аватара пользователя
Сообщения: 25596
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

isx писал(а):Тоесть изучать поднаготную теории фильтров не имеет смысла и нужно использовать готовые программы?
Если хотите свободно и осмысленно применять цифровую фильтрацию, то желательно разобраться в существе...
Представьте себе обычную RC - цепочку(резистор со входа на выход и емкость параллельно выходу).
Это простейший пропорционально-интегрирующий фильтр (с учетом сопротивления нагрузки).
По сути ИНТЕГРАТОР. Конденсатор НАКАПЛИВАЕТ напряжение пропорционально времени накопления и току заряда...
То есть он СУММИРУЕТ мгновенные значения входного напряжения с множителем определяемым постоянной времени цепи.
То есть математическим аналогом такого фильтра будет СУММАТОР последовательных дискретных значений входного напряжения с определенными коэффициентами. Эти коэффициенты зависят от времени выборки по отношению к текущему моменту времени.
Вот и делают ОКНО АНАЛИЗА, где размещают все ПОСЛЕДНИЕ значения выборок сигнала. Эти значения умножают на коэффициенты окна анализа и суммируют.
В простейшем случае коэффициенты одинаковы и равны 1/N, где N - число выборок в окне (длина окна или длительность накопления - это одно и то же). То есть фактически находят СРЕДНЕЕ за период анализа.
Получился ФНЧ.
А чтобы из ФНЧ сделать ФВЧ нужно ВЫЧЕСТЬ из входного сигнала значения ФНЧ.
Это эквивалентно снятию сигнала в RC цепочке не с конденсатора, а с резистора. Фактически дифференцирующая RC цепочка суть есть разность между входным сигналом и интегрирующей RC цепочкой из тех же элементов.
Попробуйте повернуть схему и Вы в этом убедитесь.
Так вот, в ФВЧ КИХ коэффициенты ОТРИЦАТЕЛЬНЫЕ...
:)
БИХ работает ровно точно также, но суммирование ведут на лету и с взвешивающим коэффициентом, который понижает влияние истории накопления на текущее суммирование. БИХ высоких порядков по сути являются симбиозом простейшего БИХ и КИХ...
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

WinFilter не выходит скачать.
Если у кого получилось, выложите пожалуйста.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

Рекурсивный ФНЧ:
Y(n) = Na*Yn + Nb*Xn >> k ; где Yn - предыдущий отсчет, Xn - текущий, k - целочисленный делитель степени 2-ки, Y(n) - текущее выходное значение.
http://we.easyelectronics.ru/Theory/che ... fRLtr.html

Пример реализации:
Спойлер; --------------------------------------
; Собственно цифровой фильтр
;---------------------------------------
; Y(n) = Na*Yn + Nb*Xn >> k ; где Yn - предыдущий отсчет, Xn - текущий, k - целочисленный делитель
; степени 2-ки

; Nb*Xn
; r20,r19,r18*r17,r16 = R7:R3 & clear r2 40 cikles

ldi r19,High(Nb) ; Constants
ldi r18,Low(Nb)

clr r20 ; значение записано выше

rcall D_MUL
mov r21,r3 ; save
mov r22,r4
mov r23,r5 ; max 3 byte
; Na*Yn
ldi r17,High(Na)
ldi r16,Low(Na)
lds r18,YnI+2 ; Low
lds r19,YnI+1 ; High
lds r20,YnI+0
rcall D_MUL
; Введем дополнение для увеличения точности результата (сохранение остатка при делении на 8)
ldi r16,K
dividesFI:
lsr r6 ; MSB
ror r5
ror r4
ror r3

dec r16
brne dividesFI
;---------------------------
add r21,r3
adc r22,r4
adc r23,r5

sts YnI+0,r23 ; MSB
sts YnI+1,r22
sts YnI+2,r21
; ror - деление на степень 2-ки
ldi r16,K
dividesI:
lsr r23 ; MSB
ror r22
ror r21

dec r16
brne dividesI ; Ответ в r22,r21
От частоты дискретизации и коэффициентов зависит частота среза.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Всем спасибо большое за ответы. Вроде начинаю понимать суть дела :) .
КРАМ писал(а):Если хотите свободно и осмысленно применять цифровую фильтрацию, то желательно разобраться в существе...
Не люблю работать с тем, о чем нифига не знаешь. Программы это хорошо, но вот если возникнет проблема, то не понимая сути, ничего сделать не сможешь :dont_know: ..
КРАМ писал(а):В простейшем случае коэффициенты одинаковы и равны 1/N, где N - число выборок в окне (длина окна или длительность накопления - это одно и то же). То есть фактически находят СРЕДНЕЕ за период анализа.
Тогда получается, что частота среза будет зависеть не только от выбранного коэффициента, но и от частоты выборок и длины окна?
Друг Кота
Аватара пользователя
Сообщения: 25596
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

isx писал(а): Тогда получается, что частота среза будет зависеть не только от выбранного коэффициента, но и от частоты выборок и длины окна?
Тогда получается, что частота среза зависит ТОЛЬКО ОТ ДЛИНЫ ОКНА во временнОй интерпретации.
То есть для получения среза в 1 Гц потребуется накопить данные за время в 1 секунду. Независимо от числа выборок.
Частота выборок должна соответствовать требованиям теоремы Котельникова, то есть быть больше удвоенной верхней частоты ВХОДНОГО спектра. Плюс к этому нужно добавить требования по подавлению зеркального спектра при преобразовании. Эти требования формируются на основании имеющихся параметров использованного входного аналогового фильтра, который подавит зеркальный спектр.
Частота среза НЕ ЗАВИСИТ ОТ КОЭФФИЦИЕНТОВ оконной функции. От формы окна зависит ФОРМА АЧХ фильтра (параметры склонов, пульсации АЧХ, величины подавления в полосе заграждения и т.п.)
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

КРАМ писал(а): Плюс к этому нужно добавить требования по подавлению зеркального спектра при преобразовании. Эти требования формируются на основании имеющихся параметров использованного входного аналогового фильтра, который подавит зеркальный спектр.
А можно подробнее про этот фильтр? Судя из прочитанного:
Зеркальная частота - частота в супергетеродинах, симметричная ( зеркальная) частоте настройки по отношению к частоте гетеродина.
зеркальная частота будет равна 1МГц (скорость работы ацп) -+ 20кГц (максимальная звуковая частота). Если это так, то такую частоту вообще не будем слышать....
Друг Кота
Аватара пользователя
Сообщения: 25596
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Все очень просто. При семплировании входного сигнала неизвестно сколько периодов этого сигнала находилось между выборками.
Получается стробоскопическое преобразование.
https://ru.wikipedia.org/wiki/Алиасинг
Ну а фильтр обрезающий эти паразитные полосы преобразования называется антиалиасинговым (сглаживающим)...
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Чёт я запутался... Это получается нам надо срезать все частоты свыше звукового диапазона перед тем как подать их на ацп? Но по сути, они сами должны срезаться из-за недостаточной частоты выборок...
Друг Кота
Аватара пользователя
Сообщения: 25596
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Нет, нужно срезать все частоты выше половины частоты дискретизации.
Вы имеете право корректно оцифровать только тот входной сигнал, который удовлетворяет теореме Котельникова.
Все остальное должно быть подавлено.
Далее Вы производите цифровую фильтрацию внутри преобразованного спектра.
Например.
Есть звуковой диапазон 20 кГц. Вы его преобразовали с частотой семплирования 96 кГц. Все что выше 48 кГц должно быть подавлено с динамическим диапазоном АЦП.
Для 10 разрядного АЦП это будет 60 дБ. То есть на частоте 48 кГц уже должно быть -60 дБ. А срез антиалиасингового ФНЧ должен быть выше входного спектра, то есть 20 кГц.
Вот и считайте этот входной ФНЧ
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Спасибо большое за подробные разъяснения :)
Пока вопросов нет. Скоро перейду к практике, думаю, с ней и вопросы появятся :) .
Ответить

Вернуться в «Цифровая техника»