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

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

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

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

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

2.3. Параллельное и последовательное соединение цифровых фильтров
2.3.1. Построение сложных цифровых фильтров из простых звеньев

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

###

### Рисунок 2.6 – Передаточная характеристика цифрового фильтра

###

### Рисунок 2.7 – Параллельное соединение фильтров

###

### Рисунок 2.8 – Последовательное соединение фильтров

2.3.2. Параллельное соединение цифровых фильтров 2-го порядка

Передаточная функция ЦРФ при параллельном соединении фильтров 2-го порядка описывается уравнением:

Если N < M, то первая сумма равна нулю, а для N = M она равна C.
Уравнение одного фильтра во временной области в канонической форме записывается как

| dk(n) = x(n) – β1k dk(n-1) – β2k dk(n-2) pk(n) = α0k dk(n) + α1k dk(n-1) |

а выходное значение для всех фильтров (при N = M = 2m+1)

Структуру такого фильтра для m=2 представлена на рисунке 2.9.

###

### Рисунок 2.9 – Параллельное соединение двух ЦРФ 2-го порядка

Промежуточные данные в памяти рекомендуется располагать следующим образом (рис. 2.10):

###

### Рисунок 2.10 – Расположение промежуточных данных в памяти

2.3.3. Последовательное соединение цифровых фильтров 2-го порядка

Передаточная функция ЦРФ при последовательном соединении описывается уравнением

|  | (2.8)

Уравнение одного фильтра во временной области в канонической форме записывается как

| dk(n) = yk-1(n) – β1k dk(n-1) – β2k dk(n-2) , yk(n) = α0k dk(n) + α1k dk(n-1) + α2k dk(n-2) , | (2.9)

где k изменяется от 1 до (М-1)/2. Входное значение y0(n) = x(n), выходное значение y(M-1)/2(n) = y(n), а структура такого фильтра для двух каскадов представлена в следующем виде (рис. 2.11).

###

### Рисунок 2.11 – Последовательное соединение двух ЦРФ 2-го порядка (каноническая форма)

Промежуточные данные dk(n-i) в памяти располагаются аналогично предыдущему случаю.
Для прямой формы реализации структура этого же фильтра выглядит следующим образом (рис. 2.12):

###

### Рисунок 2.12 – Последовательное соединение двух ЦРФ 2-го порядка (прямая форма)

Учитывая, что данные предыстории между каскадами совпадают
(y1(n-k)=x1(n-k)), структура фильтра может быть преобразована к следующему виду (рис. 2.13).

###

### Рисунок 2.13 – Последовательное соединение двух ЦРФ 2-го порядка (модифицированная прямая форма)

При такой реализации сразу исчезает недостаток прямой формы, связанный с двойным количеством ячеек предыстории. В данной реализации общее число ячеек предыстории при прямой форме только на 3 больше, чем при канонической. При программной реализации такого фильтра необходимо учитывать то, что сдвигать по памяти нужно только отсчеты предыстории входных значений, поскольку выходные значения будут сдвинуты при работе следующего каскада (в котором они становятся входными) и только после последнего каскада необходимо сдвинуть два значения y(n-1) и y(n).

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

