Вы находитесь на странице: 1из 10

УДК 517.

443
Н.А. ГАЛАНИНА, А.Д. ЕФИМОВ
МОДЕЛИРОВАНИЕ ОПТИМАЛЬНЫХ АЛГОРИТМОВ
БЫСТРОГО ПРЕОБРАЗОВАНИЯ ФУРЬЕ
И ИХ СРАВНИТЕЛЬНЫЙ АНАЛИЗ
Ключевые слова: быстрое преобразование Фурье (БПФ), позиционная система счисления, систе-
ма счисления в остаточных классах, сигнальный процессор, аналого-цифровое преобразование.
Разработан программный комплекс моделирования быстрого преобразования Фурье, вклю-
чающий программу генерации сигнала, его аналого-цифровое преобразование и модули, реали-
зующие вычисление преобразования Фурье в позиционной и непозиционных системах счисле-
ния. Проведена оценка временных и аппаратурных затрат.
N.A. GALANINA, A.D. EFIMOV
OPTIMUM FFT ALGORITHMS MODELING
AND THEIR COMPARATIVE ANALYSIS
Key words: Fast Fourier Transform (FFT), Position Calculator System, Remain class System, Digital
Signal, Analog-to-Digital Converter.
Program Complex modeling FFT and including Signal Generation Program, its Analog-to-Digital Con-
verter and modules realizing FFT in position and non-position System was designed. Time and device
expenditures were organized, also.

Разработанный программный комплекс моделирования БПФ содержит,


во-первых, программу генерации сигнала, воздействующего на систему обра-
ботки и его последующее аналого-цифровой преобразование, и, во-вторых,
программные модули, реализующие вычисление БПФ в позиционной и непо-
зиционной системах.
Упрощённая структура модулей разработанного программного комплек-
са приведена на рис. 1.

Рис. 1. Структура модулей программного комплекса


