Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Изучение алгоритмов формирования и обработки радиотехнических сигналов на цифровом сигнальном процессоре TMS320C5510. Практикум

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
799 Кб
Скачать

Например, при x0=a=c=7, m=10 получим псевдослучайную последовательность 7,6,9,0,7,6,9,0… Как показывает этот пример, такая последовательность не может быть случайной при некоторых наборах чисел m, а, с и х0. Принципы выбора подходящих чисел подробно исследованы в [3]. Приведем основные требования к этим параметрам.

Для получения как можно более «случайной» последовательности необходимо, чтобы m было довольно большим, так как период не может иметь больше m элементов. Даже если необходимо генерировать только случайные нули и единицы, не следует брать m = 2, т.к. тогда последовательность в лучшем случае будет иметь вид ...,0,1,0,1,0,1,...

Другой фактор, который оказывает влияние на выбор m, — скорость генерирования: нужно подобрать значение m так, чтобы (аx(n) + с) mod m вычислялось быстро.

Можно вычислить (аx(n) + с) mod m, помещая (аx(n) + с) в регистры и выполняя деление на m. Но деление — сравнительно медленная операция. Этот недостаток можно устранить, если выбрать значение m равным длине слова процессора. При m = 2b операция mod m может быть реализована посредством арифметического сдвига вправо на b бит, где b − длина слова (число разрядов). Для чисел со

знаком берется на один разряд меньше и для избегания переполнения, таким образом m = 2b-1-1.

Линейная конгруэнтная последовательность, определенная числами m, а, с и xn, имеет период длиной m тогда и только тогда, когда:

1)числа с и m взаимно простые;

2)a - 1 кратно р для каждого простого р, являющегося делителем m;

3)a - 1 кратно 4, если m кратно 4.

Например, при b=32 m = 232-1, a = 1664525, c = 32767.

Чтобы сгенерировать случайные числа, распределенные по нормальному закону, надо сложить 12 равномерно распределенных чисел на [0,1] и вычесть число 6. Среднее значение равномерного распределения 1/2, а нормального распределения 0, и его дисперсия 2 = 1.

Чтобы осуществить сложение последовательностей, выдаваемых описанными выше программами с определенным значением отношения сигнал/шум, формируют отсчеты сигнала и шума, которые имеют одинаковый масштаб в формате 1.15 и хранятся в памяти. Перед их сложением каждый отсчет умножается на соответствующие коэффициенты К1 и К2, что дает требуемое отношение сигнал/шум (К1/К2). Во избежание переполнения надо выбирать К1 и К2 из условия

К1+К2 1.

21

2.7. КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Поясните табличный метод формирования синусоидального колебания.

2.Поясните алгоритм формирования синусоидального колебания табличным методом.

3.Как связана частота дискретизации с заданной частотой синусоидального колебания?

4.В чем недостатки и преимущества метода формирования синуса табличным методом?

5.Чем определяется точность формирования синуса табличным методом?

6.Поясните метод формирования синуса методом аппроксимации.

7.В чем недостатки и преимущества метода формирования синуса с помощью аппроксимации?

8.Поясните алгоритм формирования синуса методом аппроксимации.

9.Как изменить частоту и амплитуду синусоидального колебания при формировании табличным методом?

10.Какие форматы данных и коэффициентов используются при формировании синуса методом аппроксимации?

11.Поясните способ формирования шумового колебания с помощью конгруэнтного алгоритма.

12.Поясните выбор параметров для алгоритма формирования шума.

13.Поясните как реализуется формирователь шума в программном виде?

14.Как сформировать отсчеты нормального шума?

15.Как реализуется операция mod(m)?

16.Как формируется сумма сигнала и шума?

17.Как сформировать колебание с линейной частотной модуляцией?

Список литературы

1.Сперанский B.C. Сигнальные микропроцессоры и их применение в системах телекоммуникаций и электроники: Учебное пособие для вузов.

