- •СОДЕРЖАНИЕ
- •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. Матричный алгоритм управления
|
dst |
a, CHI |
;1w |
|
nop |
AROUND, anov |
;1w |
|
bcd |
;1w |
|
|
sftl |
a, -1, b |
|
|
ld |
CEXP, a |
;1w A = CEXP |
; переполнение при сложении |
; |
||
OVFLOW |
dst |
b, CHI |
|
|
bd |
AROUND |
;2w |
NORMAL |
add |
#1, a |
|
dld |
CHI, b |
|
|
|
exp |
b |
; |
|
stl |
a, CSIGN |
|
|
ldm |
T, a |
|
|
neg |
a |
|
|
norm |
b |
|
|
bd |
AROUND |
;1w |
|
dst |
b, CHI |
|
AROUND |
add |
CEXP, a |
;1w |
stl |
a, CEXP |
; новый порядок |
|
; |
rpt |
#3 |
|
;portw *ar2+, PA0
|
ret |
|
80h |
; Выровнять на страницу |
ASIGN |
.align |
|||
.word |
0 |
; 1-й операнд |
||
AEXP |
.word |
0 |
; двойное слово |
|
AHI |
.word |
5555h |
||
ALO |
.word |
2222h |
; с четного адреса |
|
BSIGN |
.word |
-1 |
; 2-й операнд |
|
СLO |
. |
. |
. |
; с четного адреса |
.word |
0 |
|||
TEMP |
.word |
0 |
; Конец программы |
|
|
.end |
|
||
|
|
4.3. |
Операция умножения с плавающей запятой |
|
Основу алгоритма операции умножения составляет по парное перемножение старших и младших частей мантисс сомножителей с последующим их суммированием с соответствующим сдвигом и суммированием порядков.
Тогда алгоритм умножения чисел f1 = m1 · be1 и f2 = m2 · be2 может быть за-
писан следующим образом:
f1 · f2 = m1 · m2 · b(e1+e2)
Процесс перемножения мантисс можно проиллюстрировать следующим образом (рис.4.2):
Лекции по ППО ВС РВ © Клюс В.Б. |
87 |
x |
AHI |
|
AL |
|
|
O |
|
|
|
|
|
|
|
|
|
|
BHI |
|
BL |
|
|
|
O |
|
|
|
|
ALO x BLO
+
+
AHI x BLO
+
BHI x ALO
AHI x BHI
CHI CL
O
Рисунок4.2. Алгоритм умножения мантисс чисел с плавающей запятой
При этом, учитывая что первое произведение выходит за пределы 32-х старших разрядов и практически не влияет на результат, его можно не вычислять.
Схема алгоритма умножения двух чисел с плавающей запятой А и В с формированием результата в С приведена на рис.4.3.
Учитывая что значения сомножителей равны и B = BHI + BLO·2-15, результат умножения формируется следующим образом A·B = AHI·BHI + (AHI·BLO+ALO·BHI)·2-15 + ALO·BLO·2-30.
Пример программы с прямой адресацией вычисления произведения двух чисел с ПЗ приведен ниже.
Лекции по ППО ВС РВ © Клюс В.Б. |
88 |
mА |
mВ |
умножение мантисс mС = mА · mВ
еА еВ
сложение порядков еС = еА + еВ
проверка на специальные случаи mС
=0 нормализовано ненормализовано
еС = 0 |
сдвиг mС влево на 1 бит |
||||
|
|
|
еС = еС – 1 |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
округление или усечение результата |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
проверка mС на переполнение (при округление) |
|||
|
|
|
|
|
|
|
|
нет |
да |
||
|
|
|
|
|
|
|
|
|
сдвиг mС вправо на 1 бит |
|
|
|
|
|
еС = еС +1 |
|
|
проверка на специальные случаи еС
переполнение или |
в заданных |
исчезновение порядка |
пределах |
установка специального значения результата
С=А·В
Рисунок4.3. Схема алгоритма умножения двух чисел с плавающей запятой
;ППО ВС РВ Умножение с ПЗ
;(c) Клюс В.Б. 22/11/04 21:00
.mmregs |
; |
Определение регистров |
|
|
.def |
_c_int00 |
; |
Метка начала программы |
|
_c_int00: |
#ASIGN, DP |
; |
Текущая страница |
|
ld |
|
|||
stm |
#ASIGN, SP |
; |
Указатель стека |
|
st |
#1, ONE |
; |
Умножение дробных чисел |
|
ssbx |
FRCT |
|
||
|
Лекции по ППО ВС РВ © Клюс В.Б. |
89 |
||
|
ssbx |
SXM |
; Расширение знака |
|
rsbx |
OVM |
; Запрет коррек.переполнения |
|
call |
MULFLT |
|
MULFLT |
nop |
#ASIGN, ar2 |
; Адрес 1-го операнда |
stm |
|||
; |
stm |
#AHI, ar3 |
; Адрес AHI |
rpt |
#6 |
|
;portr PA0, *ar2+
; |
portr |
PA0, *ar2 |
; |
ar2 -> BLO |
|
UP |
ld |
AEXP, a |
; |
Суммирование порядков |
|
|
add |
BEXP, a |
; |
|
|
|
stl |
a, CEXP |
; |
T = BLO |
|
|
ld |
*ar2-, |
T |
||
|
mpyu |
*ar3+, |
a |
; |
a = BLO * AHI |
|
macsu |
*ar3-, |
*ar2, a ; |
a + BHI * ALO |
|
|
sftl |
a, -15 |
|
; |
с 0 (-16 без 0) |
|
macsu |
*ar3, *ar2+, a ; |
a + BHI * AHI |
||
|
sftc |
a |
|
|
|
|
bcd |
OK, aeq |
;1w |
||
|
dst |
a, CHI |
|
||
|
mar |
*ar2+ |
|
;1w |
|
|
bcd |
SIGN, tc |
;1w |
||
|
ld |
CEXP, 16, a |
|||
|
or |
ASIGN, |
a |
;1w |
|
SIGN |
sub |
ONE, 16, a |
|
|
|
xor |
BSIGN, |
a |
; |
CEXP | CSIGN |
|
OK |
dst |
a, CEXP |
|||
; |
rpt |
#3 |
|
|
|
;portw *ar2+, PA0 ret
ASIGN |
.align |
80h |
; Выровнять на страницу |
|
.word |
0 |
; 1-й операнд |
||
AEXP |
.word |
0 |
; двойное слово |
|
AHI |
.word |
5555h |
||
ALO |
.word |
2222h |
; с четного адреса |
|
BSIGN |
.word |
-1 |
; 2-й операнд |
|
CLO |
. |
. |
. |
; с четного адреса |
.word |
0 |
|||
ONE |
.word |
0 |
; Конец программы |
|
|
.end |
|
|
|
Лекции по ППО ВС РВ © Клюс В.Б. |
90 |
