Студопедия

КАТЕГОРИИ:


Архитектура-(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

 

 

лекции (семинара) по травматологии и ортопедии

 

<== предыдущая лекция | следующая лекция ==>
Письменные презентации | Расчет для сети до 1000 В
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 379; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.035 сек.