Статистическое моделирование сигналов сводится к формированию после-
довательности случайных чисел, подчиняющихся заданному закону распределе-
ния вероятностей. Для большинства систем обработки основным входным воз-
действием является аддитивная смесь гауссовской коррелированной помехи и
когерентного полезного сигнала. Вследствие узкополосности сигналов, наблю-
даемых на входе таких систем, их удобно представить с помощью синфазной и
квадратурной составляющих в комплексной форме. Смесь сигнала и помех
можно записать в виде
Yk = ( qc S k + qп ηk )Wk + ξ k + qип δ ип , (1)
где qc, qп, qип – вещественные коэффициенты, определяющие вклад полезного
сигнала, коррелированной и импульсной помех, соответственно, в мощность
наблюдаемого сигнала относительно «белого» гауссовского шума ξ с еди-
ничной дисперсией; S k , η k , δ ип – отсчеты комплексных огибающих, со-
ответственно полезного сигнала, коррелированной и импульсной помех в k-й
момент времени; Wk – огибающая пачки импульсов. Рассмотрим моделирова-
ние сигналов, входящих в (1).
Для моделирования пассивной помехи η k используется двухсвязная
цепь. Тогда выражение для коррелированной помехи примет вид
η k = b1 η k −1 + b2 η k −2 + 1 − (b1 R1 + b2 R2 )ξ k , (2)
где ξ k – случайный сигнал с нормальным распределением при нулевом ма-
тематическом ожидании и единичной дисперсии; b1 и b2 – коэффициенты,
определяемые по формулам:
R − R2 R 2 − R2
b1 = 1 ; b2 = 1 , (3)
R1 − 1 R1 − 1
здесь R1 и R2 – коэффициенты корреляции, рассчитываемые по формулам:
⎛ π2 ⎞ ⎛ π2 ⎞
R1 = exp⎜⎜ − f 0T ⎟⎟; R2 = exp⎜⎜ − f 0 2T ⎟⎟. (4)
⎝ 2,8 ⎠ ⎝ 2,8 ⎠
Для начальных выборок при k = 1, 2, 3 значение η k определяется сле-
дующим образом:
η1 = ξ1 ;
η 2 = b1η1 + 1 − b1 R1 ξ 2 ; (5)
η3 = b1η 2 + b2 η1 + 1 − (b1 R1 + b2 R2 )ξ 3 ;
Сигнал S k рассчитывается по формуле:
S k = S ⋅ DS , (6)
где S – комплексное число, определяемое по формуле
S = cos(ϕ) + j sin(ϕ) , (7)
где ϕ – равномерно распределенная начальная фаза (ϕ∈[–π;π]); DS – ком-
плексное число, которое находится по формуле
DS = cos(π ⋅ DF ) + j sin(π ⋅ DF ) , (8)
где DF – относительная частота сигнала:
DF = T ⋅ f 0 ⋅ k . (9)
Реализация обоих алгоритмов была осуществлена на процессоре семей-
ства TigerSHARC-101 компании Analog Devices. Архитектура этих процессо-
ров совмещает технологии VLIW и SIMD и поддерживает параллельное вы-
полнение до 4 операций умножения 32-разрядных чисел с плавающей точкой.
Процессоры семейства также работают на более высоких частотах: до 600
МГц. Процессоры ADSP-TS10x/20x работают с данными различной разряд-
ности и поддерживают формат как с фиксированной, так и с плавающей точ-
кой. По этой причине данное семейство может быть также классифицировано
и как высокопроизводительный чип с фиксированной точкой. Процессоры
TigerSHARC отличаются еще и тем, что содержат память DRAM
на кристалле.
Процессор TigerSHARC – это статический суперскалярный DSP-про-
цессор, имеющий ультравысокую производительность и оптимизированный
на выполнение задач, требующих обработки больших объемов сигнальной
информации в реальном масштабе времени. На сегодняшний день
TigerSHARC обеспечивает наиболее высокую производительность, гибкость
и эффективность.
Минимальные требования к системе следующие:
− ОС Windows 2000/Server 2003/XP/Vista/Server 2008;
− Microsoft .NET Framework версии 3.5 и выше;
− 256 Mб ОЗУ (рекомендуется 1024 Мб);
− процессор с частотой 1 ГГц (рекомендуется 2 ГГц).
Программа написана в IDE MS Visual Studio 2008 на языке программи-
рования C# с использованием библиотеки классов .NET версии 3.5, а также с
использованием сторонней библиотеки Exocortex.DSP, реализующей некото-
рые алгоритмы цифровой обработки сигналов.
Программа состоит из модулей, выполненных в отдельных файлах.
Взаимодействие модулей между собой реализуется при помощи инструмен-
тов среды разработки. Для функционирования программы необходима уста-
новка пакета MS.NET Framework версии 3.5 или выше.
Кроме того, имеется исходный XAML-код построения пользователь-
ского интерфейса. Основными модулями программы являются классы
SignalGenerator и ADCHelper.
Класс SignalGenerator ответствен за моделирование сигнала входного
воздействия, и основным результатом работы объекта этого класса является
коллекция отсчётов генерированного сигнала.
Метод NextNormalRandom возвращает случайное число, полученное с
нормальным («гауссовским») распределением.
Метод GenerateWhiteNoise генерирует заданное параметром count коли-
чество отсчётов белого шума.
Метод DegToRadians преобразует значение, заданное в градусах, в зна-
чение, заданное в радианах.
Метод GenerateSignal генерирует отсчёты входного сигнала, воздейст-
вующего на систему обработки, в соответствии с заданными параметрами.
Блок-схема алгоритма, реализованного в методе GenerateSignal, представлена
на рис. 2.
Класс ADCHelper отвечает за моделирование аналого-цифрового преобра-
зования входного сигнала при заданных параметрах. В результате работы объек-
та этого класса программист также получает серию отсчётов сигнала, прошед-
шего через этап АЦП.
Метод Discretize производит дискретизацию сигнала, заданного первым
входным параметром с частотой, заданной вторым входным параметром.
Метод Quantize производит квантование сигнала по уровням в соответствии
с заданной разрядностью квантованного числа.
Метод MakeADC производит непосредственно моделирование аналого-
цифрового преобразования входного сигнала, которое заключается в после-
довательном вызове методов Discretize и Quantize. Причём в качестве пара-
метра в метод Quantize передаётся результат, возвращённый методом Discre-
tize, после чего уже результат, возвращённый методом Quantize, получает
программист, использующий объект ADCHelper.
Для разработки процессорной программы использован пакет VisualDSP++.
Процесс отладки проекта после написания кода программы и успешной
компиляции включает три основных этапа: моделирование (Simulation), оценку
(Evaluation) и эмуляцию (Emulation). На этапе моделирования работает модели-
рующая программа (симулятор), которая имитирует работу процессора.
Симулятор используется для проверки и отладки программного кода до
того, как будет изготовлена плата с процессором. Интерфейс пакета
VisualDSP++ – единый для всех серий сигнальных процессоров, включая
16-, 32-битные, а также TigerSHARC и Blackfin.
Общие сведения о программе. Разработанная программа реализована в
IDE VisualDSP++ и предназначена для оценки затрат времени и памяти на
вычисление БПФ с использованием средств позиционной и непозиционной
арифметики. Рассматривались следующие возможные случаи:
− вычисление БПФ в позиционной системе счисления без учёта возможного
переполнения в результате выполненной операции;
− вычисление БПФ в позиционной системе счисления с учётом возмож-
ного переполнения в результате выполненной операции;
− вычисление БПФ в системе остаточных классов с оптимизацией по
времени;
− вычисление БПФ в системе остаточных классов с оптимизацией по
памяти.
Оценка временных затрат проводилась путём получения значения про-
цессорного счётчика циклов соответственно до и после вычисления БПФ
указанным методом, после чего вычислялась разность между этими двумя
значениями.
Минимальные системные требования следующие:
− ОС Windows 98/2000/Server 2003/XP/Vista/Server 2008;
− установленная среда разработки Visual DSP++ 5.0 и симулятор;
− процессор ADSP TS-101 либо отладочная плата EZ-KIT c интерфей-
сом аппаратной отладки JTAG;
− 128 Mб ОЗУ;
− процессор с частотой 533 МГц.
Начало