М.: Горячая линия-Телеком, 2008. - 168 с.

2.Побережский Е.С. Цифровые радиоприемные устройства. — М.: Радио и связь, 1987.

3. Кнут Дональд. Искусство программирования. – Т. 2. Получисленные алгоритмы. – Изд. 3-е. – М.: «Вильямс», 2007. – С. 832.

22

Практикум № 3

Изучение программы реализации цифрового фильтра на сигнальном процессоре TMS320C5510

3.1. ЦЕЛЬ РАБОТЫ

Целью данного практикума является изучение реализации на ЦСП простых приложений на примере программы цифровой фильтрации. Отладочные средства для изучения включают лабораторную плату DSK 5510 и интегрированную среду разработки Code Composer Studio

(CCS).

3.2. ДОМАШНЕЕ ЗАДАНИЕ

1.Изучить программную реализацию фильтра для цифрового сигнального процессора TMS320C5510 на языке С.

2.Рассчитать коэффициенты фильтра с помощью системы инженерных расчетов Matlab.

3.Подготовить ответы на контрольные вопросы.

3.3. ЗАДАНИЕ НА РАБОТУ

1.Включить лабораторную плату DSK 5510 и выполнить ее тестирование.

2.Ознакомиться с примером реализации цифрового фильтра.

3.Загрузить коэффициенты фильтра, рассчитанные в соответствии с вариантом.

4.Провести моделирование работы программы по указанной методике.

5.Получить исполняемый файл и загрузить его в процессор.

6.Провести измерения АЧХ цифрового фильтра с помощью генератора и осциллографа.

3.4. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

3.4.1. Включить лабораторную плату DSK 5510 и выполнить ее тестирование по методике, описанной в предыдущих работах.

3.4.2. Создать новый проект. Создать папку project3 в директории

C:\CCStudio_v3.10\RTSProjects. Скопировать в эту папку содержимое папки C:\CCStudio_v3.10\tutorial\sim55xx\volume1.

Запустить Code Composer Studio (CCS) с помощью иконки на рабочем столе, или выбрав в меню Windows Пуск Programs Texas Instruments Code Composer Studio 3.1 Code Composer Studio 3.1.

Из меню Project выбрать New. В текстовом поле Project Name напечатать project3. В Location выбрать рабочую папку project3 (не

23

допускается указание другого пути!). В Project Type выбрать Executable (.out). В Target выбрать аппаратную конфигурацию (TMS320C55xx) и нажать Finish (Готово).

Code Composer Studio автоматически создаст файл проекта project3.pjt.

Этот файл содержит все установки и ссылки на различные файлы, используемые в ходе выполнения проекта.

3.4.3. Добавить файлы в проект. Выполнить действия, аналогичные действиям, описанным в п.2.2. Практикума № 1. Файлы для проекта либо создаются самостоятельно (по указанию преподавателя), либо копируются из вспомогательной папки filter. Выбрать Debug Connect.

3.4.4. Модифицировать проект project3, дополнив его программой фильтра, приведенной в Приложении 4.

3.4.5. Создать заголовочный файл с коэффициентами фильтра. Для этого запустите систему Matlab, в командном окне наберите fdatool (Filter Design & Analysis Tool). В открывшемся окне установите параметры синтеза фильтра с конечной импульсной характеристикой в соответствии с вариантом, заданным в Таблице 3.1. Частоту дискретизации следует принять равной 48 кГц. Использовать метод наименьших квадратов (least-squares). Значения неравномерности в полосе пропускания и задерживания принять такими, как по умолчанию предлагается в программе. Синтезируйте фильтр.

Воспользуйтесь опцией File -> Export to C Header File для сохранения отсчетов фильтра. Сохраните отсчеты как 16-битные со знаком. Задайте имя файла filter.h и сохраните его в папке со своим проектом.

3.4.6. Построить проект. Выбрать Project Rebuild All или нажать (Rebuild All) на панели инструментов.

