ЭУМК по дисциплине "Программирование проблемно-ориентированных вычислительных средств реального времени" › Теория › Тема 2. Программирование цифровых нерекурсивных и рекурсивных фильтров

# Электронный учебно-методический
комплекс по дисциплине
"Программирование проблемно-ориентированных вычислительных средств реального времени"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

Тема 2. Программирование цифровых нерекурсивных и рекурсивных фильтров
2.1. Программирование цифровых нерекурсивных фильтров
2.1.1. Уравнения и структура цифровых фильтров

Как известно, уравнение цифрового фильтра (ЦФ) во временной области описывается выражением (прямая форма 1):

|  | (2.1)

Если все коэффициенты bk равны нулю, мы получаем уравнение цифрового нерекурсивного фильтра (ЦНФ), или фильтра с конечной импульсной характеристикой (КИХ или FIR – Finite Impulse Response):

|  | (2.2)

где коэффициенты ak из предыдущей формулы обозначены как h(k) (коэффициенты импульсной характеристики фильтра).
Такой фильтр N-го порядка может быть представлен следующей схемой (рис. 2.1):

###

### Рисунок 2.1 – Граф-схема цифрового нерекурсивного фильтра

Передаточная характеристика этого фильтра описывается уравнением

|  | (2.3)

2.1.2. Распределение памяти для цифрового нерекурсивного фильтра

При реализации ЦНФ на ЦПС важным является оптимальное распределение в памяти процессора констант и данных.
Расположение данных, представленное на рис. 2.2, позволяет воспользоваться командой DELAY (копирование в следующую по адресу ячейку), встроенной в команды LTD и MACD, для организации линии задержки. При этом вычисления следует начинать с XNMN1. Если порядок фильтра мал (не выше 5-го) можно использовать линейную программу и команды LTD или LD и MPY или MAC с аргументом типа #lk.

###

### Рисунок 2.2 – Порядок данных в памяти для цифрового нерекурсивного фильтра

При числе коэффициентов >5 используют циклическую программу и соответствующие команды перехода, при этом порядок расположения коэффициентов в памяти данных значения не имеет.
Если коэффициенты расположены в памяти программ, то можно использовать команду MACD, но при этом по самому младшему адресу в памяти программ (с него начинается вычисление) должен располагаться коэффициент h(N-1), обозначенный как HNM1, а по старшему – h(0), обозначенный как H0.
Перед началом выполнения программы рекомендуется обнулить все ячейки предыстории (x(n-1), x(n-2), …, x(n-N+1)).
На рисунке 2.3 приведено расположение данных и коэффициентом в памяти перед вычислением значения на выходе фильтра для момента времени n0 и n0+1.

###

### Рисунок 2.3 – Расположение коэффициентов и данных в памяти

2.1.3. Примеры пограммной реализации цифрового нерекурсивного фильтра

Ниже приведены несколько примеров программ для разных способов вычисления.

    ; Линейная программа фильтра 5-го порядка
    	.text		; секция программы
    START:	LD	#XN, DP	; сделать текущей страницу с x(n)
    	SSBX	FRCT	; режим умножения дробных чисел
    	SSBX	OVM	; режим коррекции переполнения
    	LD	#0, A	; обнуление предыстории (А:=0)
    	STL	A, XNM1	; XNM1:=0
    	STL	A, XNM2	; XNM2:=0
    	STL	A, XNM3	; XNM3:=0
    	STL	A, XNM4	; XNM4:=0
    ; программа ЦНФ
    NXIPT:	PORTR	PA2, XN	; ввод из порта x(n)
    	LD	XNM4, T	; Т:=x(n-4)
    	MPY	#H4, A	; A:=T*h(4)=x(n-4)*h(4)
    	LTD	XNM3	; T:=x(n-3), x(n-3)->x(n-4)
    	MAC	#H3, A	; A:=A+T*h(3)=A+x(n-3)*h(3)
    	.  .  .
    	LTD	XN	; T:=x(n), x(n)->x(n-1)
    	MAC	#H0, A	; A:=A+T*h(0)=A+x(n)*h(0)=y(n)
    	STH	A, YN	; y(n) (можно использовать XN)
    	BD	NXIPT	; задержанный переход на NeXtInPuT
    	PORTW	YN, PA2	;2w вывод в порт y(n)
    	.data		; секция данных
    XN	.WORD	0	; предыстория фильтра
    	.  .  .
    XNM3	.WORD	0
    XNM4	.WORD	0
    YN	.WORD	0	; выход фильтра

    ; Программа фильтра с использованием цикла
    	.text		; секция программы
    START:	SSBX	FRCT	; режим умножения дробных чисел
    	SSBX	OVM	; режим коррекции переполнения
    	STM	#XNMN1, AR2	; AR2:= адрес x(n-N+1)
    	LD	#0, A	; А:=0
    	RPT	#N-2	; повторить N-1 раз
    	STL	A, *AR2-	; обнуление предыстории x(n-k):=0
    ; программа ЦНФ	; кроме x(n)
    NXIPT:	PORTR	PA2, *AR2	; ввод из порта x(n)
    	STM	#XNMN1, AR2	; AR2:= адрес x(n-N+1)
    	STM	#HNM1, AR3	; AR3:= адрес h(N-1)
    	STM	#N-1, BRC	; число повторений блока = N
    	RPTBD	LOOP-1	; повторить блок до метки LOOP
    	LD	#0, A	;1w A:=0
    	NOP		;1w
    	LTD	*AR2-	; T:=x(n-k), x(n-k)->x(n-k-1)
    	MAC	*AR3-, A	; A:=A+T*h(k)=A+x(n-k)*h(k)
    LOOP:	STH	A, *AR2	; y(n) (ячейка перед XN)
    	BD	NXIPT	; задержанный переход на NeXtInPuT
    	PORTW	*AR2+, PA2	;2w вывод y(n), AR2:= адрес x(n)
    	.data		; секция данных
    YN	.WORD	0	; выход фильтра (перед XN)
    XN	.WORD	0	; предыстория фильтра
    	.  .  .
    XNMN2	.WORD	0
    XNMN1	.WORD	0
    	.WORD	0	; свободная ячейка после x(n-N+1)
    H0	.WORD	0	; коэффициенты фильтра
    H1	.WORD	0
    	.  .  .
    HNM2	.WORD	0
    HNM1	.WORD	0
    ; ПРИМЕЧАНИЕ:	коэффициенты h(k) в памяти данных и могут
    ;		располагаться и в обратном порядке, при этом
    ;		необходимо изменить команду  MAC *AR3+, A

    ; Программа фильтра с использованием команды MACD
    	.text		; секция программы
    START:	SSBX	FRCT	; режим умножения дробных чисел
    	SSBX	OVM	; режим коррекции переполнения
    	STM	#XNMN1, AR2	; AR2:= адрес x(n-N+1)
    	LD	#0, A	; А:=0
    	RPT	#N-2	; повторить N-1 раз
    	STL	A, *AR2-	; обнуление предыстории x(n-k):=0
    ; программа ЦНФ	; кроме x(n)
    NXIPT:	PORTR	PA2, *AR2	; ввод из порта x(n)
    	STM	#XNMN1, AR2	; AR2:= адрес x(n-N+1)
    	RPTZ	A, #N-1	; A:=0, повторить команду N раз
    	MACD	*AR2-, HNM1	; A:=A+x(n-k)*h(k),x(n-k)->x(n-k-1)
    LOOP:	STH	A, *AR2	; y(n) (ячейка перед XN)
    	BD	NXIPT	; задержанный переход на NeXtInPuT
    	PORTW	*AR2+, PA2	;2w вывод y(n), AR2:= адрес x(n)
    HNM1	.WORD	0	; коэффициенты фильтра
    HNM2	.WORD	0
    	.  .  .
    H1	.WORD	0
    H0	.WORD	0
    	.data		; секция данных
    YN	.WORD	0	; выход фильтра (перед XN)
    XN	.WORD	0	; предыстория фильтра
    	.  .  .
    XNMN2	.WORD	0
    XNMN1	.WORD	0
    	.WORD	0	; свободная ячейка после x(n-N+1)
    ; ПРИМЕЧАНИЕ:	коэффициенты h(k) в памяти программ и могут
    ;		располагаться только в таком порядке !!!

