- •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. Литература
- •Содержание
In inad,inport ; прием отсчета через порт ввода
* умножение входного отсчета на масштабный множитель
LT INAD
MPY MM1
LDP #IN1
SPH IN1 ; запись отсчета во входную ячейку первого звена
*при значении множителя ММ=1 необходимо убрать умножение на него;
* для этого вместо последних 4-х команд вставить команды
* LACC INAD
* LDP #IN1
* SACL IN1
.sect "Filter"
* программа реализации фильтра - вычисление выходного отсчета
ZAP ;
LT IN1
MPY B01 ; (Xn) = (IN1), (PREG) = (Xn)*(B01)
LTA S11 ; (X(n-1)) -> T, предыдущее (PREG)+(ACC) -> ACC
MPY B11 ; (PREG) = (X(n-1))*(B11)
LTA S21 ; (X(n-2)) -> T, предыдущее (PREG)+(ACC) -> ACC
MPY B21 ; (PREG) = (X(n-2))*(B21)
LTA S31 ; (Y(n-1)) -> T, предыдущее (PREG)+(ACC) -> ACC
MPY A11 ; (PREG) = (Y(n-1))*(A11)
LTA S41 ; (Y(n-2)) -> T, предыдущее (PREG)+(ACC) -> ACC
MPY A21 ; (PREG) = (Y(n-2))*(A11)
APAC ; предыдущее (PREG)+(ACC) -> ACC
SACH OUT1 ; сохранение выходного отсчета
DMOV S31 ; сдвиг (S31) -> S41
DMOV OUT1 ; сдвиг (OUT1) -> S31
DMOV S11 ; сдвиг (S11) -> S21
DMOV IN1 ; сдвиг (IN1) -> S11
.sect "Vivod"
; Вывод выходного отсчета фильтра
LACC OUT1
LDP #OUTAD
SACL OUTAD
OUT OUTAD,OUTPORT
CLRC INTM ; разрешение прерывания для следующего отсчета
RET
.end
3.3.2. Каноническая форма
Структурная схема звена второго порядка в канонической форме приведена на рис. 4.б. Обозначения переменных, используемые в программе, соответствуют обозначениям на этом рисунке.
* Программа реализации БИХ фильтра в канонической форме
.version 50
.global BUFFER2
.mmregs
* Задание значений символов, используемых в программе
OUTPORT .set 51h
INPORT .set 50h
.data
; данные для фильтра
INAD .word 0
OUTAD .word 0
MM1 .word 32768*74/100 ; масштабный множитель первого звена 0,74
.sect "KOF_VAR"
; Коэффициенты фильтра, к-ты Ai записываются с противоположным знаком
; Первое звено
B01 .word 32768*2793/10000 ; B01 = 0,2793
B11 .word (32768*307/10000) ; B11 = 0,0307
B21 .word 32768*2793/10000 ; B21 = 0,2793
A11 .word 32768*5586/10000 ; A11 = 0,5586
A21 .word -(32768*8289/10000) ; A21 = -0,8289
; переменные фильтра
; Первое звено
In1 .Word 0 ; входной отсчет первого звена
S11 .word 0 ; промежуточное значение
S21 .word 0 ; задержанное на такт промежуточное значение
S31 .word 0 ; задержанное на 2 такта промежуточное значение
OUT1 .word 0 ; выходной отсчет первого звена
.sect "Vectors"
* Таблица векторов прерываний
B START
B BEGIN ; INT1 внешние прерывания
B BEGIN ; INT2
B BEGIN ; INT3
B BEGIN ; TINT прерывание по таймеру
.sect "Init_main"
* Инициализация процессора и основная программа
START:
* установка режимов работы
SETC INTM ; запрет прерываний на время установки режимов работы
CLRC OVM ; режим переполнения
SPM 1 ; режим сдвига значений при передаче (PREG) -> АЛУ
SETC SXM ; режим расширения знака
LDP #0 ; установка разрешения необходимых прерываний
SPLK #0Fh,IMR
CLRC INTM ; разрешение прерываний
LOOP:
NOP ; основная программа – бесконечная петля ожидания
; прихода запроса на прерывание
B LOOP
* подпрограмма прерывания, которая состоит из трёх основных частей
.sect "Vvod"
* прием очередного отсчета
BEGIN:
* ввод отсчета
LDP #INAD
