- •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.1.2. Программа реализации бих фильтра
Примеры программ реализации рекурсивного фильтра второго порядка (состоящего из одного звена второго порядка) в различной форме приведены в разделе 4.3. Эти программы отличаются только реализацией вычисления отсчета фильтра, т.е. реализацией собственно звена второго порядка. Вычисления производятся в соответствии со структурными схемами звеньев, приведенными на рис.4. В программах используются обозначения переменных, совпадающие с переменными на рисунках. Соответствующие фрагменты программ подробно прокомментированы и здесь поясняться не будут.
В программах используется двойная нумерация коэффициентов и переменных. Первый индекс соответствует номеру коэффициента/переменной в фильтре, второй номеру звена. Например, B01 является коэффициентом В0 для первого звена фильтра.
Программы являются заведомо не оптимальными, и оставляет простор для творчества.
В программе реализуется ввод сигнала по прерываниям через параллельный порт процессора. В соответствии с вариантами заданий возможно использование трех внешних прерываний и прерывания по таймеру. Вид прерывания сказывается в программе только на используемой команде перехода в таблице векторов прерывания. (Вид прерывания будет влиять на процесс отладки программы в имитаторе). Подпрограмма прерывания, при выполнении которой производится ввод входного отсчета и вычисление выходного, одинакова для всех типов прерываний.
Программа реализации фильтра состоит из нескольких секций.
Основная программа (секция "Init_main") содержит команды настройки процессора на необходимые режимы работы и бесконечную (пустую) петлю ожидания прихода очередного отсчета входного сигнала (запроса на прерывание). При поступлении запроса происходит переход к выполнению подпрограммы обработки прерывания - производится ввод входного отсчета сигнала и вычисление очередного выходного отсчета фильтра.
Соответственно подпрограмма обработки прерывания содержит следующие основные части.
Секция "Vvod" : ввод отсчета, умножение его на масштабный множитель, запись отсчета во входную ячейку первого звена.
Секция "Filter": вычисление значения выходного отсчета фильтра; при этом производится сдвиг переменных S, необходимый для правильного вычисления последующего очередного отсчета,
Секция "Vivod": вывод выходного отсчета фильтра, восстановление разрешения прерывания, так как при переходе к обработке прерывания процессор запрещает все маскируемые прерывания; возврат в основную программу для ожидания прихода очередного входного отсчета.
В программе используются две секции данных. Секция .data содержит текущие входной и выходной отсчеты всего фильтра и масштабные коэффициенты звеньев. Именованная секция "KOF_VAR" содержит коэффициенты фильтра, промежуточные переменные S и входные/выходные отсчеты отдельных звеньев.
В зависимости от варианта задания в программе могут изменяться следующие величины (значения).
Количество звеньев фильтра.
Значения коэффициентов, записываемые в секцию "KOF_VAR". Правило задания коэффициентов директивой .word очевидно из приведенных комментариев.
Значения масштабных множителей MM звеньев фильтра (секция .data). Если величина масштабного множителя равно 1, то в программе необходимо подставить значение 0,999 или вообще убрать умножение на него.
Если фильтр должен иметь не одно звено, то необходимо сделать следующее.
1. Записать в секцию .data масштабные множители для добавляемых звеньев.
2. Записать в секцию "KOF_VAR" значения коэффициентов и начальные значения переменных для добавляемых звеньев. При этом переменные следует записывать в том же порядке, в каком они записаны для первого звена. Это вызвано тем, что в соответствии с программой производится сдвиг значений промежуточных величин, т.е. передача значения одной переменной из одной ячейки памяти в другую – соседнюю.
3. Добавить в программу команды для реализации второго и последующих звеньев, т.е скопировать команды вычисления выходного отсчета первого звена, изменив обозначения коэффициентов и переменных (например, B01 на B02).
4. Произвести передачу выходного отсчета первого звена на вход второго, умножив его на масштабный множитель. Это можно сделать, например, такими командами:
LT OUT1 ;
LDP #MM2
MPY MM2
LDP #IN2 ;
SPH IN2
При этом необходимо учитывать расположение различных переменных и коэффициентов на различных страницах памяти данных и при необходимости менять текущую страницу. Если масштабные множители равны единице, операцию умножения необходимо убрать, заменив ее передачей значения следующими командами
LACC OUT1
LDP #IN2
SACL IN2
Пример соответствующих команд приведен в комментариях к программам.
5. На вывод в секции “Vivod” необходимо подать выходной отсчет последнего звена.
При синтезе некоторых вариантов фильтра можно получить коэффициенты, значения которых превышают 1. В процессорах с фиксированной запятой используются числа по величине меньше 1. При необходимости использовать коэффициенты больше 1 необходимо проделать следующее:
соответствующие значения коэффициентов, записываемые в .sect "KOF_VAR" уменьшить в 2 раза (если коэффициент не превышает 2),
в части программы, в которой вычисляются значения выходного отсчета звена после команды MPY умножения на уменьшенный в 2 раза коэффициент вставить вторую команду добавления произведения APAC; это скомпенсирует уменьшение коэффициента в два раза.
Размещение секций программы в памяти определяется в командном файле компоновки. Пример командного файла компоновки с подробными комментариями приведен в разделе 4.2. В соответствии с заданием необходимо изменять начальные адреса блоков конфигурируемой памяти системы для размещения секций программы по требуемым адресам. Длина блоков памяти задаётся исходя из оценки длины соответствующих секций с некоторым запасом. Точные значения объема секций можно увидеть в таблице компоновки после её выполнения. Естественно, необходимо обратить внимание на то, что в примере командного файла приведены имена секций для КИХ-фильтра. В программе БИХ фильтра имена секций отличаются.