Выбирается n значений из
Ввод коэффициентов: случайной Рассчитываем отсчёты
Qs - сигнал, последовательности, коррелированной помехи,
Qп – коррелир-я помеха, подчиняющейся начиная с третьего отсчёта и
Qип – импульсная помеха, равномерному основывась на предыдущих
частота f0 , периода T, распределению. Значения двух отсчётах
N – количество отсчётов n=12 достаточно для
сигнала получения «гауссового» шума

i = 1;
i = 3;

Нет
i≤ N
Да
Да i≤ N

Нет Расчёт очередного отсчёта коррелированной помехи

η k = b1η k −1 + b2η k − 2 + 1 − ( b1 R1 + b2 R 2 )ξ k
Моделирование отсчёта
«белого» гауссовского
шума
i = 1; Инкремент i;
1
⎛ n ⎞ 2 n
ξ =⎜ ⎟
⎝ 12 ⎠
∑ Ri − n
i =1
2

Нет
i≤ N
Инкремент i;
Да

Расчет коэффициентов
корреляции R1, R2
DF= T ⋅ f0 ⋅ k Рассчитываем
результирующую
DS = cos(π * DF) + j sin(π * DF) смесь сигнала
⎧ π2 ⎫
R1 = e x p ⎨ − f 0T ⎬ и помехи
⎩ 2, 8 ⎭ S = cos( ϕ ) + j sin( ϕ )
⎧ π2 ⎫
R 2 = exp ⎨ − f 0 2T ⎬ S k = S ∗ DS Величина φ
⎩ 2, 8 ⎭ расположена
Yk = (qc Sk + qпηk )Wk + ξk + qипδ ип равномерно на отрезке
[- ; ]