3.4.7. Поставить точки пробника и останова. Выбрать File Load Program. Выбрать программу, полученную в ходе построения (*.out) и нажать Open. Выбрать Debug Go Main для поиска начала выполнения программы.

В файле filter.c напротив функции dataIO() поставить точку пробника и

точку останова. Из меню Fileвыбрать File I/O. Нажать (Toggle Probe Point). Напротив выбранной линии должен появиться голубой ромб.

Нажать (Toggle Breakpoint) или F9. Рядом с голубым ромбом появится красный точка останова.

Из меню File выбрать File I/O.Откроется диалоговое окно, в котором можно выбрать входной и выходной файлы (рис.3.1а).

В таблице File Input нажать Add File.

Найти папку созданного Вами проекта project3, выбрать файл gaussian.dat. и нажать Open. Появится управляющее окно для файла gaussian.dat. (рис. 3.1б). Его можно использовать для запуска, остановки, быстрой прокрутки данных файла. Это окно не следует закрывать, во время выполнения программы файл должен быть подключен.

24

 

 

 

 

 

 

Таблица 3.1

 

 

 

Варианты задания

 

 

 

 

 

 

 

 

 

Но-

 

Поря-

Полоса

Полоса

Полоса

Полоса

мер

 

Тип

док

пропус-

задержи-

пропус-

задержи-

по

фильтра

фильт-

кания

вания

кания

вания

жур-

 

ра

1, Гц

1, Гц

2, Гц

2, Гц

налу

 

 

 

 

 

 

 

1.

ФНЧ

20

5000

7000

-

-

2.

ФВЧ

20

7000

5000

-

-

3.

ФНЧ

20

3000

5000

-

-

4.

ФВЧ

20

5000

3000

-

-

5.

ПФ

20

7000

5000

10000

12000

6.

РФ

20

5000

7000

12000

10000

7.

ПФ

20

5000

3000

8000

10000

8.

РФ

20

3000

5000

10000

8000

9.

ФНЧ

30

5000

7000

-

-

10.

ФВЧ

30

7000

5000

-

-

11.

ФНЧ

30

3000

5000

-

-

12.

ФВЧ

30

5000

3000

-

-

13.

ПФ

30

7000

5000

10000

12000

14.

РФ

30

5000

7000

12000

10000

15.

ПФ

30

5000

3000

8000

10000

16.

РФ

30

3000

5000

10000

8000

17.

ФНЧ

40

5000

7000

-

-

18.

ФВЧ

40

7000

5000

-

-

19.

ФНЧ

40

3000

5000

-

-

20.

ФВЧ

40

5000

3000

-

-

В диалоговом окне File I/O изменить Address на inp_buffer и Length на 100. Поставить галочку в окошке Wrap Around.

Нажать Add Probe Point. Появится диалоговое окно Probe Points (рис. 3.1в). В листе Probe Point выделите линию VOLUME.C line ** --> No Connection. В поле Connect To нажмите стрелку вниз и выберете файл FILE IN:C:\...\ gaussian.dat. из листа файлов. Нажмите Replace.

Нажмите OK. Диалоговое окно File I/O покажет файл, который теперь соединен с точкой пробника. Нажать OK для закрытия диалога File I/O.

3.4.8. Настроить окна просмотра графиков. В диалоговом окне Graph Property Dialog измените Graph Title, Start Address, Acquisition Buffer Size, Display Data Size, DSP Data Type, Autoscale, and Maximum Y-на значения, как показано на рис. 3.2. В окнах установки графического дисплея для входного и выходного буферов установить Display Type FFT Magnitude. Параметры преобразования Фурье оставить по умолчанию. Нажмите OK. Появится окно просмотра графиков.

25

Рис. 3.1. Окна для подключения файла в точку пробника

Рис. 3.2. Окно установки свойств графического дисплея

26

