Чтение онлайн

на главную - закладки

Жанры

Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++

Вальпа Олег Дмитриевич

Шрифт:

Фактически БПФ является модернизацией ДПФ за счет сокращения количества операций умножения и сложения. Это стало возможным благодаря использованию свойств симметрии и периодичности коэффициентов уравнения преобразования, представляющих собой базовые гармонические функции. Если для вычисления N отсчетов спектра сигнала при использовании ДПФ требуется N*N операций умножения комплексных чисел, то при использовании БПФ количество операций сокращается до (N/2)log2(N). Эффективность БПФ по сравнению с ДПФ становится существенной, когда количество точек увеличивается до нескольких тысяч.

В табл. 25.1 приведено соотношение объема вычислительных затрат при различном объеме входных данных.

Таблица 25.1 Соотношение

объема вычислительных затрат при различном объеме входных данных

Количество отсчетов N Количество умножений Коэффициент эффективности
ДПФ БПФ
2 4 1 4
4 16 4 4
8 64 12 5
16 256 32 8
32 1024 80 13
64 4096 192 21
128 16384 448 37
256 65536 1024 64
1024 1048576 5120 205
2048 4194304 11264 372
4096 16777216 24576 683

При вычислении спектра сигнала методом БПФ используют различные алгоритмы. Алгоритм по основанию два (Radix2) разделяет полное вычисление ДПФ на комбинацию двухточечных ДПФ. Каждое двухточечное ДПФ использует базовую операцию умножения с накоплением (так называемую «бабочку»). При этом число точек в БПФ должно быть степенью двойки. Если количество точек является степенью числа четыре, то можно использовать алгоритм по основанию четыре (Radix4). Эти алгоритмы хорошо реализуются в программах для сигнальных процессоров, поскольку в них имеются генераторы адреса с битреверсивной адресацией, предназначенной как раз для реализации подобных алгоритмов.

Глава 26. Программирование на языке СИ

Это заключительная глава книги, в которой рассматриваются примеры программ на языке программирования Си и их выполнение в среде разработки Visual DSP++.

Кроме ассемблерных программ, среда разработки Visual DSP++ позволяет транслировать программы, написанные на языке программирования «Си». Рассмотрим пример простой программы, написанной на языке «Си», которая вычисляет значения тригонометрической функции синуса для четырех заданных значений аргумента.

Создайте новый проект с именем «С» и подключите к проекту новый файл с именем «c1.c», набрав в нем текст программы, приведенный ниже:

#include <math.h>

#define PI 3.14159 /* Число Пи */

int y1, y2, y3, y4;

main {

 y1 = sin(0);

 y2 = sin(PI/2.0);

 y3 = sin(PI);

 y4 = sin(PI+PI/2.0);

}

Здесь

используются стандартные директивы и операторы языка «Си». В начале программы оператор включения подключает библиотеку математических функций math.h. Далее производится определение символьного имени PI. Ниже объявляются целочисленные переменные y1–y4. В данном примере переменные объявлены целочисленными для наглядности представления результата работы программы. Главный цикл программы main состоит из четырех однотипных операций вычисления значений функции синуса для различных значений аргумента. В данном случае аргумент принимает значения, кратные PI/2. Результатом данной программы будут значения функции синус, которые очевидно должны принимать значения 0, 1, 0 и -1.

Выполните трансляцию этой программы, нажав клавишу F7. Затем выполните ее, нажав клавишу F5. После выполнения программы в правой части экрана откроется окно дизассемблера, в котором будет присутствовать текст программы на языке ассемблера. Этот текст позволяет увидеть соответствие операторов языка «Си» набору ассемблерных инструкций. Для просмотра результата работы программы необходимо открыть окно памяти данных с помощью команды Memory→Data. По умолчанию, в этом окне данные отображаются в шестнадцатеричном виде. Для отображения результатов в знаковом целочисленном виде щелкните на окне правой кнопкой мыши и в открывшемся контекстном меню (рис. 26.1) выберите формат Select Format→Signed Integer.

Рис. 26.1. Контекстное меню

В результате данные в окне будут представлены в более привычном для человека виде (рис. 26.2).

Рис. 26.2. Данные в окне представлены в более привычной для человека форме

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

Теперь немного усложним программу, изменив ее текст на тот, что приведен ниже:

#include <math.h>

#define PI 3.14159 /* Число Пи */

#define D PI/180.0 /* Число Дельта */

#define N 100 /* Число отсчетов */

float y1[N], y2[N];

main {

 int i;

 for (i=0; i<N; i++) {

y1[i] = sin(10.0*i*D);

y2[i] = cos(10.0*i*D);

 }

}

Здесь определены два массива y1 и y2 с данными в формате float. Значения этих массивов будут вычисляться в цикле for для N значений аргумента функций синуса и косинуса.

Выполните трансляцию программы и установите точку останова на последней строчке программы. После чего запустите программу на выполнение. Через несколько секунд выполнение программы завершится. Для просмотра результата ее работы откройте новое окно графопостроителя. Для этого выполните команду View→Debug Windows→Plot→New. В открывшемся окне задайте значения всех полей в соответствии с рис. 26.3 и нажмите программную кнопку «Browse».

Поделиться:
Популярные книги

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Отчий дом. Семейная хроника

Чириков Евгений Николаевич
Проза:
классическая проза
5.00
рейтинг книги
Отчий дом. Семейная хроника

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Путанабус. Трилогия

Старицкий Дмитрий
Фантастика:
боевая фантастика
6.93
рейтинг книги
Путанабус. Трилогия

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Потомок бога

Решетов Евгений Валерьевич
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Потомок бога

С Д. Том 16

Клеванский Кирилл Сергеевич
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
С Д. Том 16

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

От Советского Информбюро - 1941-1945 (Сборник)

Неизвестен 3 Автор
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
От Советского Информбюро - 1941-1945 (Сборник)

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Прометей: повелитель стали

Рави Ивар
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Прометей: повелитель стали

Отмороженный 14.0

Гарцевич Евгений Александрович
14. Отмороженный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Отмороженный 14.0