- •1. Задание на проектирование
- •1.1. Задача 1. Реализация ких-фильтра на процессоре tms320c50
- •1.2. Задача 2. Синтез и реализация ких-фильтра на процессоре tms320c50
- •1.3. Задача 3. Реализация бих-фильтра на процессоре tms320c50
- •1.4. Задача 4. Синтез и реализация бих-фильтра на процессоре tms320c50
- •2. Методические указания по выполнению задач
- •2.1.Составление программы
- •2.1.1. Программа реализации ких фильтра
- •2.1.2. Программа реализации бих фильтра
- •2.2.Отладка программы
- •2.3.Получение импульсной характеристики фильтра
- •2.4.Определение максимально возможной частоты дискретизации
- •3. Примеры программ
- •3.1.Программа реализации нерекурсивного фильтра
- •Inport .Set 50h ; параллельный порт, используемый для ввода
- •In inad,inport ; приём отсчета через входной порт
- •3.2. Командный файл компоновки
- •3.3.Программа реализации рекурсивного фильтра
- •3.3.1. Прямая форма
- •In1 .Word 0 ; входной отсчет
- •In inad,inport ; прием отсчета через порт ввода
- •3.3.2. Каноническая форма
- •In1 .Word 0 ; входной отсчет первого звена
- •In inad,inport ; прием отсчета через порт ввода
- •3.3.3. Трансформированная форма
- •In1 .Word 0 ; входной отсчет
- •3.4.Командный файл программного имитатора
- •4. Расчет фильтра с помощью пакета программ fd
- •5. Литература
- •Содержание
2. Методические указания по выполнению задач
2.1.Составление программы
2.1.1. Программа реализации ких фильтра
Пример программы реализации нерекурсивного фильтра с подробными комментариями приведен в разделе 4.1. Программа является заведомо не оптимальной и оставляет простор для творчества. В частности, в ней не используются циклические буферы для коэффициентов и отсчетов фильтра, комбинированные команды типа LTD, MADD.
В программе реализуется ввод отсчетов входного сигнала по прерываниям через параллельный порт процессора. В соответствии с вариантами заданий возможно использование трех внешних прерываний и прерывания по таймеру. Вид прерывания сказывается в программе только на используемой команде перехода в таблице векторов прерывания. (Вид используемого прерывания будет влиять на отладку программы в имитаторе). Подпрограмма прерывания, при выполнении которой производится ввод входного отсчета и вычисление выходного, одинакова для всех типов прерываний.
Программа реализации фильтра состоит из нескольких секций.
Основная программа (секция "Init_main") содержит команды настройки процессора на необходимые режимы работы и бесконечную (пустую) петлю ожидания прихода очередного отсчета входного сигнала (запроса на прерывание). При поступлении запроса происходит переход к выполнению подпрограммы обработки прерывания - производится ввод входного отсчета сигнала и вычисление очередного выходного отсчета фильтра.
Соответственно подпрограмма обработки прерывания содержит следующие основные части.
Секция "Vvod" : ввод отсчета, умножение его на масштабный множитель, запись в буфер отсчетов.
Секция "Filter": вычисление значения выходного отсчета фильтра; при этом производится сдвиг входных отсчетов в буфере, необходимый для правильного вычисления последующего очередного отсчета.
Секция "Vivod": вывод выходного отсчета фильтра, восстановление разрешения прерывания, так как при переходе к обработке прерывания процессор запрещает все маскируемые прерывания; возврат в основную программу для ожидания прихода очередного входного отсчета.
В программе используются три секции данных. Секция .data содержит текущие входной и выходной отсчеты фильтра и масштабный коэффициент. Именованная секция "BUFFER1" содержит коэффициенты фильтра. Именованная секция "BUFFER2" является неинициализированной и резервирует место для хранения предыдущих отсчетов входного сигнала.
В зависимости от варианта задания в программе могут изменяться следующие величины (значения).
Количество коэффициентов N (порядок фильтра).
Значения коэффициентов, записываемые в буфер .sect "BUFFER1". Правило задания коэффициентов директивой .word очевидно из приведенных комментариев.
Значение масштабного множителя MM (секция .data). Если величина масштабного множителя равно 1, то в программе необходимо подставить значение 0,999 или вообще убрать умножение на него.
Размещение секций программы в памяти определяется в командном файле компоновки. Пример командного файла компоновки с подробными комментариями приведен в разделе 4.2. В соответствии с вариантами задания необходимо изменять начальные адреса блоков конфигурируемой памяти системы для размещения секций программы по требуемым адресам. Длина блоков памяти задаётся исходя из оценки длины соответствующих секций с некоторым запасом. Точные значения объема секций можно увидеть в файле таблицы компоновки после её выполнения.
