Научная статья на тему 'Моделирование оптимальных алгоритмов быстрого преобразования Фурье и их сравнительный анализ'

Моделирование оптимальных алгоритмов быстрого преобразования Фурье и их сравнительный анализ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
677
142
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ (БПФ) / ПОЗИЦИОННАЯ СИСТЕМА СЧИСЛЕНИЯ / СИСТЕМА СЧИСЛЕНИЯ В ОСТАТОЧНЫХ КЛАССАХ / СИГНАЛЬНЫЙ ПРОЦЕССОР / АНАЛОГО-ЦИФРОВОЕ ПРЕОБРАЗОВАНИЕ / FAST FOURIER TRANSFORM (FFT) / ANALOG-TO-DIGITAL CONVERTER. / POSITION CALCULATOR SYSTEM / REMAIN CLASS SYSTEM / DIGITAL SIGNAL

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Галанина Наталия Андреевна, Ефимов Александр Дмитриевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Галанина Наталия Андреевна, Ефимов Александр Дмитриевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

OPTIMUM FFT ALGORITHMS MODELING AND THEIR COMPARATIVE ANALYSIS

Program Complex modeling FFT and including Signal Generation Program, its Analog-to-Digital Converter and modules realizing FFT in position and non-position System was designed. Time and device expenditures were organized, also.

Текст научной работы на тему «Моделирование оптимальных алгоритмов быстрого преобразования Фурье и их сравнительный анализ»

УДК 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 Converter and modules realizing FFT in position and non-position System was designed. Time and device expenditures were organized, also.

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

Упрощённая структура модулей разработанного программного комплекса приведена на рис. 1.__________

Интерфейс прикладной

Модуль генерации отсчётов сигнала

Настройка АЦП сигнала

Модуль АЦП генерированного сигнала

Отображение генерированного

DevExpress.XtraGrid

Модуль обработки переполнения в результате выполненной операции

РБТ. Модуль вычисления БПФ в СОК

Модуль упаковки данных

Чтение упакованных данных

Запись упакованных данных

Модуль генерации поворачивающих множителей

Модуль выгрузки в файл

Файловое хранилище

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

Статистическое моделирование сигналов сводится к формированию последовательности случайных чисел, подчиняющихся заданному закону распределения вероятностей. Для большинства систем обработки основным входным воздействием является аддитивная смесь гауссовской коррелированной помехи и когерентного полезного сигнала. Вследствие узкополосности сигналов, наблюдаемых на входе таких систем, их удобно представить с помощью синфазной и квадратурной составляющих в комплексной форме. Смесь сигнала и помех можно записать в виде

¥к = (Яс Як + ЯпПк +$ к + Яип5ип , (!)

где яс, яп, яип - вещественные коэффициенты, определяющие вклад полезного

сигнала, коррелированной и импульсной помех, соответственно, в мощность наблюдаемого сигнала относительно «белого» гауссовского шума £ с единичной дисперсией; Як, цк, 5 ип - отсчеты комплексных огибающих, соответственно полезного сигнала, коррелированной и импульсной помех в к-й момент времени; Жк - огибающая пачки импульсов. Рассмотрим моделирование сигналов, входящих в (1).

Для моделирования пассивной помехи пк используется двухсвязная цепь. Тогда выражение для коррелированной помехи примет вид

Пк = Ь1Пк-1 + Ь2 Пк-2 +у1 1 - (Ь1 К1 + Ь2 К2)$ к , (2)

где $ к - случайный сигнал с нормальным распределением при нулевом ма-

тематическом ожидании и единичной дисперсии; Ь1 и Ь2 - коэффициенты, определяемые по формулам:

= ^г-^; ь2 = , (3)

1 Я1 -1 Я1 -1

здесь Я1 и Я2 - коэффициенты корреляции, рассчитываемые по формулам:

Я1 = ехр

п

; Я2 = ехр

/02Г

V 2,8 ,

(4)

Для начальных выборок при к = 1, 2, 3 значение цк определяется следующим образом:

п =$1; ________

П2 = Ь1П1 +41 - Ь1$ 2;_______________ (5)

Пз = Ь1П2 + Ь2П + д/1 - (Ь1 Е1 + Ь2Я2)$з;

Сигнал Як рассчитывается по формуле:

Як = Я • БЯ, (6)

где S - комплексное число, определяемое по формуле

Я = С08(ф) + ] 8т(ф) , (7)

