КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Методическая разработка. Программирование простейших фильтров нижних частот
Г Лекция № 20
Программирование простейших фильтров нижних частот 1. Рекурсивные фильтры. Алгоритм экспоненциального сглаживания. Простейший фильтр нижних частот это RC-цепочка. Если на входе действует дельта-функция , то выход — импульсная характеристика фильтра — имеет вид: .
Цифровой аналог RC цепи — алгоритм экспоненциального сглаживания. 0< a <1 — коэффициент.
Пусть очередной входной отсчет — положительное число с форматом 1 байт, помещается другой частью программы в ячейку с именем x. Коэффициент фильтра находится в ячейке памяти с именем alpha. Очередной выходной отсчет должен быть помещен в ячейку памяти с именем y. Взаимодействие с АЦП и ЦАП рассматривать не будем. Заметим только, что срочная задача с именем Main вызывается по прерыванию от АЦП. x: DS 1;место для очередного отсчета входного сигнала alpha: DS 1;место для коэффициента y: DS 1;место для очередного отсчета выходного сигнала Обозначим , тогда выражение для экспоненциального сглаживания примет вид: . Разность может быть как положительной, так и отрицательной. Разность отрицательная: 1. Найти модуль разности. 2. Умножить модуль на значение в ячейке alpha. В результате умножения получится 2-х байтовое число. Отбрасывание младшего байта произведения означает деление на 256: Если учесть, что , то число в ячейке alpha следует выбирать в диапазоне: , например 100, что соответствует . Т.е. проводится неявное масштабирование. 3. Вычесть старший байт произведение из значения . В случае положительной разности нет необходимости находить модуль и значение произведения следует прибавлять к . Дополнение к блоку инициализации: mov alpha, #100;задать коэффициент mov y, #0;начальные условия нулевые Дополнение к срочной задаче Main: mov A, x;взять вх. отсчет clr С;подготовить вычитание subb A, y;вычесть mov F0, c;запомнить знак D jnc Dp;переход по дельта плюс cpl A;обратный код разности inc A;модуль разности Dp: mov B, alpha;загружаем альфа mul AB;мл. байт произведения в А, ст. — в В jnb Aсс.7, Nс;перейти если в аккумуляторе ;маленькое число inc B;округляем произведение в В Nс: mov A, y;взять предыдущий выходной отсчет jnb F0, Pos;перейти, если нужно прибавлять clr С;подготовка вычитания subb A, B;вычесть приращение sjmp Store;перейти на запоминание Pos: add A, B;прибавить D, умноженное на a Store: mov y, A;запомнить текущий выходной отсчет
2. Нерекурсивный фильтр Медленно меняющийся сигнал
— наблюдаемый сигнал, — полезный сигнал, — шум. h – интервал дискретизации. - текущее среднее значение, . Очевидно, что пока в фильтре будет наблюдаться переходной процесс. Если распределение шума нормальное, то текущее среднее значение является наилучшей оценкой для сигнала . Пусть окно для усреднения содержит N=8 отсчетов, i=0,1,…,7. Для вычисления текущего отсчета потребуется текущий входной отсчет и 7 предыдущих входных отсчетов . Пусть x(k) имеет формат 12-ть бит и помещается в регистры R1и R0. Для хранения 8-ми входных отсчетов по два байта в каждом организуем кольцевой буфер размером 16-ть байтов. Пометим начало буфера меткой Buf. Вновь пришедший отсчёт всегда будем записывать на место самого старого. Для этого выделим указатель смещения в буфере — байт памяти с именем Pbuf. Значение этого указателя будет меняться от 0 до 7. Учитывая, что до полного заполнения буфера в фильтре идет переходной процесс, начальное значение указателя Pbuf никакого значения не имеет. Нужно только обнулить незначащие биты с номерами от 3 до 7. Резервируем место для кольцевого буфера и указателя смещения в буфере: Buf: DS 16;16 байтов кольцевого буфера Pbuf: DS 1;1 байт указателя Адрес входного отсчета в кольцевом буфере формируется как сумма начального адреса буфера Buf и содержимого указателя Pbuf, умноженного на 2 (учет 2-х байтового формата входного отсчета). Вызов срочной задачи Main по прежнему осуществляется по прерыванию от АЦП. Результат фильтрации помещаем в пару регистров А — младший байт, В — старший байт. Дополнение к задаче Main: ……………………………………….. Start: inc Pbuf;приращение указателя anl Pbuf, #07h;ограничивает приращение, ;организация кольцевого буфера mov A, Pbuf;для формирования адреса rl A;сдвиг влево на 1 разряд, ;учёт 2х байтового формата add A, #Buf;формирование адреса в буфере xch A, R0;загрузка в R0 адреса буфера, ;в А мл. байт входного отсчета mov @R0, A;поместить мл. байт в буфер inc R0;скорректировать адрес mov A, R1;старший байт в А mov @R0, A;запись старшего байта в буфер
;После обновления буфера можно просуммировать все хранящиеся в нем;отсчёты входного сигнала. clr A;для накопления младших байтов mov B, A;для накопления старших байтов mov R1, #8;для счёта количества циклов mov R0, #Buf;для чтения из буфера Next: add A, @R0;накопление младших байтов xch A, B; inc R0; addc A, @R0;накопление старших байтов xch A, B;в А мл. байт суммы, в В — старший inc R0;скорректировать адрес в буфере djnz R1,Next;декрементировать счетчик ;и если не все вернуться
;Получить среднее значение можно посредством 3х сдвигов вправо clr C;подготовка сдвига xch A, B;начнем сдвиг со старшего байта rrc A;поделим на 2 xch A, B;теперь младший
add A, #4;округление перед делением jnc Car inc B Car: anl A, #11111000b;очистка лишних разрядов clr C rrc A;сумму поделили на 2 xch A, B; rrc A; xch A, B; rrc A;еще раз на 2 (уже на 4) xch A, B; rrc A; xch A, B; rrc A;сумму поделили на 8
лекции (семинара) по травматологии и ортопедии
Дата добавления: 2014-01-20; Просмотров: 399; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |