Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦПОС - Методические указания к курсовому проект...doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
960.51 Кб
Скачать

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. В соответствии с заданием необходимо изменять начальные адреса блоков конфигурируемой памяти системы для размещения секций программы по требуемым адресам. Длина блоков памяти задаётся исходя из оценки длины соответствующих секций с некоторым запасом. Точные значения объема секций можно увидеть в таблице компоновки после её выполнения. Естественно, необходимо обратить внимание на то, что в примере командного файла приведены имена секций для КИХ-фильтра. В программе БИХ фильтра имена секций отличаются.