где ф - равномерно распределенная начальная фаза (фе[-п;п]); БЯ - комплексное число, которое находится по формуле

БЯ = с08(п • Б¥) + ] 8т(п • Б¥), (8)

где В¥ - относительная частота сигнала:

DF = T • fo • к . (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 Мб ОЗУ (рекомендуется 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 передаётся результат, возвращённый методом Discretize, после чего уже результат, возвращённый методом 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 Мб ОЗУ;

- процессор с частотой 533 МГц.

Ввод коэффициентов:

Оэ - сигнал,

Оп - коррелир-я помеха, Оип - импульсная помеха, частота ^ , периода Т,

N - количество отсчётов

Выбирается п значений из случайной последовательности, подчиняющейся равномерному распределению. Значения п=12 достаточно для получения «гауссового» шума

Рассчитываем отсчёты коррелированной помехи, начиная с третьего отсчёта и основывась на предыдущих двух отсчётах

Моделирование отсчёта «белого» гауссовского шума с

п ЛУ2 п

тг)

Инкремент /;

Расчёт первых двух отсчётов коррелированной помехи:

П = $1 _________

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

П = Ь1П +л] 1 - Ь1Л$2

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

ьап*-1 + ь2Пк-2 + V1 - (ЬЛ + ь2 кг)$к

Инкремент I;

БК=Т/0 •к

БЯ = соя(ж* БК) + ] 8т(ж* БК)

Я = С08( ф) + у Бт( ф)

Як = Я * БЯ

7к = («А + ЯпПк + $ + Яип5ип

Инкремент /';

Рассчитываем результирующую смесь сигнала и помехи

Величина ф расположена равномерно на отрезке

[-я; я]

Конец

Рис. 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. Блок-схема функции т с комментариями изменений, касающихся ЕЕТ_БОК

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

Рис. 4. Блок-схема алгоритма работы функции Шп1;еУа1ие

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

00... 000111000

N8 = 5 <56>5 = 110= 0001 2 (4 бита)

0 0 0 1

Рис. 6. Пример работы функции РасШа1а Результаты тестовых испытаний приведены на рис. 7.

200000

32 64 256 512 1024

Количество точек, ед.

Рис. 7. Результаты испытаний методов вычисления БПФ

Реализация вычисления БПФ в СОК, как можно увидеть из рис. 7, выигрывает в скорости вычислений у реализации вычисления БПФ в ПСС с проверкой переполнения регистров. Следует заметить, что наименьшее количество циклов затрачивается на вычисление БПФ в ПСС, но без осуществления проверок переполнения, что оправдано только при очень малом динамическом диапазоне сигнала и не подходит для наиболее распространенных практических случаев. Необходимо отметить, что специфика вычисления БПФ в СОК требует некоторого увеличения аппаратных затрат, хотя наличие двух вычислительных блоков в процессоре ЛБ8Р Т8-101 позволяет организовать одновременное вычисление в двух каналах БПФ в СОК. Наиболее затратной с точки зрения процессорного времени оказалась реализация БПФ в СОК с оптимизацией использования памяти. Это связано с тем, что оптимизация памяти предполагает реализацию и постоянное использование специальных методов доступа к упакованным данным, которые хранятся не в соответствии с процессорным выравниванием, а более плотно. На рис. 8 можно увидеть зависимость степени упаковки данных от модуля канала СОК.

Модуль канала СОК, ^

Рис. 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.

i Надоели баннеры? Вы всегда можете отключить рекламу.