Лаба-3 (2021-2022) - Добор-3. Лабораторная работа Добор баллов
Скачать 247.61 Kb.
|
Лабораторная работа № 3. Добор баллов Выполнить декодирование последовательности отсчетов по упрощенному алгоритму ADPCM. Каждый входной отчет представляет собой упакованную последовательность из N 2-битовых дельта-кодов, которая заполняется, начиная с младших битов (2 ≤ N ≤ 16, N - константа). Неиспользуемые биты равны нулю. Входной кадр представляет собой M входных 32-разрядных упакованных отсчетов. По каждому из M входных отсчетов нужно восстановить N целочисленных знаковых отсчетов демодулированной функции. Входные данные выполняется через SPORT с использованием DMA (формат Hex32). Выходной кадр представляет собой MxN 32-разрядных отсчетов. Выходные данные выводятся через SPORT с использованием DMA (формат SignedInteger32). Реализовать покадровую обработку с прерыванием от SPORT по завершению ввода очередного кадра. Критерии оценки 1. Разработан проект, ldf-файл, программа компилируется и правильно работает на тестовой последовательности данных (6 баллов) 2. Реализована цепочечная DMA со схемой организации DMA-буферов типа "пинг-понг" (2 балла). 3. Для каждого тесткейса выполнен расчет минимально допустимых значений делителя тактовой частоты последовательного порта (xDIV) отдельно для ввода и для вывода данных с учетом трудоемкости обработчика прерывания (2 балла). 4. Выполнена оптимизация кода (1 балл). 5. Код структурирован и документирован (1 балл). Упрощенный алгоритм ADPCM Имеются 2 таблицы (константы, ФЗ-формат): StepSizeTbl[10]={7, 8, 10, 12, 15, 20, 25, 32, 40, 50}; AdjustStepTbl[4]={-1, 2, -1, 2}; В таблице шагов модуляции StepSizeTbl содержится множество возможных значений шагов АДИКМ. Из нее по значению переменной индекс_шага выбирается значение текущего шага квантования (переменная шаг). Из таблицы AdjustStepTbl по 2-битовому кодовому слову выбирается приращение значения шага модуляции для декодирования следующего отсчета: - для кодового слова 00b или 10b (минимальное изменение сигнала со знаком "+" или "-") приращение индекса шага равно -1; - для кодового слова 01b или 11b (максимальное изменение сигнала со знаком "+" или "-") приращение индекса шага равно 2. После вычисления значения переменной индекс_шага обязательна проверка на то, что получившееся значение находится в диапазоне от 0 до 9 (размер массива StepSizeTbl) и приведение к этому диапазону, если обнаружен выход за границы массива. Функция декодирования очередного отсчета записывается в следующем виде: Декодировать_отсчет(восст_отсчет, индекс_шага, дельта_код) шаг = StepSizeTbl[индекс_шага]; разность = шаг / 2; если (дельта_код AND 01b) то разность = разность + шаг; если (дельта_код AND 10b) то разность = -разность; восст_отсчет = восст_отсчет + разность; индекс_шага = индекс_шага + AdjustStepTbl[дельта_код]; вернуть восст_отсчет; Начальные значения переменных: - индекс_шага = 0; - восст_отсчет = 0. |