
- •Содержание
- •Лекционный курс модуль Вводный
- •1. Цели и задачи курса
- •2. Микропроцессор и микропроцессорная система
- •3. Основные понятия и определения
- •4. Характеристики микропроцессоров
- •5. Классификация микропроцессоров
- •6. Эволюция микропроцессоров
- •Модуль I. Организация микропроцессорной системы
- •1. Основные типы архитектур микропроцессорных систем. Фон-неймановская (принстонская) и гарвардская архитектуры. Организация пространств памяти и ввода-вывода.
- •5. Прямой доступ к памяти. Организация прямого доступа к памяти. Контроллер пдп.
- •6. Память микропроцессорной системы. Функции памяти. Архитектура и иерархия памяти. Организация кэш-памяти. Виртуальная память.
- •Увеличение разрядности основной памяти
- •Память с расслоением
- •Использование специфических свойств динамических зупв
- •Страничная организация памяти
- •Сегментация памяти
- •Модуль II. Универсальные микропроцессоры
- •1. Определение понятия «архитектура». Архитектура системы команд. Классификация процессоров cisc и risc. Определение понятия "архитектура"
- •Архитектура системы команд. Классификация процессоров (cisc и risc)
- •2. Методы адресации и типы данных. Типы команд. Команды управления потоком команд. Методы адресации
- •Типы команд
- •Команды управления потоком команд
- •3. Конвейеризация и параллелизм. Конвейерная организация обработки данных. Простейшая организация конвейера и оценка его производительности.
- •Простейшая организация конвейера и оценка его производительности
- •Конфликты по данным, остановы конвейера и реализация механизма обходов
- •Классификация конфликтов по данным
- •Конфликты по данным, приводящие к приостановке конвейера
- •Методика планирования компилятора для устранения конфликтов по данным
- •Сокращение потерь на выполнение команд перехода и минимизация конфликтов по управлению
- •Снижение потерь на выполнение команд условного перехода
- •5. Проблемы реализации точного прерывания в конвейере. Обработка многотактных операций и механизмы обходов в длинных конвейерах Проблемы реализации точного прерывания в конвейере
- •Обработка многотактных операций и механизмы обходов в длинных конвейерах
- •Конфликты и ускоренные пересылки в длинных конвейерах
- •Поддержка точных прерываний в длинных конвейерах
- •Параллелизм уровня команд: зависимости и конфликты по данным
- •Параллелизм уровня цикла: концепции и методы
- •Основы планирования загрузки конвейера и разворачивание циклов
- •7. Зависимости. Классификация зависимостей и их применение. Устранение зависимостей по данным и механизмы динамического планирования. Зависимости. Их классификация и применение.
- •Устранение зависимостей по данным и механизмы динамического планирования Основная идея динамической оптимизации
- •Динамическая оптимизация с централизованной схемой обнаружения конфликтов
- •Другой подход к динамическому планированию - алгоритм Томасуло
- •Дальнейшее уменьшение приостановок по управлению: буфера целевых адресов переходов
- •9. Одновременная выдача нескольких команд для выполнения и динамическое планирование.
- •10. Архитектура машин с длинным командным словом (vliw). Средства поддержки большой степени распараллеливания.
- •Средства поддержки большой степени распараллеливания
- •Обнаружение и устранение зависимостей
- •Программная конвейеризация: символическое разворачивание циклов
- •Трассировочное планирование
- •Аппаратные средства поддержки большой степени распараллеливания
- •Условные команды
- •Выполнение по предположению (speculation)
- •11. Архитектура epic.
- •Модуль III. Микроконтроллеры и специализированные микропроцессоры
- •2. Специализированные микропроцессоры. Цифровые процессоры обработки сигналов.
- •Модуль Заключительный Перспективы развития микропроцессорной техники.
- •Лабораторный курс
- •7 Семестр. Лабораторная работа 1.
- •Лабораторная работа 2.
- •Лабораторная работа 3.
- •Лабораторная работа 4.
- •8 Семестр. Лабораторная работа 1.
- •1. Общие сведения
- •2. Настройка и запуск Code Composer Studio (simulation)
- •3. Особенности проектирования в иср Code Composer Studio
- •4. Реализация проекта в иср Code Composer Studio
- •5. Тестирование проекта в иср Code Composer Studio
- •6. Аппаратная реализация проекта в иср Code Composer Studio
- •Лабораторная работа 2.
- •1. Подключение файлов ввода/вывода с помощью точек зондирования
- •2. Работа с файлами по средствам функций языка с
- •3. Работа с dsp/bios для генерации звукового сигнала платой dsk5510
- •Лабораторная работа 3.
- •1 Цифровая фильтрация
- •2. Реализация ких фильтра на симуляторе dsk5510
- •3. Реализация ких фильтра на dsk5510 для фильтрации звукового сигнала в реальном времени.
- •Лабораторная работа 4.
- •1. Фильтры с бесконечной импульсной характеристикой – бих
- •2. Реализация бих фильтра на симуляторе dsk5510
- •3. Реализация бих фильтра на dsk5510 для фильтрации звукового сигнала в реальном времени.
- •Оценка работы студентов. Рейтинговая система.
- •1. Общие положения
- •2. Организация рейтингового контроля успеваемости студентов дневной формы обучения
- •3. Выставление оценок по рейтинговой системе
- •4. Организация рейтингового контроля успеваемости студентов заочной формы обучения
- •Учебно-методические материалы Основная литература
- •Дополнительная литература
2. Реализация ких фильтра на симуляторе dsk5510
Программная реализация
Создать проект под названием «exp_1», в предварительно созданной папке «laba_3».
Создать и добавить к проекту файл «filter.h», в соответствии с листингом 2.1. Исходный код разработан в соответствии, с алгоритмом рассмотренном в разделе 1 и снабжен построчным комментарием, поэтому рассмотрен не будет.
Листинг 2.1 – Листинг файла «filter.h»
#include <stdio.h>
#define LENBUF 120 #define LENFILTER 16
//входной буфер int inp_buf[LENBUF]; //коэффициенты фильтра умноженные на число 512 int coeffBuff[]={0,0,2,8,23,50,84,108,108,84,50,23,8,2,0,0}; //выходной буфер int out_buf[LENBUF]; //буфер линии задержки int SimplBuff[LENFILTER]; //вспомогательная переменная int coeff; //счетчики int count; int count_run; int count_con; //функция запуска фильтрации int run_filter() { for(count_run=0;count_run<LENBUF;count_run++) { //чтение входного отсчета coeff=inp_buf[count_run]; //запись текущего отсчета в линию задержки SimplBuff[0]=coeff; //запуск функции свертки сигнала coeff=convolution(); //запись в выходной буфер отфильтрованного сигнала out_buf[count_run]=coeff; } return 0; } //функция осуществляющая свертку сигнала int convolution() { //вспомогательные переменные long int coeff_mx; long int summ; long int tmp1,tmp2;
summ=0; for(count_con=0;count_con<LENFILTER;count_con++) { //чтение текущего отсчета из линии задержки tmp1=SimplBuff[count_con]; //чтение коэффициента фильтра tmp2=coeffBuff[count_con]; //перемножение отсчета с коэффициентом фильтра coeff_mx=tmp1*tmp2; //накопление результата summ +=coeff_mx; } //цикл сдвига линии задержки на единицу вправо for(count_con=LENFILTER-1;count_con>0;count_con--) { SimplBuff[count_con]=SimplBuff[count_con-1]; } //деление накопленного результат на число 512, т. к. коэффициенты //филтра были умножены на число 512 summ >>=9; return summ; } //функция очистки линии задержки void ClearSimpleBuff() { for(count=0;count<LENFILTER;count++) SimplBuff[count]=0; } |
Коэффициента фильтра рассчитанные для нормированной частоты среза 0.0773:
Таблица 2.1 – Значение коэффициентов КИХ фильтра.
№ |
Дробное значение |
Значение, умноженное на число 512 |
Округление |
B1 |
0 |
0 |
0 |
B2 |
0.0005 |
0.256 |
0 |
B3 |
0.0034 |
1.7408 |
2 |
B4 |
0.0149 |
7.6288 |
8 |
B5 |
0.0446 |
22.8352 |
23 |
B6 |
0.0982 |
50.2784 |
50 |
B7 |
0.1637 |
83.8144 |
84 |
B8 |
0.2104 |
107.7248 |
108 |
B9 |
0.2104 |
107.7248 |
108 |
B10 |
0.1637 |
83.8144 |
84 |
B11 |
0.0982 |
50.2784 |
50 |
B12 |
0.0446 |
22.8352 |
23 |
B13 |
0.0149 |
7.6288 |
8 |
B14 |
0.0034 |
1.7408 |
2 |
B15 |
0.0005 |
0.256 |
0 |
B16 |
0 |
0 |
0 |
Умножение коэффициентов фильтра на число 512 и округление, вызвано тем, что операции с дробными числами (с плавающей точкой) производятся с очень большими затратами времени. Увеличение времени вычисления приводит к ухудшению качества отфильтрованного потока звука. Константа 512 выбрана вследствие того, что это число можно представить как 29, а это означает, что накопленный результат умножения с накоплением достаточно побитно сдвинуть вправо на 9 разрядов оператором «>>=», и это будет соответствовать делению суммы на константу 512.
В файле «filter.h» реализованы следующие функции:
Таблица 2.2 – Функции реализованные в файле «filter.h»
Функции |
Описание |
int run_filter() |
Заносит входной отсчет в линию задержки и запускает функцию свертки. |
int convolution() |
Осуществляет непосредственно процедуру свертки. |
void ClearSimpleBuff() |
|
Создать и добавить к проекту файл «main.c», в соответствии с листингом 2.2.
Листинг 2.2 – Листинг файла «main.c»
#include "filter.h" //вспомогательная переменная int len; //указатели на входной и выходной файлы FILE *inFile; FILE *outFile; //заголовок wav файла char wavHD[44]; int main (void) { //очистка линии задержки ClearSimpleBuff(); //открытие входного и выходного файла inFile = fopen("..\\data\\coldplay_in.wav", "rb"); outFile = fopen("..\\data\\coldplay_out.wav", "wb"); //проверка корректности открытия выходного файла if(outFile == NULL) { printf("ERROR, OUT FILE\n"); return 1; } //чтение заголовка входного файла fread(wavHD, sizeof(char), 44, inFile); //запись заголовка в выходной файл fwrite(wavHD, sizeof(char), 44, outFile); //Создание единичного импульса for(len=0;len<LENBUF;len++) inp_buf[len]=0; inp_buf[0]=512; run_filter(); /* len=LENBUF; while(len == LENBUF) { //считать данные из файла len = fread(inp_buf,1, LENBUF, inFile); //вызов функции обработки (фильтрации) входного буфера run_filter(); //запись данных в файл fwrite(out_buf, 1, len, outFile); } */ return 0; } |
Здесь, закомментирован цикл считывания данных из входного файла «coldplay_in.wav», для того, чтобы построить импульсную характеристику фильтра. Для построения импульсной характеристики, входной буфер сначала обнуляется в цикле, а затем первому отсчету (нулевому) присваивается значение 512, т. к. коэффициенты умножены на число 512.
Все остальные файлы проекта создаются по аналогии с предыдущими работами. В таблице 2.3, приведен список файлов проекта.
Таблица 2.3 – Файлы проекта.
Файлы |
Описание |
main.c |
Главный связывающий файл. |
lnk.cmd |
Файл компоновщика. |
filter.h |
Заголовочный файл реализующий фильтрацию |
exp_1.pjt |
Файл проекта |
coldplay_in.wav |
Входной звуковой файл, располагается в папке проекта в каталоге «data». |
coldplay_out.wav |
Выходной звуковой файл, располагается в папке проекта в каталоге «data». |
Необходимо скомпилировать проект.
Тестирование КИХ фильтра
Необходимо открыть окно визуализации данных для входного и выходного буфера, с настройками, которые показаны на рисунке 2.1, и минимизировать оба окна визуализации, сняв флажок с опции «Float In Main Window» в контекстном меню окна. Эти действия необходимы для построения графика входного сигнала (единичного импульса) и графика реакции КИХ фильтра на импульсное воздействие.
Рисунок 2.1 – Настройки окон визуализации.
Следующим шагом следует запустить проект на исполнение, после завершения работы программы вид ИСР CCS станет таким, как показано на рисунке 2.2.
Рисунок 2.2 – Построение импульсной характеристики фильтра.
Для просмотра содержимого памяти выделенной под выходной буфер, необходимо открыть окно просмотра содержимого памяти, и в настройках указать начальный адрес просмотра «out_buf», рисунок 2.3.
Рисунок 2.3 – Настройка окна просмотра содержимого памяти.
Показателем корректной работы фильтра является то, что в выходном буфере содержаться коэффициенты фильтра.
Не закрывая окон визуализации необходимо закомментировать участок кода в файле «main.c», который отвечает за формирование единичного импульса, и раскомментировать цикл чтения данных из входного файла, фильтрацию и сохранение результата.
Установите точку прерывания в строке запуска функции фильтрации, файл «main.c».
Перекомпилируйте проект и запустите на выполнение, окно ИСР CCS примет вид как показано на рисунке 2.4.
Рисунок 2.4 – Построение осциллограммы входного и выходного файла.
Признаком успешной работы фильтра является более гладкая кривая на осциллограмме выходного сигнала, нежели входного сигнала, на рисунке 2.4 выходная осциллограмма располагается снизу. Т. к. частота дискретизации входного файла соответствует 8000 Гц, то частота среза фильтра будет рассчитываться следующим образом: 8000*0.0773≈618.2 Гц.
В процессе работы программы убрать точку прерывания и дать программе закончить вычисления, на это потребуется некоторое время. В процессе работы программы размер выходного файла будет постоянно увеличиваться, а по завершении станет равным размеру входного.
Запустить приложение «Общая громкость (Регулятор громкости)», которое располагается: «Пуск→Стандартные→Развлечения». Выбрать раздел «Параметры→Свойства», рисунок 2.5.
Рисунок 2.5 – Регулятор громкости звука системы Windows.
В появившемся окне в разделе «Микшер», нужно выбрать устройство ввода звука, на рисунке 2.6 это устройство «Realtek HD Audio Input» и нажать кнопку «OK».
Рисунок 2.6– Свойства регулятора громкости.
Окно регулятора громкости станет таким как показано на рисунке 2.7
Рисунок 2.7 – Регулятор громкости для входного звукового сигнала.
Теперь нужно выбрать «громкость линейного входа», установив галочку. После этого система Windows будет воспринимать входной звуковой сигнал с линейного входа звуковой карты.
В линейный вход звуковой карты вставить разветвитель, аналогичный тому, что показан на рисунке 2.8. Как правило, линейный вход на звуковой карте голубого цвета.
Рисунок 2.8 – Звуковой разветвитель.
Звуковым кабелем «папа-папа» соединить одно гнездо разветвителя с линейным выходом, а в оставшееся свободное гнездо разветвителя вставить колонки (наушники).
Запустить программу «TES2.EXE», с помощью которой будет строиться спектрограмма, рисунок 2.9. Эта программа анализирует входной звуковой сигнал, в данном случае сигнал с линейного входа.
Рисунок 2.9 – Внешний вид программы TES2.
Теперь нужно нажать кнопку
и воспроизвести любым проигрывателем входной звуковой фай «coldplay_in.wav». Вид программы TES2 будет аналогичен тому, что показан на рисунке 2.10.
Рисунок 2.10 – Спектр входного звукового файла.
Тем же проигрывателем воспроизвести выходной файл, рисунок 2.11
Рисунок 2.11 – Спектр выходного звукового файла.
Из рисунка отчетливо видна частота среза, которая соответствует заданным характеристикам КИХ фильтра.