Цифровой фильтр на микроконтроллере

Цифровой фильтр на микроконтроллере

Во многих цифровых устройствах для преобразования аналоговых сигналов используется АЦП. Часто аналоговые сигналы содержат нежелательный высокочастотный шум.
Чтобы "очистить" сигнал от этих шумов применяются аналоговые RC фильтры низких частот, которые устанавливаются после источника сигнала. Такой подход не всегда идеален и практичен. Например, для больших постоянных времени требуются большие значения R и C.
В качестве альтернативы, можно "очистить" зашумленный сигнал с помощью цифрового эквивалента аналогового RC фильтра нижних частот.

По сути, программа этого цифрового фильтра состоит всего из двух строчек на Си.:

Dacc = Dacc + Din — Dout
Dout = Dacc/K

где Dout — выходное значение фильтра, Din — входное значение фильтра, K — постоянный коэффициент, который рассчитывается по формуле:

K = T x SPS

где T — это постоянная времени фильтра, SPS — частота дискретизации АЦП.

Dacc и Dout должны сохранять свои значения, после выполнения алгоритма. Если алгоритм реализовать в виде функции, то эти переменные можно просто сделать статическими.

Для 8-ми разрядных входных данных алгоритм цифрового фильтра в Си коде может выглядеть так:

Для наглядности рассмотрим реальный пример использования этого алгоритма в микроконтроллере AVR atmega16. Допустим мы хотим сымитировать RC фильтр с постоянной времени 0.001 c. Схема представлена на рисунке ниже.

R1 = 10 кОм
C1 = 0.1 мкФ
Trc = R1*C1 = 10000 Ом * (0.1/1000000) Ф = 0.001 с
F = 1/(2*Pi*R1*C1) = 1/(6.28 * Trc) =

Тактовая частота модуля АЦП в микроконтроллерах AVR зависит от его тактовой частоты и внутреннего предделителя. Допустим, наш микроконтроллер тактируется от внутреннего генератора с частотой 8 МГц, а предделитель в модуле АЦП установлен равным 64. Тогда тактовая частота модуля АЦП будет равна:

Fadc = Fcpu/Pre = 8000000/64 = 125000 Гц

Из этой частоты можно рассчитать частоту дискретизации АЦП при работе в режиме непрерывного преобразования. Она равна отношению тактовой частоты АЦП к количеству тактов, которые требуются для выполнения одного преобразования. По даташиту можно узнать, что одно преобразование выполняется за 13 тактов (если это не первое преобразование).

Fs = Fadc/n = 125000/13 =

Итак, частота дискретизации равна 9600 Гц, а постоянная времени 0.001 с. Коэффициент фильтра будет равен:

K = SPS x T = 9600 * 0.001 = 9.6 =

Теперь все данные известны и можно написать тестовую программу для проверки алгоритма.

Я сделал эту программу очень простой. АЦП работает в режиме непрерывного преобразования. В прерывании 8-ми разрядный результат преобразования обрабатывается алгоритмом и записывается в порт C. К порту C подключен схема R-2R ЦАПа на основе резисторов, чтобы можно было сравнить полученный сигнал с сигналом от аналогового RC фильтра. Тактовая частота микроконтроллера atmega16 — 8МГц, коэффициент предделителя АЦП — 64. Тестовая схема показана на рисунке ниже.


Код программы

Результат моделирования

