
Лекции / L013
.doc
-
ЛЕКЦИЯ 13. БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ (БПФ)
13.1 Понятие о БПФ
БПФ – это группа
алгоритмов для программной реализации
ДПФ, сокращающих количество операций
примерно в
раз, т.е.
операций вместо
,
см. раздел 14.6.
Другими словами, БПФ - это ДПФ, выполняемое
очень быстро. Первый алгоритм БПФ
предложен в 1965г, а сейчас их много и они
очень сложные. Мы рассмотрим один из
них, наиболее простой для понимания.
Этот алгоритм, иногда называемый
алгоритмом “бабочки”, основан на
расщеплении исходного массива отсчетов
сигнала. Появление БПФ сделало переворот
в цифровой обработке, т.к. позволило
легко переходить к преобразованиям
спектров в случае больших значений
.
Основу БПФ составляют 4 идеи:
-
Спектр ДПФ – периодический,
.
-
Спектр ДПФ легко вычисляется в случае
, когда имеется только одна гармоника и по (14.7)
-
Выбирается
, где
– целая степень, т.е. количество отсчетов не может быть произвольным целым числом. Например, при
имеем
.
-
Спектр исходной последовательности несложно найти по спектрам расщепленных последовательностей. При каждом расщеплении от одного массива из
отсчетов переходят к двум массивам из
отсчетов каждый.
13.2. Вычисление спектра объединенной последовательности по спектрам расщепленных.
Пусть на периоде
T имеем два сигнала и
,
,
каждый из которых содержит N/2
точек и имеет безразмерный шаг
дискретизации
.
Из этих двух сигналов, объединяя их в
виде “гребенки”, получаем объединенную
последовательность
,
,
состоящую из
отсчетов. При таком объединении для
четных
при
имеем
,
для нечетных
при
имеем
.
Например,
,
,
,
и
т.д. Для объединенного сигнала получается
шаг
.
Рассматриваемые сигналы даны на рисунке 13.1
|
Рис 13.1 Две расщепленных и объединенная последовательности отсчетов. |
Запишем спектры этих трех сигналов в комплексной форме (14.7), причем для спектров будем использовать заглавные буквы, соответственно строчные - для сигналов.
ДПФ для исходного
сигнала (15.3) требует
опреаций в строке (
)
(операция – это вычисление константы,
умноженное на
,
прибавление к предыдущему), всего
,
т.е.
строк, операций
.
|
(13.1) |
|
(13.2) |
|
(13.3) |
Здесь суммы по
вычисляются по
точкам и по этому появляются множители
2 перед суммой и в показателе степени.
Количество гармоник в (13.1 – 13.2) равно
,
а в (13.3) оно равно
.
Покажем, как спектр
можно
вычислить по спектрам
и
:
|
13.4 |
т.е.
,
.
При выводе вместо
отсчетов с четными номерами
подставлены значения
,
а вместо отсчетов
c нечетными номерами – значения
.
Формулу (13.4) можно применять для
,
т.к. спектры
и
содержат
гармоник. Но учитывая их периодичность:
,
а
также равенство
,
получаем для гармоник с номерами
|
13.5 |
Формулы (13.4-13.5) составляют суть алгоритма “бабочка”, т.к. для его иллюстрации используют рисунок, похожий на бабочку.
|
Рис.13.2 Иллюстрация к алгоритму “бабочка”. |
15.3. Алгоритм БПФ
Дан массив
из
отсчетов сигнала, причем
.
1.
Расщепляем его многократно на четные
и нечетные последовательности до
получения
последовательностей из одного отсчета
в каждой, см. рис 13.3.
|
Рис.15.3 Расщепление последовательностей. |
На рис. 13.3 значение
дает количество отсчетов в каждой из
расщепленных последовательностей.
Всего уровней расщепления
,
т.е. расщепляем
раз. Будем считать, что
– это новый массив
точек. В нем порядок следования точек
отличен от исходного, т.е.
,
где
,
а индекс
вычисляется по
.
Оказывается, что
преобразование
дает обратный битовый порядок, например,
.
Для
получаем следующее преобразования
индексов:
Столь простое преобразование можно не учитывать при оценках времени работы алгоритма.
2.
Так как при
,
т.е. при одном отсчете на периоде, спектр
равен самому отсчету, то на последнем
уровне расщепления (
)
спектры всех
последовательностей известны. Всего
имеем
спектров, каждый из которых состоит
только из нулевой гармоники (
),
т.е. среднее значение.
3. Объединение последовательностей, т.е. обратный ход.
При каждом
объединении используются формулы для
вычисления спектра (13.4-13.5).
Вычисления завершаются после получения
спектра
из
гармоник для исходной последовательности
уровня
.
15.4. Оценка количества операций в БПФ.
В ДПФ было примерно
операций, см. раздел 14.6.
В БПФ одна гармоника требует одной
операции в соответствии с (13.4)
или (13.5).
На каждом уровне расщепления вычисляется
гармоник (равное числу отсчетов) для
каждого из
сигналов, т.е. всего
гармоник. Так как количество уровней
расщепления равно
,
то всего нужно определить
гармоник, т.е.выполнить
операций, где
.
Следовательно, БПФ требует
операций вместо
в ДПФ, т.е. оно в
раз эффективнее. Выигрыш во времени
выполнения равен
и приведен в таблице 13.1 для M<15,
а далее он резко увеличивается.
Таблица 13.1.
|
3 |
|
10 |
|
|
|
8 |
256 |
1024 |
8192 |
16384 |
|
3 |
30 |
100 |
600 |
1200 |
Следует отметить, что БПФ дает существенный выигрыш при вычислениях всех гармоник, но если нужны только некоторые гармоники, то можно использовать ДПФ.
Оценим время
выполнения БПФ, положив производительность
ПК равной тактовой частоте 1000МГц, т.е.
109 опер./сек.
Пусть
,
а количество операций
и при этом учитываем, что вычисление
комплексной exp(ihks) и комплексное умножение
соответствуют нескольким десяткам
машинных операций. В таблице 13.2 приведены
оценки времени выполнения БПФ, а также
количества телевизионных строк и пути
ракеты за это время.
Таблица 15.2
|
ДПФ |
БПФ |
|
|
|
ПК |
Специальный процессор для БПФ |
Операции |
|
|
|
Время
выполнения
|
10
сек =
|
10
мсек =
|
1мсек |
Телевизионных
строк за
|
|
150 |
15 |
Путь
ракеты за
|
10 км |
10 |
1м |
Таблица показывает, что БПФ можно использовать при цифровой обработке сигналов для практических задач.
15.5 Стандартные подпрограммы БПФ
Самая элегантная подпрограмма БПФ на Фортране для выполнения (14.7) или (14.8) дана в [Г1] на с.390. Ее вызов Call FFT (N,U,Кod),
Входные параметры:
– это количество отсчетов,
-массив
отсчетов длины
,
Kod - код преобразования. Для прямого БПФ
Kod=0, а для обратного БПФ Kod=1. Результатом
является новый выходной массив
.
В PSpice реализован
ДПФ для вычисления первых 9 гармоник в
опции .FOUR, а также БПФ в графическом
процессоре Probe. В последнем вычисляются
все гармоники и период
полагается равным интервалу времени
в опции .TRAN.
В MathCАD БПФ реализовано в виде трех стандартных функций fft(u), xfft(u), cfft(u). Соответствующие им функции ifft, ixfft, icfft реализуют обратное БПФ.
Есть хорошие подпрограммы БПФ на Cu++ и на Си.
В заключение перечислим некоторые области применения БПФ: спектральный анализ, распознавание образов, обработка сигналов и изображений.