- •СОДЕРЖАНИЕ
- •1.1. Предмет, цели и задачи курса
- •1.3. Прямой табличный метод
- •1.4. Метод линейной интерполяции
- •2. ПРОГРАММИРОВАНИЕ ЦИФРОВЫХ ФИЛЬТРОВ
- •2.1. Программирование цифровых нерекурсивных фильтров
- •2.2. Программирование цифровых рекурсивных фильтров
- •2.3. Параллельное и последовательное соединение ЦРФ
- •2.4. Точностные характеристики цифровых фильтров
- •2.4.1. Квантование передаточных функций дискретных систем
- •2.4.2. Ошибки квантования в цифровых фильтрах
- •3. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ БПФ
- •3.1. Два основных алгоритма БПФ, реализация базовой операции
- •3.2. Реализация частных случаев вычисления «бабочки»
- •3.3. Алгоритм двоично-инверсной адресации и перестановка данных
- •3.4. Основные алгоритмы БПФ по модулю 2 с замещением
- •3.5. Алгоритм БПФ с поблочно-плавающей запятой
- •4. ВЫПОЛНЕНИЕ ОПЕРАЦИЙ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ
- •4.1. Форматы чисел с плавающей запятой
- •4.2. Операции сложения и вычитания с плавающей запятой
- •4.3. Операция умножения с плавающей запятой
- •4.4. Операция деления с плавающей запятой
- •5. МЕТОДЫ КОМПРЕССИИ ДАННЫХ
- •5.1. Два основных метода сжатия данных
- •5.3. Метод кодирования A-Law
- •5.4. Программы кодирования и декодирования данных
- •6.1. Многомерный формирующий фильтр
- •6.2. Спектральный анализ R-мерного векторного процесса
- •6.4. Матричный алгоритм управления
HNM1 |
.ALIGN |
128 |
; выравнивание для N<128 |
.WORD |
0 |
; коэффициенты фильтра |
|
HNM2 |
.WORD |
0 |
|
H1 |
. . . |
|
|
.WORD |
0 |
|
|
H0 |
.WORD |
0 |
|
; ПРИМЕЧАНИЕ: |
коэффициенты h(k) в памяти данных и должны |
||
;располагаться в том же порядке, что x(n-k);
;порядок h(k) и x(n-k) может быть обратным,
;при этом необходимо изменить команду
; |
STM #-1, AR0 (шаг) |
Поскольку фильтр имеет конечную импульсную характеристику, то справедливы следующие соотношения:
+∞
если ∫h(k) dt < ∞ , то y(t) < ∞
−∞
Откуда условием физической реализуемости ЦНР является:
N−1
∑h(k) <1
k =0
т.к. если предположить, что на входе фильтра сигнал имеет вид x(n-k)=±1, и знаки противоположны знакам h(k), то
N −1 |
N −1 |
|
||
y(n) = ∑h(k) x(n −k) = |
∑ |
|
h(k) |
|
|
|
|||
k =0 |
k =0 |
|
||
и, следовательно, для выполнения условия y(n)<1 (отсутствие переполнения), должно выполняться приведенное выше условие физической реализуемости.
2.2. Программирование цифровых рекурсивных фильтров
Прямая форма записи уравнения цифрового фильтра во временной области выглядит следующим образом (прямая форма 1):
N −1 |
M −1 |
y(n) = ∑ ak x(n −k) − |
∑bk y(n −k) |
k =0 |
k =1 |
Передаточная функция такого цифрового рекурсивного фильтра (ЦРФ) или фильтра с бесконечной импульсной характеристикой (БИХ или IIR – Infinite Impulse Response) в Z–области записывается уравнением:
|
y(z) |
|
|
N∑−1ak z−k |
H (z) = |
= |
|
k =0 |
|
x(z) |
|
M −1 |
||
|
|
|
||
|
|
1 |
+ ∑ bk z−k |
|
|
|
|
|
k =1 |
Лекции по ППО ВС РВ © Клюс В.Б. |
17 |
Имеется и другая форма (называемая канонической) уравнения ЦРФ с использованием промежуточных переменных d:
|
|
|
|
|
|
|
|
|
M −1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
d(n) = x(n) − ∑bk d(n −k) |
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
k =1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
N −1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y(n) = ∑ak d(n −k) |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
k =0 |
|
|
|
|
|
|
|
|
|
Обе эти формы для случая N = M могут быть представлены следующими |
|||||||||||||||||
схемами (рис.28 .4): |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
x(n) |
|
a0 |
|
|
|
y(n) |
x(n) |
|
|
|
d(n) a0 |
y(n) |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Z-1 |
|
a |
|
|
-b |
1 |
Z-1 |
|
|
-b |
1 |
|
Z-1 a |
|
|||
|
|
|
|
|
|
||||||||||||
x(n-1) |
|
1 |
|
|
|
|
y(n-1) |
|
|
|
|
|
1 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
d(n-1) |
|
|
|
||||
Z-1 |
|
|
|
|
|
|
|
Z-1 |
|
|
|
Z-1 a |
|
||||
|
a |
|
|
-b |
2 |
|
|
-b |
2 |
|
|
||||||
|
|
|
|
|
|
||||||||||||
x(n-2) |
|
2 |
|
|
|
|
y(n-2) |
|
|
|
|
|
2 |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
d(n-2) |
|
|
|
||||
|
|
|
|
|
-bN-2 y(n-N+2) |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||
x(n-N+2) |
aN-2 |
|
|
-bN-2 |
|
aN-2 |
|
||||||||||
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
d(n-N+2) |
|
|
|
||||||||
-1 |
|
|
|
|
|
|
|
-1 |
|
|
-1 |
|
|||||
Z |
a |
|
|
-b |
N-1 |
Z |
|
|
-b |
N-1 |
Z a |
|
|||||
|
|
|
|
||||||||||||||
x(n-N+1) |
|
N-1 |
|
y(n-N+1) |
|
|
|
|
N-1 |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
d(n-N+1)
Рисунок2.4. Граф-схемы цифровых рекурсивных фильтров
Прямая форма требует 2N+1 коэффициентов и 2N+1 рабочих ячеек для переменных X, Y (переменные x(n), y(n) могут храниться в одной ячейке памяти). При канонической реализации число переменных в два раза меньше (N+2).
Коэффициенты a и b в обеих формулах одинаковые, в чем можно убедить-
ся на примере фильтра второго порядка. |
|
|
|||
y(n) |
= a0d(n) |
+ a1d(n-1) |
+ a2d(n-2) |
|
|
d(n) |
= x(n) |
– b1d(n-1) |
– b2d(n-2) |
|
|
d(n-1) |
= x(n-1) |
– b1d(n-2) |
– b2d(n-3) |
|
|
d(n-2) |
= x(n-2) |
– b1d(n-3) |
– b2d(n-4) |
|
|
y(n) |
= a0[x(n) |
– b1d(n-1) |
– b2d(n-2)] |
+ |
|
|
+ a1[x(n-1) |
– b1d(n-2) |
– b2d(n-3)] |
+ |
|
|
+ a2[x(n-2) |
– b1d(n-3) |
– b2d(n-4)] |
= |
|
|
= a0x(n) |
+ a1x(n-1) |
+ a2x(n-2) |
– |
|
|
– b1[a 0d(n-1) |
+ a1d(n-2) |
+ a2d(n-3)] |
– |
|
|
– b2[a 0d(n-2) |
+ a 1d(n-3) |
+ a 2d(n-4)] |
= |
|
|
= a0x(n) |
+ a1x(n-1) |
+ a2x(n-2) |
– |
|
|
– b1y(n-1) |
– b2y(n-2) |
|
|
|
|
Лекции по ППО ВС РВ © Клюс В.Б. |
18 |
|||
Обычно при программировании ЦФ используется разбиение фильтра высокого порядка на ряд фильтров более низкого порядка (например, 2-го порядка), поскольку при программировании фильтра высокого порядка трудно избежать переполнения для промежуточных результатов вычисления и большой разницы в величине коэффициентов.
В качестве примера можно рассмотреть программирование ЦРФ второго порядка с прямой и косвенной адресацией (в отличие от ЦНФ обнуление пре-
дыстории обязательно для ЦРФ). |
мл. |
|
|
DN |
|||
Расположение отсчетов предыстории в памяти |
|||
данных аналогично их расположению у нерекур- |
ст. |
DNM1 |
|
сивного фильтра. |
DNM2 |
||
|
|
;Линейная программа ЦРФ (каноническая форма) 2-го порядка
START: |
.text |
#XN, DP |
; секция программы |
|
LD |
; сделать текущей страницу с XN |
|||
|
SSBX |
SXM |
; режим расширения знака |
|
|
SSBX |
FRCT |
; режим умножения дробных чисел |
|
|
RSBX |
OVM |
; нет коррекции переполн. в АЛУ |
|
|
ORM |
#1, PMST |
; коррекция перепол. при записи |
|
|
LD |
#0, A |
; обнуление предыстории (А:=0) |
|
|
STL |
A, DNM1 |
; DNM1:=0 |
|
|
STL |
A, DNM2 |
; DNM2:=0 |
|
; программа ЦРФ (ввод и вывод через параллельный порт) |
|
|||
NXIPT: |
PORTR |
PA2, XN |
; ввод из порта x(n) |
|
|
; вычисление d(n) |
|
|
|
|
LD |
XN, 16, A ; x(n) в старшую часть акк.А |
|
|
|
LD |
DNM1, T |
; Т:=d(n-1) |
|
|
MAS |
B1, A |
; A:=A-T*b1=A-b1*d(n-1) |
|
|
LD |
DNM2, T |
; T:=d(n-2) |
|
|
MASR |
B2, A |
; A:=A-T*b2=A-b2*d(n-2) и окр. |
|
|
STH |
A, DN |
; d(n)=x(n)-b1*d(n-1)-b2*d(n-2) |
|
|
; вычисление y(n) |
; A:=T*a2=a2*d(n-2) [T:=d(n-2)] |
||
|
MPY |
A2, A |
||
|
LTD |
DNM1 |
; T:=d(n-1), d(n-1)Æd(n-2) |
|
|
MAC |
A1, A |
; A:=A+T*a1=A+a1*d(n-1) |
|
|
LTD |
DN |
; T:=d(n), d(n)Æd(n-1) |
|
|
MACR |
A0, A |
; A:=A+T*a0=A+a0*d(n) и округл. |
|
|
STH |
A, XN |
; y(n)Æx(n) |
|
|
BD |
NXIPT |
; задержанный переход на NXIPT |
|
|
PORTW |
XN, PA2 |
;2w вывод в порт y(n) |
|
XN |
.data |
0 |
; секция данных |
|
.WORD |
; вход и выход фильтра |
|
||
DN |
.WORD |
0 |
; предыстория фильтра |
|
DNM1 |
.WORD |
0 |
|
|
DNM2 |
.WORD |
0 |
|
|
|
|
Лекции по ППО ВС РВ © Клюс В.Б. |
19 |
|
A0 |
.WORD |
0 |
; |
коэффициенты фильтра |
A1 |
.WORD |
0 |
|
|
A2 |
.WORD |
0 |
|
|
B1 |
.WORD |
0 |
|
|
B2 |
.WORD |
0 |
|
|
; Программа ЦРФ N-го порядка с использованием MACP и MACD |
||||
START: |
.text |
#0, DP |
; |
секция программы |
LD |
; |
сделать текущей 0-ю страницу |
||
|
SSBX |
SXM |
; |
режим расширения знака |
|
SSBX |
FRCT |
; |
режим умножения дробных чисел |
|
RSBX |
OVM |
; |
нет коррекции переполн. в АЛУ |
|
ORM |
#1, PMST |
; |
коррекция перепол. при записи |
|
STM |
#DNMN1, AR2 ; |
AR2:= адрес d(n-(N-1)) |
|
|
RPTZ |
A, #N-2 |
; |
А:=0 и повторить N-1 раз |
|
STL |
A, *AR2- |
; |
обнуление предыстории d(n-k) |
; программа ЦРФ (ввод и вывод через последовательн. порт)
NXIPT: |
LD |
McDRR, 16, A ; ввод из порта x(n) в AH |
||
|
; вычисление d(n) |
|
AR2:= адрес d(n-(N-1)) |
|
|
STM |
#DNMN1, AR2 ; |
||
|
RPT |
#N-2 |
; |
повторить N-1 раз |
|
MACP |
*AR2-,BNM1,A ; A:=A+(AR2)*(-bk)=A-bk*d(n-k) |
||
|
STH |
A, *AR2 |
; |
d(n) |
|
; вычисление y(n) |
|
AR2:= адрес d(n-(N-1)) |
|
|
STM |
#DNMN1, AR2 ; |
||
|
RPTZ |
A, #N-1 |
; |
А:=0 и повторить N раз |
|
MACD |
*AR2-,ANM1, A ; A:=A+(AR2)*ak=A+ak*d(n-k) |
||
|
BD |
NXIPT |
; |
задержанный переход на NXIPT |
|
STH |
A, McDXR |
;1w вывод в порт y(n) |
|
ANMN1 |
NOP |
0 |
;1w пустая команда |
|
.WORD |
|
|
||
A1 |
. . . |
|
|
|
.WORD |
0 |
; |
коэффициенты фильтра |
|
A0 |
.WORD |
0 |
||
BNMN1 |
.WORD |
0 |
|
|
B1 |
. . . |
|
|
|
.WORD |
0 |
; |
секция данных |
|
DN |
.data |
0 |
||
.WORD |
; |
предыстория фильтра |
||
DNM1 |
.WORD |
0 |
|
|
DNMN1 |
. . . |
|
|
|
.WORD |
0 |
; |
резервная пустая ячейка |
|
XN |
.WORD |
0 |
||
; ПРИМЕЧАНИЕ: коэффициенты ak и bk в памяти программ и
;располагаются только в таком порядке !!!
Лекции по ППО ВС РВ © Клюс В.Б. |
20 |
; Программа ЦРФ с использованием циклической адресации
.text |
#0, DP |
; |
секция программы |
START: LD |
; |
сделать текущей 0-ю страницу |
|
SSBX |
SXM |
; |
режим расширения знака |
SSBX |
FRCT |
; |
режим умножения дробных чисел |
RSBX |
OVM |
; |
нет коррекции переполн. в АЛУ |
ORM |
#1, PMST |
; |
коррекция перепол. при записи |
STM |
#DNMN1, AR2 ; |
AR2:= адрес d(n-(N-1)) |
|
RPTZ |
A, #N-3 |
; |
А:=0 и повторить N-2 раз |
STL |
A, *AR2- |
; |
обнуление предыстории d(n-k) |
STL |
A, *AR2 |
; |
обнуление предыстории d(n-1) |
STM |
#1, AR0 |
; |
AR0:= шаг в кольцевом буфере |
STM |
#N, BK |
; |
размер кольцевого буфера |
; программа ЦРФ (ввод и вывод через последовательн. порт)
NXIPT: |
LD |
McDRR, 16, A ; ввод из порта x(n) в AH |
|
|
; вычисление d(n) |
; AR3:= адрес b1 |
|
|
STM |
#B1, AR3 |
|
|
RPT |
#N-2 |
; повторить N-1 раз |
|
MAS |
*AR2+0%,*AR3+, A ; A:=A-d(n-k)*bk |
|
|
STH |
A, *AR2 |
; d(n) |
|
; вычисление y(n) |
; А:=0 и повторить N раз |
|
|
RPTZ |
A, #N-1 |
|
|
MAC |
*AR2+0%,*AR3+, A ; A:=A+d(n-k)*ak |
|
|
BD |
NXIPT |
; задержанный переход на NXIPT |
|
STH |
A, McDXR |
;1w вывод в порт y(n) |
|
NOP |
|
;1w пустая команда |
|
.data |
32 |
; секция данных |
DN |
.ALIGN |
; выравнивание для N<32 |
|
.WORD |
0 |
; предыстория фильтра |
|
DNM1 |
.WORD |
0 |
|
DNMN1 |
. . . |
|
|
.WORD |
0 |
; коэффициенты фильтра |
|
B1 |
.WORD |
0 |
|
BNMN1 |
. . . |
|
|
.WORD |
0 |
|
|
A0 |
.WORD |
0 |
|
ANMN1 |
. . . |
|
|
.WORD |
0 |
|
|
; ПРИМЕЧАНИЕ: |
коэффициенты ak и bk в памяти данных и |
||
;должны располагаться в указанном порядке,
;при этом порядок ak, bk и d(n-k) может быть
;и обратным, тогда AR0:=-1 и меняется
;адресация на *AR3-
Недостаток канонической формы – возможно переполнение, недостаток прямой – в 2 раза больше памяти.
Лекции по ППО ВС РВ © Клюс В.Б. |
21 |