Ниже приведены примеры программ для параллельного и последовательного соединения ЦРФ.

    ; Линейная программа ЦРФ (каноническая форма) 4-го порядка
    ; с параллельным соединением 2-х каскадов
    	.data
    D2N	.WORD	0
    D2NM1	.WORD	0
    D2NM2	.WORD	0
    D1N	.WORD	0
    D1NM1	.WORD	0
    D1NM2	.WORD	0
    A01	.WORD	0
    A11	.WORD	0
    B11	.WORD	0
    B21	.WORD	0
    A02	.WORD	0
    A12	.WORD	0
    B12	.WORD	0
    B22	.WORD	0
    C	.WORD	0
    XN	.WORD	0
    	.text
    START	LD	#XN, DP	; текущая страница с XN
    	SSBX	FRCT	; режим умножения дробных чисел
    	RSBX	OVM	; нет коррекции переполнения в АЛУ
    	ORM	#1, PMST	; коррекция переполнения при записи
    	STM	#D2NM1, AR2	; AR2:= адрес d(n-(N-1))
    	RPTZ	A, #4	; А:=0 и повторить 5 раз
    	STL	A, *AR2+	; обнуление предыстории di(n-k):=0
    	RPT	#9-1	; повторить 9 раз, AR2:= адрес a01
    	MVPD	CA01, *AR2+	; пересылка коэффициентов
    WAIT	BC	WAIT, BIO	; ожидание готовности
    	PORTR	PA2, XN	; ввод из порта x(n)
    	; вычисление d1(n)
    	LD	XN, 16, A	; x(n) в старшую часть акк.А
    	LD	D1NM2, T	; Т:=d1(n-2)
    	MAS	B21, A	; A:=A-T*b21=A-b21*d1(n-2)
    	LTD	D1NM1	; T:=d1(n-1), d1(n-1)->d1(n-2)
    	MASR	B11, A	; A:=A-T*b11=A-b11*d1(n-1) и округ.
    	STH	A, D1N	; d1(n)
    	; вычисление p1(n)
    	MPY	A11, B	; B:=T*a11=a11*d1(n-1)
    	LTD	D1N	; T:=d1(n), d1(n)->d1(n-1)
    	MAC	A01, B	; B:=B+T*a01=B+a01*d1(n)=p1(n)
    	; вычисление d2(n)
    	LD	XN, 16, A	; x(n) в старшую часть акк.А
    	LD	D2NM2, T	; Т:=d2(n-2)
    	MAS	B22, A	; A:=A-T*b22=A-b22*d2(n-2)
    	LTD	D2NM1	; T:=d2(n-1), d2(n-1)->d2(n-2)
    	MASR	B12, A	; A:=A-T*b12=A-b12*d2(n-1) и округ.
    	STH	A, D2N	; d2(n)
    	; вычисление p2(n)
    	MAC	A12, B	; B:=B+T*a12=B+a12*d2(n-1)
    	LTD	D2N	; T:=d2(n), d2(n)->d2(n-1)
    	MAC	A02, B	; B:=B+T*a02=B+a02*d2(n)=p2(n)

    ; вычисление y(n)
    	LD	XN, T	; T:=x(n)
    	MACR	C, B	; B:=B+T*C=B+C*x(n)=y(n) и округ.
    	STH	B, XN	; y(n)->x(n)
    	BD	WAIT	; задержанный переход на WAIT
    	PORTW	XN, PA2	;2w вывод в порт y(n)
    ; коэффициенты в памяти программ
    CA01	.WORD	0C750h	;-0.4428446
    CA11	.WORD	05F2Ch	; 0.7435591
    CB11	.WORD	0394Dh	; 0.447687
    CB21	.WORD	0D889h	;-0.308310
    CA02	.WORD	0F721h	;-0.0693031
    CA12	.WORD	0EFAEh	;-0.1274959
    CB12	.WORD	0FEF7h	;-0.008080
    CB22	.WORD	090EEh	;-0.867723
    CC	.WORD	05988h	; 0.699476

    ; Линейная программа ЦРФ (каноническая форма) 4-го порядка
    ; с последовательным соединением 2-х каскадов
    	.data
    D2N	.WORD	0
    	.  .  .
    D1NM2	.WORD	0
    A01	.WORD	0
    A11	.WORD	0
    A21	.WORD	0
    B11	.WORD	0
    B21	.WORD	0
    A02	.WORD	0
    	.  .  .
    B22	.WORD	0
    XN	.WORD	0
    	.text
    START	LD	#XN, DP	; текущая страница с XN
    	SSBX	FRCT	; режим умножения дробных чисел
    	RSBX	OVM	; нет коррекции переполнения в АЛУ
    	ORM	#1, PMST	; коррекция переполнения при записи
    	STM	#D2NM1, AR2	; AR2:= адрес d(n-(N-1))
    	RPTZ	A, #4	; А:=0 и повторить 5 раз
    	STL	A, *AR2+	; обнуление предыстории di(n-k):=0
    	RPT	#10-1	; повторить 10 раз, AR2:=адрес a01
    	MVPD	CA01, *AR2+	; пересылка коэффициентов
    WAIT	BC	WAIT, BIO	; ожидание готовности
    	PORTR	PA2, XN	; ввод из порта x(n)
    	; вычисление d1(n)
    	LD	XN, 16, A	; x(n) в старшую часть акк.А
    	LD	D1NM1, T	; Т:=d1(n-1)
    	MAS	B11, A	; A:=A-T*b11=A-b11*d1(n-1)
    	LD	D1NM2, T	; T:=d1(n-2)
    	MASR	B21, A	; A:=A-T*b21=A-b21*d1(n-2)=d1(n)
    	STH	A, D1N	; d1(n)
    	; вычисление y1(n)
    	MPY	A21, A	; A:=T*a21=a21*d1(n-2)
    	LTD	D1NM1	; T:=d1(n-1), d1(n-1)->d1(n-2)
    	MAC	A11, A	; A:=A+T*a11=A+a11*d1(n-1)
    	LTD	D1N	; T:=d1(n), d1(n)->d1(n-1)
    	MAC	A01, A	; A:=A+T*a01=A+a01*d1(n)=y1(n)
    	; вычисление d2(n)
    	LD	D2NM1, T	; Т:=d2(n-1)
    	MAS	B12, A	; A:=A-T*b12=A-b12*d2(n-1)
    	LD	D2NM2, T	; T:=d1(n-2)
    	MASR	B22, A	; A:=A-T*b22=A-b22*d2(n-2)=d2(n)
    	STH	A, D2N	; d2(n)
    	; вычисление y(n)
    	MPY	A22, A	; A:=T*a22=a22*d2(n-2)
    	LTD	D2NM1	; T:=d2(n-1), d2(n-1)->d2(n-2)
    	MAC	A12, A	; A:=A+T*a12=A+a12*d2(n-1)
    	LTD	D2N	; T:=d2(n), d2(n)->d2(n-1)
    	MAC	A02, A	; A:=A+T*a02=A+a02*d2(n)=y(n)
    	STH	B, XN	; y(n)->x(n)
    	BD	WAIT	; задержанный переход на WAIT
    	PORTW	XN, PA2	;2w вывод в порт y(n)
    ; коэффициенты в памяти программ
    CA01	.WORD	01F05h	; 0.242342
    CA11	.WORD	02B75h	; 0.339521
    CA21	.WORD	01EFDh	; 0.242117
    CB11	.WORD	0394Dh	; 0.447687
    CB21	.WORD	0D889h	;-0.308310
    CA02	.WORD	062F1h	; 0.772990
    CA12	.WORD	026DBh	; 0.303581
    CA22	.WORD	062EDh	; 0.772887
    CB12	.WORD	0FEF7h	;-0.008080
    CB22	.WORD	090EEh	;-0.867723

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