2.1.4. Использование циклической адресации для реализации линии задержки в фильтре

Наличие в процессоре циклической адресации позволяет написать программу без использования команды задержки DELAY за счет организации записи нового значения x(n) на место самого старого значения x(n-(N-1)). На рисунке 2.4 показано расположение данных в циклическом буфере. Внутреннее кольцо показывает расположение данных предыстории на момент времени n0, а внешнее, замещающие их данные на моменты времени n0+1, n0+2, n0+3 и т.д.

###

### Рисунок 2.4 – Организация циклического буфера

Пример программы с использованием циклической адресации приведен ниже.

    ; Программа фильтра с использованием циклической адресации
    	.text		; секция программы
    START:	SSBX	FRCT	; режим умножения дробных чисел
    	SSBX	OVM	; режим коррекции переполнения
    	STM	#XNMN1, AR2	; AR2:= адрес x(n-N+1)
    	STM	#1, AR0	; AR0:= шаг в кольцевом буфере
    	STM	#N, BK	; размер кольцевого буфера
    	LD	#0, A	; А:=0
    	RPT	#N-2	; повторить N-1 раз
    	STL	A, *AR2+0%	; обнуление предыстории x(n-k):=0
    	STM	#HNM1, AR3	; AR3:= адрес h(N-1)
    ; программа ЦНФ	; кроме x(n)
    NXIPT:	PORTR	PA2,*AR2+0%	; ввод из порта x(n)
    	RPTZ	A, #N-1	; A:=0, повторить команду N раз
    	MAC	*AR2+0%,*AR3+0%, A	; A:=A+x(n-k)*h(k)
    					; x(n-k)->x(n-k-1)
    LOOP:	STH	A, *AR2	; y(n) (ячейка x(n-N+1)
    	BD	NXIPT	; задержанный переход на NeXtInPuT
    	PORTW	*AR2, PA2	;2w вывод y(n)
    	.data		; секция данных
    	.ALIGN	128	; выравнивание для N < 128
    XNMN1	.WORD	0	; предыстория фильтра
    XNMN2	.WORD	0
    	.  .  .
    XNM1	.WORD	0
    XN	.WORD	0
    	.ALIGN	128	; выравнивание для N < 128
    HNM1	.WORD	0	; коэффициенты фильтра
    HNM2	.WORD	0
    	.  .  .
    H1	.WORD	0
    H0	.WORD	0
    ; ПРИМЕЧАНИЕ:	коэффициенты h(k) в памяти данных и должны
    ;		располагаться в том же порядке, что x(n-k);
    ;		порядок h(k) и x(n-k) может быть обратным, при
    ;		этом необходимо изменить команду  STM #-1, AR0

2.1.5. Условие физической реализуемости цифрового нерекурсивного фильтра

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

Откуда условием физической реализуемости ЦНР является:

|  | (2.4)

т.к. если предположить, что на входе фильтра сигнал имеет вид x(n-k)=±1, и знаки противоположны знакам h(k), то

и следовательно, для выполнения условия y(n)<1 (отсутствие переполнения), должно выполняться условие (2.4).

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах
© БГУИР , 2012