Всем привет! На волне интереса к адаптивным системам не будем забывать об инструментах, которыми создаются эти системы, впитавшие в себя немало науки. Давайте разработаем фильтр, коэффициенты которого можно адаптировать и подгружать их по мере работы устройства.
Если оказались тут первый раз, то рекомендуется ознакомиться с тем, как мы пришли к такой жизни:
Что будем строить?
Если просто, то адаптивный фильтр это устройство с изменяемыми коэффициентами, подстраиваемыми с целью уменьшения сигнала ошибки.
Подстройкой коэффициентов фильтра (Adaptive Filter) занимается занимается алгоритм адаптации (Adaptive Algorithm). Алгоритм адаптации работает с сигналом ошибки e(k), являющимся разностью между желаемым сигналом d(k) и полученным в результате фильтрации сигналом y(k) .
Так как алгоритм адаптации может быть совершенно произвольным, да и вычисление сигнала ошибки может быть сделано весьма изощренными способами, то довольно полезной задачей может быть описание адаптивного фильтра на языке Verilog с целью дальнейшего его использования в программируемых логических интегральных схемах (ПЛИС).
Общая схема
Собрать несложный фильтр с возможностью адаптации совсем не сложно. Как минимум, он должен уметь перезаписывать в себя новые рассчитанные коэффициенты и для этого нужно предусмотреть соответствующую часть схемы. Нижняя часть схемы нам уже известна по прошлым видео, это обычный ких фильтр с каскадным соединением сумматоров.
В самом простейшем случае подгрузка новых коэффициентов может быть реализована при помощи сдвигового регистра (изображен зеленым цветом). Тактовый сигнал, по которому новые коэффициенты должны проталкиваться внутрь устройства должен быть совершенно иным, чем для проталкивания входных отсчетов сигнала. Разумеется, чтобы не вносить ошибки в процесс фильтрации необходимо заносить в систему новые коэффициенты очень быстро, прям между тактами основной работы устройства.
Пишем код
В языках описания аппаратуры все начинается с описания параметров, входов и выходов разрабатываемого модуля:
Модуль будет конфигурируемым с параметром SIZE, отвечающим за количество коэффициентов фильтра. В отличии от простого фильтра в этом будет еще вход для коэффициентов h, тактовый сигнал для погрузки коэффициентов в сдвиговый регистр coefclk.
Для работы будут необходимы регистры и провода:
Этак циклическая конструкция описывает проход отсчетов входного сигнала по сдвиговому регистру:
Похожая циклическая конструкция описывает сдвиг коэффициентов фильтра:
Межсоединения умножителей также могут быть описаны циклической конструкцией:
В заключении осталось соединить меж собой все необходимые сумматоры:
На этом описание фильтра окончено, среда разработки Quartus демонстрирует получившуюся схему для SIZE=4:
Как можно заметить, она повторяет задуманную схему. Восемь 16-битных регистров для сдвига чисел, 4 умножителя и 3 сумматора. В скором времени нам пригодится такое устройство, так что не забываем про подписку чтобы не пропустить)
Не обойдите вниманием канал на YouTube, изложение в формате видео вполне может найти своих почитателей.