С помощью нажатия на правую кнопку мыши, щелкнув по окну просмотра графика, выберите Clear Display из всплывающего меню.

Выбрать View Graph Time/Frequency снова.

Измените Graph Title на Output и Start Address на out_buffer. Все остальные установки оставьте те же. Нажмите OK. Появится окно просмотра графиков. С помощью нажатия на правую кнопку мыши, щелкнув по окну появившегося графика, выберите Clear Display из всплывающего меню. Расставьте окна так, чтобы были видны оба графика.

3.4.9. Запуск программы. В меню Debug выбрать Animate или нажать на панели инструментов (Animate) для запуска программы. Нажмите Debug Halt для остановки программы. Зарисуйте и объясните полученные графики.

3.4.10. Измерение АЧХ фильтра. Закройте выполнявшийся ранее проект, выбрав в меню Project Close. Откройте проект dsk_app, находящийся в одноименной папке в директории

C:\CCStudio_v3.10\RTSProjects. В файл filter.h из аналогичного файла предыдущего проекта скопируйте свои коэффициенты и значение порядка фильтра. Постройте проект, загрузите и запустите программу. Проверьте АЧХ полученного фильтра, используя генератор и осциллограф.

 

 

3.5. СОДЕРЖАНИЕ ОТЧЕТА

 

Отчет

должен

содержать следующие разделы:

цель работы,

варианты

задания,

результаты экспериментальных

исследований

(графики входных и выходных отчетов для разных пунктов задания, результаты измерений), выводы по работе, причем, выводы каждый студент делает индивидуально.

3.6. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Классификация устройств обработки сигналов. Области применения цифровых сигнальных процессоров (ЦСП).

2.В чем особенность гарвардской архитектуры ЦСП?

3.Каковы основные устройства ЦСП TMS320C5510 и их общее назначение?

4.Виды адресации в ЦСП TMS320C5510.

5.Что такое циклическая (модульная) адресация, как она задается и для чего она применяется?

6.Как обеспечивается в ЦСП эффективная реализация базовой операции ЦОС?

7.В чем заключается программная ориентация ЦСП на задачи цифровой обработки сигналов?

8.В чем заключается аппаратная ориентация ЦСП на задачи ЦОС?

27

9. Как реализована подпрограмма свертки в данной работе?

10.Общая характеристика семейств цифровых сигнальных процессоров компании Texas Instruments. Краткая характеристика платформ ‘С2000, ‘С5000, ‘С6000.

11.Сравнение производительности цифровых сигнальных процессоров.

12.Работа интерфейса внешней памяти ЦСП TMS320C5510. Какие типы памяти можно к нему подключить.

13.Работа последовательного порта.

14.Назначение контроллера прямого доступа к памяти.

15.Назначение и работа таймера.

Список литературы

1.Сперанский B.C. Сигнальные микропроцессоры и их применение в системах телекоммуникаций и электроники. М: Горячая линия – Телеком, 2008.

2.Айфичер Э., Джервис Б. Цифровая обработка сигналов: практический подход. Изд. 2-е: Пер. с англ. М.: Издательский дом «Вильямс», 2004.

3.TMS320C55x DSP Reference Set, Volume 1: CPU and Peripherals, 2001 Texas Instruments Incorporated.

28

ПРИЛОЖЕНИЕ 1

Программа умножения входного сигнала на заданный коэффициент

#include <stdio.h> #include "volume.h"

/* Объявление функций, переменных и буферов */

int inp_buffer[BUFSIZE]; /* буферы обработки данных */ int out_buffer[BUFSIZE];

int gain = MINGAIN; /* переменная, управляющая усилением */ unsigned int processingLoad = BASELOAD; /* загрузка данных */ struct PARMS str =

{2934, 9432, 213, 9432, &str}; /* Функции */

extern void load(unsigned int loadValue); static int processing(int *input, int *output); static void dataIO(void);

/* ======== основная программа (main) ======== */ void main() {

int *input = &inp_buffer[0]; int *output = &out_buffer[0];

puts("volume example started\n");

/* бесконечный цикл */ while(TRUE) {

/* чтение с использованием точки пробника, соединенной с заданным файлом. */ /* Запись выходных данных в окно визуализации, соединенное с точкой пробника.*/

dataIO(); #ifdef FILEIO

puts("begin processing"); #endif

/* apply gain */ processing(input, output);}

}

/* ======== подпрограмма обработки (processing) ======== *

*ФУНКЦИИ: обработка входного сигнала.

*ПАРАМЕТРЫ: адреса входных и выходных буферов.

*ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: TRUE. */

static int processing(int *input, int *output) {int size = BUFSIZE;

while(size--){*output++ = *input++ * gain;} /* загрузка */

load(processingLoad);

return(TRUE);}

/* ======== ввод-вывод данных (dataIO) ======== *

*ФУНКЦИИ: чтение входного сигнала и запись выходного сигнала.

*ПАРАМЕТРЫ: нет.

*ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: нет. */

static void dataIO()

{/* выполняется ввод-вывод данных */ return;}

29

ПРИЛОЖЕНИЕ 2

Программа генерации синусоидального сигнала

#include "tonecfg.h" #include "dsk5510.h" #include "dsk5510_aic23.h"

#define SINE_TABLE_SIZE 48 /* Размер таблицы синуса */

/* Конфигурационные установки кодека */

DSK5510_AIC23_Config config = { 0x0017, // 0 DSK5510_AIC23_LEFTINVOL 0x0017, // 1 DSK5510_AIC23_RIGHTINVOL 0x00d8, // 2 DSK5510_AIC23_LEFTHPVOL 0x00d8, // 3 DSK5510_AIC23_RIGHTHPVOL 0x0011, // 4 DSK5510_AIC23_ANAPATH 0x0000, // 5 DSK5510_AIC23_DIGPATH 0x0000, // 6 DSK5510_AIC23_POWERDOWN 0x0043, // 7 DSK5510_AIC23_DIGIF 0x0081, // 8 DSK5510_AIC23_SAMPLERATE 0x0001 // 9 DSK5510_AIC23_DIGACT

};

/* Предварительно сгенерированная таблица синуса, 16-битные знаковые отсчеты */

Int16 sinetable[SINE_TABLE_SIZE] = { 0x0000,0x10b4,0x2120,0x30fb,0x3fff,0x4dea,0x5a81,0x658b, 0x6ed8,0x763f,0x7ba1,0x7ee5,0x7ffd,0x7ee5,0x7ba1,0x76ef, 0x6ed8,0x658b,0x5a81,0x4dea,0x3fff,0x30fb,0x2120,0x10b4, 0x0000,0xef4c,0xdee0,0xcf06,0xc002,0xb216,0xa57f,0x9a75, 0x9128,0x89c1,0x845f,0x811b,0x8002,0x811b,0x845f,0x89c1, 0x9128,0x9a76,0xa57f,0xb216,0xc002,0xcf06,0xdee0,0xef4c

};

 

 

void main() {

 

DSK5510_AIC23_CodecHandle hCodec;

Int16 msec, sample;

DSK5510_init();/* инициализация платы */

hCodec = DSK5510_AIC23_openCodec(0, &config); /*

Запуск кодека */

 

/* Подпрограмма генерации синуса */

for (msec = 0; msec < 5000; msec++)

{

for (sample = 0; sample < SINE_TABLE_SIZE;

sample++)

 

 

 

{

/* Выдача отсчета в левый канал */

while (!DSK5510_AIC23_write16(hCodec, sinetable[sample]));

/* Выдача отсчета в правый канал */ while (!DSK5510_AIC23_write16(hCodec,

sinetable[sample])); }

}

DSK5510_AIC23_closeCodec(hCodec); /* Закрыть кодек */

}

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]