// мнимой части X(q) (ImB) в вершину стека сопроцессора
asm FST ST(2) // создать копию ImB в регистре ST(2) сопроцессора
asm les bx, dword ptr [bp+6] // загрузить адрес массива действительной
// части исходных данных в регистр bx
asm mov cx, bx
asm add bx, dx //определить адрес элемента массива действительной
// части X(q)
asm FLD dword ptr es:[bx] // загрузить значение элемента массива
// действительной части X(q) (ReB) в вершину стека сопроцессора
asm FST ST(2) // Создать копию ReB в регистре ST(2) сопроцессора
asm FLD dword ptr TSIN // загрузить TSIN в вершину стека сопроцессора
asm FLD dword ptr TCOS // загрузить TCOS в вершину стека сопроцессора
asm FMUL ST(5),ST(0) // ImB*TCOS, результат в ST(5)
asm FMULP ST(4),ST(0) // ReB*TCOS, результат в ST(4)
asm FMUL ST(2),ST(0) // ImB*TSIN
asm FMULP ST(1),ST(0) // ReB*TSIN
asm FADDP ST(3),ST(0) // ImB*TCOS+ReB*TSIN (ii2), результат в ST(3)
asm FSUBP ST(1),ST(0) // ReB*TCOS-ImB*TSIN (ii1) , результат в ST(1)
asm mov bx, cx
asm add bx, ax //определить адрес элемента массива действительной
// части X(p)
asm FLD dword ptr es:[bx] // загрузить значение элемента массива
// действительной части X(p) (ReA) в вершину стека сопроцессора
asm FLD ST(0) // Создать копии ReA в регистрах ST(0) и ST(1)
asm FSUB ST(0),ST(2) // ReA-ii1
asm mov bx, cx
asm add bx, dx //определить адрес элемента массива действительной
// части X(q)
asm FSTP dword ptr es:[bx] // выгрузить из вершины стека сопроцессора
//вычисленное значение в элемент массива действительной части X(q)
asm FADDP ST(1),ST(0) // ReA+ii1
asm mov bx, cx
asm add bx, ax //определить адрес элемента массива действительной
// части X(p)
asm FSTP dword ptr es:[bx] // выгрузить из вершины стека сопроцессора
//вычисленное значение в элемент массива действительной части X(p)
asm mov bx, si
asm add bx, ax //определить адрес элемента массива мнимой
// части X(p)
asm FLD dword ptr es:[bx] // загрузить значение элемента массива
// мнимой части X(p) (ImA) в вершину стека сопроцессора
asm FLD ST(0) // создать копии ImA в регистрах ST(0) и ST(1)
asm FSUB ST(0),ST(2) // ImA-ii2
asm mov bx, si
asm add bx, dx //определить адрес элемента массива мнимой
// части X(q)
asm FSTP dword ptr es:[bx] // выгрузить из вершины стека сопроцессора
//вычисленное значение в элемент массива мнимой части X(q)
asm FADDP ST(1),ST(0) // ImA+ii2
asm mov bx, si
asm add bx, ax //определить адрес элемента массива мнимой
// части X(p)
asm FSTP dword ptr es:[bx] // выгрузить из вершины стека сопроцессора
//вычисленное значение в элемент массива мнимой части X(p)
asm pop si
При таком подходе для вычисления одной операции "бабочка" требуется выполнить 6 пересылок типа П®R, 4 пересылки типа R®П и 2 пересылки типа П®П, для вычисления "бабочек" третьей и четвертой модификаций 5 пересылок типа П®R и 4 пересылки типа R®П, для операции разведения спектров 5 пересылок типа П®R и 4 пересылки R®П.
А в целом при такой организации вычислений для всего обычного алгоритма БПФ требуется выполнить
пересылок типа П®R,
пересылок типа R®П,
пересылок типа П®П,
для реализации модифицированного алгоритма БПФ -
пересылок типа П®R,
пересылок типа R®П,
пересылок типа П®П.
для реализации обычного алгоритма БПФ для действительных последовательностей-
пересылок типа П®R,
пересылок типа R®П,
пересылок типа П®П.
для реализации модифицированного алгоритма БПФ для действительных последовательностей -
пересылок типа П®R,
пересылок типа R®П,
пересылок типа П®П.
Оценка трудоемкости рассмотренных алгоритмов показала, что использование стековых регистров сопроцессора для хранения промежуточных данных позволяет значительно снизить трудоемкость реализации алгоритма БПФ в целом. К примеру, для модифицированного алгоритма БПФ для действительных последовательностей при размере выборки в 1024 отсчета для математического сопроцессора i486 трудоемкость уменьшается примерно в 1.385 раз, а для математического сопроцессора Pentium - в 1.338 раз.
4.6 Преобразование Фурье прямоугольного импульса
Прямоугольный импульс определяется выражением:
(4.51)

Рисунок 4.2 – Форма прямоугольного импульса
Прямое преобразование Фурье позволяет получить спектр прямоугольного импульса:
(4.52)

Рисунок 4.3 – Спектр прямоугольного импульса
Обратное преобразование Фурье приводит к восстановлению прямоугольного импульса:

4.7 Представление периодической последовательности единичных
импульсов в частотной области
Имеется бесконечная периодическая последовательность единичных импульсов с периодом Т.


Рисунок 4.4 – Периодическая последовательность единичных импульсов
Определим её представление в частотной области.
Для этого сначала вычислим спектр ограниченной периодической последовательности единичных импульсов:

(4.53)
(4.54)
Это выражение представляет преобразование Фурье конечной последовательности одиночных импульсов, следующих с периодом T, на интервале от –N до N.
Когда N устремляется к бесконечности, то график стягивается в точки.

Рисунок 4.5 – Спектр ограниченной периодической последовательности
единичных импульсов
Для любого N площадь под каждым лепестком огибающей
равна:
.


Рисунок 4.6 – Спектр периодической последовательности
единичных импульсов
Спектр периодической последовательности одиночных импульсов представляет собой дискретную периодическую последовательность импульсов, каждый из которых охватывает площадь, равную 1/T, где T - период следования единичных импульсов.
Таким образом, последовательности импульсов во временной области соответствует последовательность импульсов в частотной области:
. (4.55)
4.8 Вычисление свертки
4.8.1 Круговая свертка
Понятие круговой свертки используется только для периодических последовательностей. Круговой сверткой двух периодических
-точечных последовательностей
и
называется
-точечная последовательность
. (4.56)
Найдем
-точечное ДПФ круговой свертки
.
Изменив порядок суммирования
![]()
и представив
, можно записать ДПФ в виде:
. (4.57)
После замены переменных
сумма в квадратных скобках, с учетом нулевых начальных условий, будет равна
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |


