.
АЛГОРИТМ БЫСТРОГО ВЫЧИСЛЕНИЯ ДИСКРЕТНОГО ПРЕОБРАЗОВАНИЯ ФУРЬЕ.
Данная процедура уже выполнена Mathcad, она интересна только тем, что есть возможность сравнивать результаты своих вычислений с правильными ответами.
Итак, в основе алгоритма лежит принцип "разделяй и властвуй". Т.е. необходимо представить ДПФ в такой форме, где минимизируется количество комплексных умножений. Остается только минимальный набор. Сразу предупреждаю тех, кто действительно захочет разобраться во всем этом преобразовании изнутри: необходимо будет очень много бумаги, ручка, Mathcad и базовые навыки работы в нем. Все шаги лучше всего расписывать на бумаге, это долго, муторно, но иначе понять будет тяжеловато.
Для начала необходимо определить главный корень из i (мнимая единица):
Именно эта величина и называется главным корнем из -1. В дальнейшем, при расчетах достаточно возводить это значение в нужную степень, либо вычислить степени заранее. Что и будет сделано позже.
Основная формула, это само ДПФ
Здесь:
Расписывать полностью формулу не имеет смысла, и так видно, что для вычисления ДПФ "в лоб", чтобы получить каждый у необходимо 8 комплексных умножений для каждого из них (имеется ввиду что W и его степени вычислены заранее, иначе появятся еще дополнительные комплексные умножения). Итого, в результате 64 комплексных умножения. Что достаточно много. И это число будет расти, вместе с увеличением количества выборок и для 64 точечного преобразования будет уже необходимо 4096 комплексных умножений!!!
Итак, суть БПФ, это разбиение входного вектора на ДПФ половинной длины, затем каждый получившийся вектор разбивается еще пополам и т.д. пока не останутся 2 точечные ДПФ. Очевидно что данный алгоритм применим только в том случае, если N является степенью двойки. Есть две разновидности этого алгоритма: с прореживанием по времени и с прореживанием по частоте. Оба этих алгоритма по вычислительной сложности одинаковы. Рассмотрим алгоритм БПФ с прореживанием по времени (берутся сначала четные элементы входного вектора, затем только нечетные, вычисляется их ДПФ и объединяются).
Представим исходное преобразование в виде суммы четных и нечетных элементов:
На всякий случай проверим... Пока все верно...
Слегка упростим и преобразуем выражение для большей осмысленности действий:
Здесь я воспользовался свойствами поворачивающих множителей
Теперь входной массив разбит на две части, четную и нечетную. Оба выражения под знаком суммы и есть ДПФ четных и нечетных элементов. Вычислив обе суммы, просто складываем их, домножив на соответствующий поворачивающий множитель. В итоге получается ДПФ исходного вектора.
Следуем дальше принципу разделяй и властвуй. Снова делим каждое ДПФ на четные и нечетные элементы:
Пока вроде бы все верно. Теперь попробуем переписать формулу в развернутом виде. Это просто необходимо, чтобы понять все математические трюки, лежащие в основе БПФ.
Статья находится в разработке
Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2021 © ChipMK.ru
![]() |
|