Результат моделирования программы в Proteus`e показан на рисунке ниже. Красный сигнал — это входной меандр частотой 200 Гц, синий — сигнал на выходе RC фильтра с постоянной времени 0.001 с, а желтый — сигнал обработанный микроконтроллером. Он имеет ступенчатую форму, так как после ЦАПа не подвергался фильтрации.

Как видно из рисунка форма сигнала микроконтроллера достаточно точно повторяет сигнал с выхода RC фильтра.

Для наибольшего быстродействия коэффициент К лучше выбирать кратным степени 2 (например 2, 4, 8..), тогда компилятор будет заменять операцию деления сдвигами. В противном случае при высокой частоте дискретизации, микроконтроллер может не успевать рассчитывать следующее выходное значение фильтра. Я столкнулся с этим при моделировании.
Также необходимо учесть тот момент, что при больших значениях коэффициента К, переменная Dacc должна иметь достаточную разрядность, чтобы не наступало ее переполнение.

Запись от AZM на субдомене electronics-and-mechanics
Все записи на субдомене: Электроника и механика (записки от AZM)

Для микроконтроллеров и не только: Алгоритм Герцеля, БПФ, и другие цифровые способы определить наличие искомой частоты в оцифрованном сигнале (цифровые фильтры)
Сразу скажу — я не математик, более того, я только вчера узнал что: sin(x)^2+cos(x)^2=1, потому что благополучно прогуливал уроки в школе.
В общем, я не буду сыпать формулами, а расскажу всё как ни будь по проще, постараюсь привести наглядные примеры.
Алгоритмы детекторов наличия частоты в оцифрованном сигнале

Если в общих чертах, то что бы определить наличие некой частоты в оцифрованном сигнале нужно:
Массив_синусов в одну волну
такой как если бы мы создавали синусоиду искомой частоты на нашей частоте дискретизации.
Массив_косинусов в одну волну
такой, как если бы мы создавали синусоиду искомой частоты на нашей частоте дискретизации.
Естественно, что Массив_синусов и Массив_косинусов будут иметь одну длину, а массив с данными нашего оцифрованного сигнала должен быть не меньшей длины.
Значения в массивах должны быть знаковыми (не важно "signed char" или "signed int", важно что "signed").
Затем нужно проделать следующее:
a=0;
b=0;
for (n=0; n
очевидно, что косинус, это синус сдвинутый на 1/4 периода частоты, а значит достаточно иметь только таблицу синуса длиннее на 1/4 периода и начинать проход по ней для получения косинуса сдвинув указатель на 1/4 периода от начала.

Как сгенерировать массив значений синуса для заданной частоты дискретизации:
Как сгенерировать массив значений синуса заданой длины и максимальных значений
Исходный код на СИ (C):
Исходный код на perl:
Теперь самое интересное:
этот метод обнаружения частоты работает даже если у вас дискретность всего 1 бит на выборку!
Проще говоря, если вам не нужно точно измерять соотношение амплитуд сигналов в оцифровке, а достаточно лишь ограничиться результатом вида "есть/нет" то таблицу синусов/косинусов можно сделать однобитную и входной сигнал принимать не с АЦП (ADC), а с обычного компаратора или даже с логического входа микроконтроллера.
При однобитном сигнале и таблице синус/косинус можно вместо умножения применять XOR, что значительно ускорит алгоритм.

Читайте также:  Лучшие наушники для просмотра фильмов
Алгоритм Герцеля

Говорят, что алгоритм Герцеля это частный случай от того, что изложено выше, просто оптимизированный для одной частоты, но для меня это магия, по этому просто приведу реально работающий код (наверно это не лучшая реализация, но рабочая):
соответственно на выходе из цикла "flag_frq_yes" либо 1 если в массиве оцифровки "InSample" есть сигнал с нужной частотой или 0, если такового сигнала там нет.
Алгоритм работает так, что значение "resultat" при наличии в оцифровке нужной частоты, при каждом новом проходе будет больше предыдущего значения "resultat", иначе оно будет изменяться от шага к шагу (например в случае если в оцифровке гармоника нужной частоты).
Допустимые колебания заданы как 0.85, чем меньше допуск, тем более точна должна быть искомая частота и тем меньше шума должно быть в исходном сигнале.
Длина "окна" здесь выбрана 100 (алгоритм ориентирован на поиск частот порядка 1500Гц при оцифровке 15кГц), при большем окне точность будет выше, ширину более 200 наверно вообще нет смысла выбирать для таких приложений как декодирование DTMF или CTCSS при оцифровке 15кГц или ниже.

Алгоритм ФНЧ (фильтра низких частот)

ФНЧ и реализуется крайне просто: надеюсь, все знают, что максимальная частота, которая может быть оцифрована, равна частоте дискретизации / 2.
Соответственно если у нас есть оцифровка на 12000 Гц, а нам надо отрезать всё, что выше 300Гц, то всё что надо сделать — преобразовать частоту дискретизации из 12000 в 600.
То есть нужно вычислить среднее арифметическое 20 выборок и это значение использовать для этих 20 выборок, так как:
12000 / 600 = 20
Пример в коде:
Результат работы такого алгоритма будет аналогичен результату действия интегрирующей RC цепи, если требуется алгоритм с более крутой АЧХ (Блэкмена, Кайзера, Хемминга, Хеннинга), то придётся применить более сложный алгоритм требующий больше ресурсов, построение такого алгоритма описано например здесь:
habrahabr.ru — Построение цифрового фильтра с конечной импульсной характеристикой

Алгоритм ФВЧ (фильтра высоких частот)

По сути, обратный алгоритм к алгоритму ФНЧ фильтра низких частот.
То есть нам нужно проделать тот же процесс что и для реализации ФНЧ, только полученные значения вычесть из наших данных оцифровки.

Полосовой фильтр

Комбинация ФНЧ и ФВЧ, просто ФНЧ — определяет верхнюю частоту которую пропустит фильтр, а ФВЧ — нижнюю частоту.
По иному говоря:
ФНЧ с частотой среза 4000Гц, затем ФВЧ с частотой среза 500Гц = фильтр с полосой 500 . 4000 Гц

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

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

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык русский
Дата добавления 31.10.2012
Размер файла 2,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Министерство образования и науки Российской Федерации

Федеральное государственное образовательное учреждение

высшего профессионального образования

"Разработка и реализация цифрового фильтра на микроконтроллере AVR"

Синтез передаточной функции и параметров фильтра

Границы устойчивости фильтра

Выбор структурной схемы реализации фильтра

Анализ ошибок квантования

Программа реализации фильтра

Принципиальная схема и печатная плата фильтра

В данной курсовой работе производится разработка цифрового рекурсивного заграждающего фильтра четвертого порядка. Произведен расчет АЧХ, ФЧХ и границ устойчивости фильтра. Выбрана оптимальная для наших условий структурная схема реализации. Проанализированы ошибки квантования и частотные характеристики. Произведен выбор АЦП, МК и ЦАП. Разработана принципиальная схема и разводка печатной платы цифрового фильтра.

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

Аналоговым сигналом называется сигнал, определенный для каждого момента времени.

Дискретным сигналом называется сигнал, определенный только в дискретные моменты времени.

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

Фильтрацией называется процесс изменения частотного спектра сигнала в некотором желаемом направлении. Этот процесс может привести к усилению или ослаблению частотных составляющих в некотором диапазоне частот, к подавлению или выделению какой-нибудь конкретной частотной составляющей и т. п. Фильтрация нашла многочисленные применения, например для подавления шума, маскирующего сигнал, для устранения искажения сигнала, вызванного несовершенством канала передачи или погрешностями измерения, для разделения двух или более различных сигналов, которые были преднамеренно смешаны для того, чтобы в максимальной степени использовать канал, для разложения сигналов на частотные составляющие, для демодуляции сигналов, для преобразования дискретных сигналов в аналоговые, для ограничения полосы частот, занимаемой сигналами.

Читайте также:  Боинг 747 сбитый в 1983

Цифровым фильтром называется цифровая система, которую можно использовать для фильтрации дискретных сигналов. Он может быть реализован программным методом или с помощью специальной аппаратуры, и в каждом из этих случаев цифровой фильтр можно применить для фильтрации сигналов в реальном времени или для фильтрации предварительно записанных сигналов.

Аналоговый сигнал с ограниченным спектром можно преобразовать в дискретный посредством дискретизации. Полученный таким образом дискретный сигнал можно на основании теоремы отсчетов снова превратить в исходный аналоговый сигнал посредством интерполяции. Поэтому для решения задач фильтрации в реальном времени можно использовать цифровые фильтры, выполненные с помощью специальной аппаратуры (в недавнем прошлом эти задачи решались исключительно с помощью аналоговых фильтров). Преимущества, получаемые при этом, связаны с традиционными преимуществами цифровых систем вообще и заключаются в следующем: 1) некритичности к вариациям параметров компонентов; 2) нечувствительности к уходу параметров компонентов и внутренним помехам; 3) высокой точности; 4) малых физических размерах; 5) высокой надежности.

Очень важным дополнительным преимуществом цифровых фильтров является простота перестройки их параметров что необходимо для изменения характеристик фильтров. Это свойство позволяет разрабатывать программируемые фильтры, решающие одновременно несколько задач фильтрации, а также новые типы фильтров, например адаптивные. Основным недостатком цифровых фильтров, выполненных аппаратно, является их относительно высокая стоимость. Однако, учитывая значительные достижения в области создания больших интегральных схем, можно надеяться, что стоимость аппаратно реализованных цифровых фильтров значительно уменьшится в недалеком будущем. Тогда цифровые фильтры заменят аналоговые во многих применениях.

Синтез передаточной функции и параметров фильтра

Исходные данные для расчета:

· нижняя полоса пропускания (0 — 50) Гц

· верхняя полоса пропускания (450 — 500) Гц

· полоса подавления (200 — 300) Гц

· уровень пульсаций в полосе пропускания 3 дБ

· уровень затухания в полосе подавления 20 дБ

· частота дискретизации 4 кГц

При синтезе частотно-избирательных рекурсивных фильтров удобнее всего воспользоваться методами преобразования АФ в ЦФ.

Такой синтез включает в себя:

· выбор метода отображения p- плоскости в z — область;

· расчет АФ по требованиям, заданным к ЦФ;

· применение к АФ выбранного метода отображения p- плоскости в z — область.

Рассчитываемый по требованиям, заданным к ЦФ, АФ называется фильтром — прототипом, или просто прототипом.

Основные ограничения для методов синтеза ЦФ по прототипу:

· сохранение существенных свойств АЧХ прототипа в АЧХ ЦФ, что означает необходимость отображения мнимой оси p- плоскости на единичную окружность z — области;

· устойчивый прототип должен быть преобразован в устойчивый ЦФ, что означает необходимость отображения полюсов устойчивого прототипа из левой p- полуплоскости внутрь единичного круга z — области.

С помощью системы MatLab синтезируем АФ — прототип. Применим фильтр Чебышева второго рода. По полученным с помощью функции chebу2 коэффициентам и запишем передаточную характеристику АФ:

где N — порядок фильтра;

Rs — уровень затухания в полосе подавления;

W0 — двухэлементный вектор частот среза;

‘stop’ — тип фильтра (РФ);

‘s’ — признак аналогового расчета;

Частотные характеристики (рис. 1)

Удовлетворение заданным требованиям можно увидеть на ЛАЧХ (рис.2):

В увеличенном виде:

Нули и полюсы АФ — прототипа:

Рис. 4. О — нули; Х — полюса;

Т.к. полюса лежат в левой р — полуплоскости, то АФ — прототип устойчивый.

Синтезируем ЦФ по АФ — прототипу методом билинейного z — преобразования с помощью стандартных средств MatLab. Обратимся к функции bilinear и получим коэффициенты числителя и знаменателя функции передачи синтезированного ЦФ:

где bz и az — коэффициенты полиномов числителя и знаменателя функции передачи синтезированного ЦФ;

fd — частота дискретизации в герцах;

Запишем передаточную функцию ЦФ

Частотные характеристики ЦФ:

Рис. 5. АЧХ и ФЧХ ЦФ

На увеличенной ЛАЧХ ЦФ видно выполнение заданных требований:

Нули и полюсы ЦФ (рис. 6):

Рис. 6. О — нули; Х — полюса;

Видно, что полюса лежат внутри окружности единичного радиуса на z плоскости, значит ЦФ устойчивый.

Границы устойчивости фильтра

Разобьем передаточную функцию ЦФ на два биквадратных звена

Система будет устойчивой, если устойчиво каждое звено.

Рассмотрим характеристическое уравнение звена:

При имеем два разных действительных корня;

— два одинаковых действительных корня;

— два комплексно — сопряженных корня.

Значит парабола разделяет области действительных и комплексных корней. Условия устойчивости:

На плоскости коэффициентов границы устойчивости будут выглядеть так:

Для получения коэффициентов числителей и знаменателей биквадратных звеньев обратимся к стандартной функции MatLab — tf2sos

где sos — матрица, содержащая вещественные коэффициенты, вида:

g — параметр, позволяющий учесть в БЗ коэффициент передачи

Видно, что лежат внутри треугольника, следовательно фильтр является устойчивым.

Выбор структурной схемы реализации фильтра

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

Читайте также:  Как собрать антенну решетку

Разностное уравнение фильтра записывается в виде

Для реализации на МП могут быть использованы структурные схемы биквадратного звена прямой или канонической формы.

Рис. 7. Прямая и каноническая схема биквадратного звена

Отметим, что хотя структурные схемы описываются одинаковой передаточной функцией, между ними существуют важные отличия. Например, в структуре реализованной в прямой форме, слагаемые прямой связи, содержащие коэффициенты b, b1, b2, определяющие нули передаточной функции, предшествуют слагаемым обратных связей, содержащих a1 и a2 (относятся к полюсам). Для канонической структуры все наоборот. В результате, на практике полюса канонического звена имеют тенденцию к дальнейшему усилению шума, генерируемого при вычислениях. Реализация в прямой форме имеет один сумматор и одну точку квантования для сумм произведений. Каноническое звено имеет два сумматора и две точки квантования. Выход первого сумматора канонического звена приходится на внутренний узел. Следовательно, каноническое звено подвержено внутреннему самоподдерживающемуся переполнению. Реализация в прямой форме не содержит внутреннего узла, и переполнение является либо самоисправляющимся, либо его легко скорректировать извне. Более того, вход такого звена масштабируется на , в отличие от канонического звена, где вход никак не ограничивается.

Определим влияние ошибок квантования на звенья. При прямой форме разностное уравнение фильтра имеет вид

Модель с учетом шума квантования имеет вид:

Здесь входные и выходные отсчеты представляются как B-битовые числа (включая бит знака), т.е. входной сигнал квантован с помощью АЦП. После умножения произведения квантуются до B бит путем округления или усечения. Выходные сигналы пяти сумматоров, где осуществляются квантования произведений, поступают на входы сумматора 1. Поэтому все источники шума квантования можно объединить и подать на вход сумматора 1.

Мощность шума округления произведений определяется так:

где — передаточная функция фильтра, связывающая вход с выходом фильтра, — импульсная характеристика фильтра между входом и выходом фильтра, — квадрат нормы L2. Общая мощность шума на выходе фильтра:

где — мощность шума квантования входного сигнала АЦП.

Влияние шумов квантования при канонической форме реализации фильтра. Модель с учетом шума квантования имеет вид:

В схеме входные и выходные отсчеты представлены как B-битовые слова. Выходы сумматоров шумов квантования произведений 1, 2, 3 подаются на первый сумматор (1), а выходы сумматоров шумов квантования произведений 4, 5, 6 — на вход сумматора 2. Источники шума квантования можно объединить и . Предполагается, что источники шума квантования произведений не коррелируются. Тогда мощность шума квантования произведений определяется как сумма отдельных шумовых составляющих

где — импульсная характеристика фильтра, связывающая вход источника шума с выходом фильтра.

Тогда общий шум квантования на выходе фильтра имеет вид

Сравнивая полученные формулы для можно установить, что при канонической реализации общая мощность шума больше, чем при прямой реализации. Использование масштабного множителя для обеих схем увеличивает выходной шум.

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

Определимся с положением звеньев. При каскадной реализации возникают три проблемы:

1) как образовывать пары “множитель числителя — множитель знаменателя”. Например, фильтр четвертого порядка можно факторизовать в два звена второго порядка, а затем упорядочить их одним из четырех различных способов:

Очевидно, что число возможных разбиений на пары для фильтра N-ого порядка равно .

Чтобы избежать появлений большой амплитудной характеристики на частоте, соответствующей полюсу, применяется следующее эмпирическое правило: объединять в пару с , если нули близки к полюсам , и располагать в конце каскада звенья второго порядка с полюсами, наиболее близкими к единичной окружности.

Как рассматривалось выше при каскадной структуре передаточная функция имеет вид:

Избавимся от явного коэффициента g, для этого произведем следующие действия:

где — импульсная характеристика, связывающая источник шума и выход. Шумовые компоненты 2 и 3, проходят через одни звенья фильтра, т.е. через передаточные функции звеньев два и три, поэтому их объединим.

При параллельной реализации передаточная функция раскладывается в ряд элементарных дробей, где коэффициент b2 биквадратного звена при z- 2 равен нулю. В параллельной структуре порядок соединения звеньев не важен. Более того, масштабирование выполняется легче и его можно провести независимо для каждого блока, а отношения сигнал-шум сравнимы с наилучшими значениями для каскадной реализации. В тоже время нули параллельных структур более чувствительны к ошибкам квантования коэффициентов, особенно когда длина коэффициентов уменьшается до 5 бит или меньше. Для длин коэффициентов от 12 бит отличие параллельной и каскадной структур для большинства фильтров менее значительно. По этим причинам каскадный метод в настоящее время более популярен.

Для разбиения передаточной функции на сумму простых дробей воспользуемся стандартной функцией MatLab

где p и r — векторы-столбцы полюсов и соответствующие им вычеты;

к — коэффициент целой части.

bz, az — коэффициенты полиномов числителя и знаменателя функции передачи.

Функция residuez выполняет разложение в виде

Для получения биквадратных звеньев обледеним дроби попарно, получим:

Подставив численные значения получаем:

где — импульсная характеристика i-ого источника шума.

Вывод: ЦФ реализуем каскадной структурой, а билинейное звено в прямой схеме.

Анализ ошибок квантования

Влияние конечного числа битов проявляется в снижении производительности фильтра и в случаях, когда полюса располагаются рядом с границей устойчивости фильтр может стать неустойчивым. Оценим влияние квантования коэффициентов на положение полюсов и устойчивость. Представим числа в виде: 1 бит на знак, 1 бит на целую часть и 14 бит на дробную часть.

Ссылка на основную публикацию
Функция overdrive в мониторе
Технология компенсации времени отклика LCD-матрицы, известная как Overdrive (у каждого производителя она имеет свое фирменное название) обеспечивает существенное ускорение переключения...
Формула рандома в паскале
Здравствуйте, уважаемые читатели нашего сайта. Сегодня мы рассмотрим две полезные процедуры в паскале - Random и Randomize.И опять я начну...
Формула расчета мощности конденсатора
Реактивная мощность обусловлена способностью реактивных элементов накапливать и отдавать электрическую или магнитную энергию. Eмкостная нагрузка в цепи переменного тока за...
Функция еош в excel
Всем добрый день! Эта статья посвящается вопросу, как можно избавится от ошибки в результате вычисления, так как это делает функция...
Adblock detector