Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическиое пособие_10.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

5.2. Описание функций, используемых в проекте эхо и реверберация

Функция USBSTK5515_init() производит инициализацию процессора и подачу на все периферийные устройства тактовых импульсов. Последнее достигается установкой 0-го значения всем битам регистров процессора PCGCR1 и PCGCR2 расположенных по адресу 1С02h и 1C03h.

Функция USBSTK5505_I2C_init() инициализирует интерфейс I2C, который используется для настройки кодека. USBSTK5505_GPIO_setDirection(GPIO26,GPIO_OUT) конфигурирует вывод процессора общего назначения GPIO26 как выход. USBSTK5505_GPIO_setOutput(GPIO26, 1) устанавливает на GPIO26 логическую единицу, который подаётся на вход кодека Chip Select, подключая таким образом чип аудио кодека AIC3204.

Функция aic3204_init() осуществляет инициализацию кодека. Это происходит в несколько этапов:

-настройка последовательной шины

-конфигурация тактовых импульсов

-конфигурация цифро-аналогового преобразователя

-конфигурация аналого-цифрового преобразователя

-настройка интерфейса I2S

По I2S осуществляется высокоскоростной двухсторонний обмен данными между кодеком и процессором.

В USBSTK5515_ULED_init() происходит инициализация светодиодов на плате USB Stick.

Каждый отсчёт (sample) сигнала обрабатывается по-отдельности. Сначала мы должны считать цифровой сигнал. Это делает функция aic3204_codec_read(&left_input, &right_input). Для этого в функции переменным left_input и right_input присваиваются значения регистров процессора I2SRXLT1 (Receive Left Data 1 Register) и I2SRXRT1 (Receive Right Data 1 Register).

Полученные данные для левого и правого канала, преобразуются в один с помощью функции stereo_to_mono(left_input, right_input). В этой функции находится среднее арифметическое значение между left_input и right_input, результат записывается в переменную mono_input.

Теперь можно осуществить преобразования над данными. Функции echo(mono_input) и reverberation(mono_input).

В конце программы, с помощью функции aic3204_disable() отключается I2S интерфейс и устанавливаем состояние аудио кодека на сброс/выключен.

5.3.Генератор синусоидального сигнала

В задании для генерации (Chapter 4) синусоидального сигнала используется стандартная библиотека dsplib, которая предоставляется Texas Instruments. В этой библиотеке содержится много полезных функций для работы с ЦСП:

  • функция Быстрого Преобразования Фурье

  • функции синуса, косинуса, тангенса

  • функции экспоненты и логарифма

Каждая из функций, оптимизирована для работы с конкретным процессором.

В микропроцессорной технике генерация тестовых гармонических сигналов используется постоянно. Применяются два подхода. В первом случае значения полупериода гармонического сигнала представляются в виде таблицы. Чем точнее должен быть сгенерирован сигнал, тем больше размер этой таблицы. Этот метод имеет главное достоинство, быстрое получение результата. Недостаток – низкая точность при генерации высоких частот. Второй подход заключается в представлении синуса и косинуса в виде степенного ряда. Этот подход и используется в DSPLIB (TI). Достоинство – высокая точность, зависящая от количества составляющих ряда. Недостаток – длительность вычислений.

Для наблюдения за результатом выполнения программы на ЦСП, подключим STEREO OUT платы (Рис. 5.14.) к линейному входу звуковой карты компьютера и с помощью программы Cool Edit, будем записывать сигнал сгенерированный ЦСП. Зададим различные значения частоты и амплитуды для левого и правого каналов:

  • left_output = generate_sinewave_1(250, 5000);

  • right_output = generate_sinewave_2(500, 10000);

На левом канале стерео выхода мы увидим синусоидальный сигнал с частотой равной 250 Гц и амплитудой 5000, а для правового канал частота будет равна 500 Гц и амплитуда 10000. Результат генерации мы можем наблюдать в окне программы Cool Edit (Рисунок 5.15). Так же результаты работы программы можно наблюдать на экране осциллографа.

Рис. 5.14.Подключенный к STEREO OUT

Рис. 5.15.Результат генерации синуса

Для генерации сигнала используется функция sine() (sine ( &count, &sinusoid, 1);). Она принимает три параметра:

-count - адрес памяти, в котором содержится значение частоты

-sinusoid - адрес памяти, в который помещается рассчитанное значение синуса

-третий параметр всегда 1

Функция sine() вычисляет синус угла. Для этого на вход функции подается число с фиксированной точкой, которое соответствует значению угла:

-0 соответствует 0o

-16383 соответствует 90o

-32767 соответствует 180o

-2 * 32767 соответствует 360o