Расчет коэффициентов b1, b2

R1 − R 2 Инкремент i;
b1 =
R1 − 1
R12 − R2
b2 =
R1 − 1

Расчёт первых двух отсчётов


коррелированной помехи: Конец

η1 = ξ1
η 2 = b1η1 + 1 − b1 R1 ξ 2
Рис. 2. Блок-схема алгоритма моделирования сигнала
Руководство программиста. Программа состоит из нескольких моду-
лей, каждый из которых реализует один из методов вычисления БПФ или яв-
ляется вспомогательным модулем. Модули в данном случае представлены
функциями, реализованными на языках Си или Assembler.
Функция extern "C" float FFT(float* samples, float* twiddles) вычисляет
БПФ отсчётов сигнала, хранящихся в массиве samples, проводя вычисления в
позиционной системе счисления. Кроме того, вторым параметром в функцию
передаётся массив поворачивающих множителей. Функция построена таким
образом, что вначале вычисляется необходимое количество этапов БПФ. От-
метим, что вычисления производятся «по группам» с общим поворачиваю-
щим множителем. Таким образом, операция чтения поворачивающего мно-
жителя из массива производится для группы один раз на каждом из этапов
вычисления БПФ. Блок-схема функции приведена на рис. 3
Функция extern "C" void FFT_SOK(int* samples, float*twiddles) вычисляет
БПФ отсчётов сигнала, записанных в массиве samples аналогично функции FFT,
но в СОК. При установленном макросе #define MEMORY массив samples вос-
принимается функцией как массив упакованных данных.
Функция extern "C" void WriteValue(int* array, int elenemtNumber, int
value) записывает значение value в массив упакованных данных по индексу
elementNumber. Блок-схема этой функции приведена на рис. 4.
Функция extern "C" int ReadValue(int* array, int elenemtNumber) возвра-
щает значение элемента массива упакованных данных array по индексу ele-
mentNumber. Алгоритм работы этой функции аналогичен алгоритму работы
WriteValue за тем исключением, что производится чтение.
Функция extern "C" void PackData(int* output, void* input) производит
упаковку данных массива input в массив меньшего размера output. Алгоритм
работы функции PackData приведён на рис. 5, а на рис. 6 показан пример ее
работы.
Функция extern "C" float FFT_Checks(float* samples, float* twiddles) про-
изводит вычисление БПФ с осуществлением проверки переполнения регистра
в результате операций, а также с масштабированием сигнала в случае обна-
ружения такого переполнения.
Функция void OverflowCheck(int* data, int length) осуществляет проверку пе-
реполнения через регистр XSTAT и, в случае обнаружения, масштабирует данные
в массиве data длиной length.
Функция void SwapToBitReversed(float* input, int N) переставляет эле-
менты массива input длиной N в соответствии с бит-реверсным порядком.
Результаты тестовых испытаний. Испытание каждого метода вычис-
ления БПФ проводилось следующим образом:
− посредством прикладной программы генерировались отсчёты сигнала
и моделировалось АЦП, после чего полученные отсчёты записывались в файл
в текстовом формате;
− затем отсчёты из данного файла статически попадали в массивы дан-
ных в процессорной программе путём использования директивы препроцес-
сора #include;
− на следующем этапе процессорная программа компилировалась и за-
пускалась на исполнение, в процессе чего вычислялось БПФ каждым из реа-
лизованных методов;
− для каждого из методов измерялось затраченное процессорное время
в циклах, а затем выводилось на консоль среды разработки.

Рис. 3. Блок-схема функции FFT с комментариями изменений,


касающихся FFT_SOK
НАЧАЛО

Установка входных данных:


указатель на область памяти ,
номер позиции для записи,
значение для записи

Вычисление битовой позиции


элемента

Вычисление номера ячейки в


массиве, в которую будет записан
элемент

Вычисление битовой позиции в


ячейке и количества доступных
бит для записи (bits)

Считывание значения ячейки


массива и запись возможного
количества бит входного числа,
начиная с найденной стартовой
позиции

Если число не
помещается
полностью в текущую Нет
ячейку массива,
bits < length
выбирается
следующая за ней и
недостающие биты Да
дописываются в неё

Считывание значения следующей


ячейки и запись оставшихся бит
в неё, начиная с нулевой позиции

КОНЕЦ

Рис. 4. Блок-схема алгоритма работы функции WriteValue

Рис. 5. Блок-схема алгоритма работы функции PackData


Рис. 6. Пример работы функции PackData

Результаты тестовых испытаний приведены на рис. 7.

200000
Количество процессорных циклов

180000 БПФ в ПСС


160000 БПФ в ПСС с проверкой переполнения

140000 БПФ в СОК


БПФ в СОК с оптимизацией памяти
120000
100000
80000
60000
40000
20000
0
32 64 256 512 1024
Количество точек, ед.
Рис. 7. Результаты испытаний методов вычисления БПФ

Реализация вычисления БПФ в СОК, как можно увидеть из рис. 7, выиг-


рывает в скорости вычислений у реализации вычисления БПФ в ПСС с про-
веркой переполнения регистров. Следует заметить, что наименьшее количе-
ство циклов затрачивается на вычисление БПФ в ПСС, но без осуществления
проверок переполнения, что оправдано только при очень малом динамиче-
ском диапазоне сигнала и не подходит для наиболее распространенных прак-
тических случаев. Необходимо отметить, что специфика вычисления БПФ в
СОК требует некоторого увеличения аппаратных затрат, хотя наличие двух
вычислительных блоков в процессоре ADSP TS-101 позволяет организовать
одновременное вычисление в двух каналах БПФ в СОК. Наиболее затратной
с точки зрения процессорного времени оказалась реализация БПФ в СОК с
оптимизацией использования памяти. Это связано с тем, что оптимизация
памяти предполагает реализацию и постоянное использование специальных
методов доступа к упакованным данным, которые хранятся не в соответствии
с процессорным выравниванием, а более плотно. На рис. 8 можно увидеть
зависимость степени упаковки данных от модуля канала СОК.
100
90,625
90
81,25
80
71,875
70
Степень сжатия, %

62,5
60
53,125
50
43,75
40 34,375
30
25
20
15,625
10

0 0
4 32 256 2048 16384 131072 1048576 8388608 67108864 2,147E+09
Модуль канала СОК, Ns
Рис. 8. Зависимость степени упаковки данных
от модуля канала СОК

Следует отметить, что возникающие проблемы с аппаратными затратами


БПФ в СОК связаны как с архитектурной, так и с аппаратной нацеленностью
современных процессоров на использование ППС.
Литература
1. Блейхут Р. Быстрые алгоритмы цифровой обработки сигналов: пер. с англ. / Р. Блей-
хут. М.: Мир, 1989. 448 с.
2. Лебедев Е.К. Быстрые алгоритмы цифровой обработки сигналов / Е.К. Лебедев. Красно-
ярск: Изд-во Краснояр. ун-та, 1989. 192 с.
3. http://www.fastvideo.ru/info/dsp/tigersharc/ts201.htm.

ГАЛАНИНА НАТАЛИЯ АНДРЕЕВНА – кандидат технических наук, доцент кафед-


ры математического и аппаратного обеспечения информационных систем, Чувашский
государственный университет, Россия, Чебоксары (galaninacheb@mail.ru).
GALANINA NATALIYA ANDREEVNA – candidate of technical sciences, associate professor of
math and hardware information systems char, Chuvash State University, Russia, Cheboksary.
ЕФИМОВ АЛЕКСАНДР ДМИТРИЕВИЧ – студент V курса, Чувашский государст-
венный университет, Россия, Чебоксары (ead@mail.ru).
EFIMOV ALEKSANDR DMITRIEVICH – student, Chuvash State University, Russia,
Cheboksary.