Е
|
3
|
Период ввода
входных сигналов /такты/
|
1500
|
Для выполнения задачи 1 необходимо сделать следующее:
. Написать программу реализации фильтра по схеме (рис1.) в
соответствии с кодом варианта задания. Во всех фильтрах используется частота
дискретизации 8кГц.
. Отладить написанную программу на имитаторе процессора.
. Снять импульсную характеристику полученного фильтра,
используя в качестве входного сигнала единичный импульс. Критерием правильности
функционирования программы будет совпадение значений полученной импульсной
характеристики с заданными коэффициентами фильтра с учетом введенного на входе
масштабного множителя (для совпадения коэффициенты должны быть умножены на ММ).
. Используя пакет синтеза фильтров FD, получить импульсную
характеристику заданного фильтра и сравнить ее с характеристикой, снятой в
имитаторе при выполнении разработанной программы.
фильтр алгоритм процессор
5. Определить в имитаторе время вычисления выходного отсчета
фильтра (в тактах) и рассчитать максимально возможную частоту дискретизации
входного сигнала проектируемого фильтра.
1.2
Структурная схема
Рис.1. Структурная схема реализации КИХ-фильтра.
Обозначения:
Z^-1 - элемент задержки;
ММ - масштабный множитель;
bi - коэффициенты фильтра;
X (n) - входной отсчет сигнала;
Y (n) - выходной отсчет сигнала;
1.3 Блок-схема
алгоритма
1.4 Исходный
текст программы на языке ассемблера с комментариями
; Реализация КИХ фильтра (N-1) порядка (19
коэффициентов)
. version 50
. global BUFFER2
. mmregs
; Задание значений символов, используемых в программе
N. set 19; к-во коэффициентов фильтра
OUTPORT. set 51h; параллельный порт, используемый для вывода отсчетов фильтра
INPORT. set 50h; параллельный порт, используемый для ввода отсчетов сигнала
. data
; данные для фильтра
INAD. word 0. word 0. word 32768*850/1000;
масштабный множитель на входе 0.85
. sect "Vectors"
; Таблица векторов прерываний
B START BEGIN; INT1 внешние прерывания
B BEGIN; INT2BEGIN; INT3 BEGIN; TINT прерывание по таймеру
. sect "Initmain"
; Инициализация процессора и основная программа
START:
; установка режимов работы
SETC INTM; запрет прерываний на время установки режимов
работы
CLRC OVM; режим переполнения
SPM 1; режим сдвига значений при передаче (PREG) - АЛУ
SETC SXM; режим расширения знака
LDP #0; установка разрешения необходимых прерываний
SPLK #1000h,PRD; ввод таймера#1000,TIM#08h, IMR
CLRC INTM; разрешение прерываний
LOOP:; основная программа - бесконечная петля ожидания
прихода запроса на; прерывания
B LOOP
; подпрограмма прерывания, которая состоит из трех основных частей
. sect "Vvod"
; прием очередного отсчета
BEGIN:#0 # (N-2),BRCR; установка повторений блока команд
LDP #INAD INAD, INPORT; прием отсчета через
входной порт
; умножение отсчета на ММ
LT INADMM#BUFFER2 BUFFER2; запись отсчета в буфер
. sect "Filter"
; программа реализации фильтра
LAR AR1,# (BUFFER1+N-1); загрузка начального адреса коэффициентов в AR1
MAR *,AR1; установка текущего ARn
ZAP; (PREG) = (ACC) = 0
RPTB B_END-1; задание блока команд для повторения
LT *-,AR2; к-т B - регистр Т, начиная с B (n-1)
MPYA *-; В*Х - PREG; предыдущее (PREG) добавляется к (ACC)
DMOV *,AR1; сдвиг отсчета Х в буфер, необходимый для
вычисления следующего; выходного значения фильтра Y
B_END:
; перемножение и добавление в ACC последнего произведения
В*Х без сдвига Х
LT *,AR2*#OUTAD OUTAD; сохранение полученного
выходного отсчета
. sect "Vivod"
; вывод выходного отсчета фильтра
OUT OUTAD,OUTPORT INTM; разрешение прерывания
для приема следующего отсчета
RET
; резервирование памяти для хранения входных отсчетов
. sect "BUFFER2"2. space N*16
; секция данных с к-тами фильтра, начиная с b0
. sect "BUFFER1"
. word32768*51/10000
. word- (32768*478/10000)
. word- (32768*410/10000)
. word- (32768*596/10000)
. word32768*854/10000
. word32768*1223/100000
. word- (32768*846/10000)
. word- (32768*1903/100000)
. word32768*350/10000
. word32768*2196/100000
. word32768*350/10000
. word- (32768*1903/100000)
. word- (32768*846/10000)
. word32768*1223/100000
. word32768*854/10000
. word- (32768*596/10000)
. word- (32768*410/10000)
. word- (32768*478/10000)
. word32768*51/10000
. end
1.5 Командный
файл компоновки
; Командный файл компоновки для КИХ фильтра
v0; версия нулеваяRESET; задание начального адреса счетчика
программ после загрузкиFIR. map; имя файла с таблицей компоновкиFIR. out;
имя выходного файла. obj; имена компонуемых файлов
; задание конфигурации памяти проектируемой системы
{
; определение блоков в памяти программ с заданием их
начальных адресов и длины, блоки; не должны перекрываться0:: origin = 0x0000,
length = 0x0040
PROG: origin = 0x0040, length = 0x0300
; определение блоков в памяти программ с заданием их
начальных адресов и длины, блоки; не должны перекрываться1:
; предопределенный блок памяти для размещения регистров
процессора, отраженных на; память: origin = 0x0000, length = 0x0060
; выделенные блоки в памяти данных для размещения секций
исходной программы: origin = 0x0480, length = 0x0100: origin = 0x0240, length =
0x0100: origin = 0x0340, length = 0x0100
}
; указания по размещению секций программы в блоках заданной
выше памяти системы
{
; размещение секции Vectors в блоке памяти программ VECS начиная с начального
адреса; блока: {}>VECS PAGE 0
; секции программы Init_main, Vvod, Filter, Vivod размещаются в блоке памяти программ; PROG в друг за другом в
указанном порядке начиная с начального адреса блока; они; образуют чисто
условный модуль MAIN в выходном файле: {* (Initmain)
* (Vvod)
* (Filter)
* (Vivod) }> PROG PAGE 0
; различные секции данных исходной программы размещаются в
выделенных блоках; памяти данных
. data: {}>BLOCK0 PAGE 1: {}>BLOCK1 PAGE 1:
{}>BLOCK2 PAGE 1
}
1.6
Командный файл программного имитатора
ma 0,0,0x1000,ram; определение ПП типа RAM с адресами 0-0х1000
ma 0,1,0x05f,ram; определение ПП типа RAM с адресами 0-0х05f
ma 0x100,1,0x400,ram; ПД типа RAM с адресами 0х100-0х4ff, блоки внутреннего; DARAM B0, B1
ma 0x800,1,0x1200,ram; Внешняя ПД с адресами 0х800 - 0хfff
; Команды задания входного\выходного параллельных портов
; и подключения к ним
; файлов для чтения и записи
ma 0x50,2,1, iport0x51,2,1,oport0x50,2, infile.
dat,READ0x51,2,outfile. dat,WRITE
; pincINT1,t_int. dat. bat; загрузка файла с
командами имитатора
loadFIR. out; загрузка исполняемой программы
? PC=0x00; установка начального значения программного счетчика
mem 0x0480; формирование и задание начальных адресов трех окон
памяти0x2800X380
1.6 Таблица
значений импульсной характеристики
Номер отсчета
|
Задано
|
Получено /OUTFILE. DA/
|
OUTFILE.
DA * MM
|
1
|
0.00517338
|
4.302978515625E-003
|
0.00517
|
2
|
-0.04783066
|
-4.06494140625E-002
|
-0.04784
|
3
|
-0.04100188
|
-3.485107421875E-002
|
-0.041
|
4
|
-0.05968966
|
-5.06591796875E-002
|
-0.05968
|
5
|
0.08542713
|
7.257080078125E-002
|
0.0853
|
6
|
0.12231730
|
1.0345458984375E-002
|
0.1223
|
7
|
-0.08467900
|
-7.1929931640625E-002
|
-0.0847
|
8
|
-0.19031033
|
-1.617431640625E-002
|
-0.1903
|
9
|
0.03508036
|
2.972412109375E-002
|
0.035
|
10
|
0.21961315
|
1.8646240234375E-002
|
0.219
|
11
|
0.03508036
|
2.972412109375E-002
|
0.035
|
12
|
-0.19031033
|
-1.617431640625E-002
|
-0.1904
|
13
|
-0.08467900
|
-7.1929931640625E-002
|
-0.0847
|
14
|
0.12231730
|
1.0345458984375E-002
|
0.1224
|
15
|
0.08542713
|
7.257080078125E-002
|
0.0854
|
16
|
-0.05968966
|
-5.06591796875E-002
|
-0.05969
|
17
|
-0.04100188
|
-0.041
|
18
|
-0.04783066
|
-4.06494140625E-002
|
-0.04784
|
19
|
0.00517338
|
4.302978515625E-003
|
0.00517
|
В данном случае (при воздействии на входе КИХ-фильтра
тестового сигнала в виде единичного импульса) отсчеты ИХ фильтра равны
соответствующим коэффициентам фильтра.
1.7 Расчет
максимально возможной частоты дискретизации
Количество тактов подпрограммы обслуживания прерывания: n=747.
Длительность одного такта: T =50 нс.
Время выполнения программы: tвып = T *
n / 8=4.67
мкс
Максимально возможная частота дискретизации f=1/ tвып =214 кГц.
2. Реализация
БИХ фильтра на процессоре TMS320C50
2.1 Вариант
кода задания
Разряд А определяет номер решаемой задачи. А=3: данная задача
предусматривает разработку и отладку программы реализации на процессоре TMS320C50 цифрового фильтра с
бесконечной импульсной характеристикой. Разряд В определяет исходные данные для
программы фильтра: коэффициенты bi и масштабные множители двух звеньев m
B=7
|
Звено 1
|
Звено 2
|
b0=0.3245
|
b0=0.3245
|
b1=0.0000
|
b1=0.4918
|
b2=-0.3245
|
b2=0.3245
|
a0=1.0000
|
a0=1.0000
|
a1=0.2776
|
a1=0.4167
|
a2=0.6399
|
a2=0.8322
|
m=0.5403
|
m=0.9500
|
Разряд С определяет размещение секций программ в памяти
процессора.
С
|
2
|
Коды программ
(память программ)
|
100
|
Данные -
секция. data (память данных)
|
180
|
Коэффициенты и
переменные (память данных)
|
300
|
Разряд D определяет тип прерываний, используемый для ввода отсчета
сигнала.
D
|
4
|
Прерывание по
таймеру
|
TINT
|
Разряд Е определяет период прерываний (период ввода отсчетов
сигнала).
Е
|
2
|
Период ввода
входных сигналов, такты
|
1200
|
Разряд F определяет номер структуры звеньев фильтра, F=6, номер структуры - 2,
каноническая форма реализации.
Для выполнения задачи необходимо сделать следующее:
. Написать программы реализации БИХ-фильтра в виде
последовательного соединения звеньев заданной структуры.
. Отладить написанную программу с помощью имитатора
процессора.
. Используя пакет синтеза фильтров FD, получить импульсную
характеристику заданного фильтра и составить таблицу значений.
. Снять импульсную характеристику полученного фильтра в
имитаторе процессора, используя в качестве входного сигнала единичный импульс.
. Определить в имитаторе время вычисления выходного отсчета
фильтра (в тактах) и рассчитать максимальную возможную частоту дискретизации
входного сигнала для данного фильтра.
Обозначения:
X (n) - входной отсчет сигнала
Y (n) - выходной отсчет сигнала
2.3 Алгоритм
2.4 Исходный
текст программы на языке ассемблера с комментариями
; Программа реализации БИХ фильтра в транспонированной форме
. version 50
. global BUFFER2
. mmregs
; Задание значений символов, используемых в программе
OUTPORT. set51h. set50h
. data
; данные для фильтра. word0. word0. word 32768*5403/10000;
масштабный множитель первого звена 0.5403. word 32768*9500/10000; масштабный
множитель первого звена 0.95
. sect"KOFVAR"
; коэффициенты первого звена
B01. word32768*3245/10000. word32768*1/10000.
word- (32768*3245/10000). word32768*2776/10000. word- (32768*6399/10000)
; второе звено
B02. word32768*3245/10000. word32768*4918/10000.
word32768*3245/10000. word- (32768*4167/10000). word- (32768*8322/10000)
; переменные фильтра
; первое звено. word 0; входной отсчет. word 0; промежуточное
значение. word 0; промежуточное значение. word 0; промежуточное значение. word
0; выходной отсчет звена
; второе звено. word 0; входной отсчет. word 0; промежуточное
значение. word 0; промежуточное значение. word 0; промежуточное значение. word
0; выходной отсчет звена
. sect "Vectors"
; Таблица векторов прерыванийSTART; INT1 внешние прерывания;
INT2; INT3; TINT прерывание по таймеру
. sect"Initmain"
; Инициализация процессора и основная программа:
; установка режимов работы; запрет прерываний на время
установки режимов работы; режим переполнения; режим сдвига значений при
передаче (PREG) - >АЛУ; режим расширения знака#0; установка разрешения
необходимых прерываний
SPLK#1200,PRD; вводим таймер#1200,TIM; таймер
SPLK#08h, IMR; с интервалом 2000 тактов:; основная программа
- бесконечная петля ожидания
; прихода запроса на прерывание
; подпрограмма прерывания, которая состоит из трех основных
частей
. sect"Vvod":
; ввод отсчета#INAD
ININAD, INPORT
; умножение входного отсчета на ММ
LT INAD#IN1
SPHIN1
. sect "Filter"
; вычисление выходного отсчета
ZAP; (ACC) = (PREG) = 0S31; (S31) - > регистр TB21; (S31) *
(B21) - > PREGS21; предыдущее (PREG) + (ACC) - > ACC, (S21) - > T
MPY B11; (S21) * (B11) - > PREG
APAC; предыдущее (PREG) + (ACC) - >
ACC; (ACC) <-> буфер BCC
LACCIN1,16; (IN1) - > ACC
LT S31; (S31) - >T; (S31) * (A21) - > PREG;
предыдущее (PREG) + (ACC) - > ACC, (S21) - > T
MPYA11; (S21) * (A11) - > PREG;
предыдущее (PREG) + (ACC) - > ACC
SACHS11; сохранение S11S11; (S11) - > T
MPYB01; (S11) * (B01) - > PREG
EXAR; (ACC) <-> буфер BCC
APAC; предыдущее (PREG) + (ACC) - > ACC
SACH OUT1; сохранение выходного отчетаS21; сдвиг (S21) - > S31S11; сдвиг (S11) - > S21
; 2-ое звено
LT OUT1; (OUT1) - > регистр T
LDP #MM2MM2#IN2IN2S32B22S22B12,16S32S12OUT2S22S1
. sect "Vivod"
; Вывод выходного отсчета фильтра
LACCOUT2#OUTAD
OUT OUTAD,OUTPORT; разрешение прерывания до следующего
отсчета
. end
2.5 Командный
файл компоновки
; Командный файл компоновки для КИХ фильтра; версия
нулеваяRESET; задание начального адреса счетчика программ после загрузкиIIR. map; имя файла с
таблицей компоновкиIIR. out; имя выходного файла
IIR. obj; имена компонуемых файлов
; задание конфигурации памяти проектируемой системы
{
; определение блоков в памяти программ с заданием их
начальных адресов и длины, блоки; не должны перекрываться
PAGE 0:: origin = 0x0000, length = 0x0040: origin
= 0x0040, length = 0x0300
; определение блоков в памяти программ с заданием их
начальных адресов и длины, блоки; не должны перекрываться1:
; предопределенный блок памяти для размещения регистров
процессора, отраженных на; память: origin = 0x0000, length = 0x0060
; выделенные блоки в памяти данных для размещения секций
исходной программы
BLOCK0: origin = 0x0100, length = 0x0100: origin
= 0x0200, length = 0x0100
}
; указания по размещению секций программы в блоках заданной
выше памяти системы
{
; секции программы Init_main, Vvod, Filter, Vivod размещаются в блоке памяти программ; PROG в друг за другом в
указанном порядке начиная с начального адреса блока; они; образуют чисто
условный модуль MAIN в выходном файле
Main: {* (Initmain)
* (Vvod)
* (Filter)
* (Vivod)
}> PROG PAGE 0
; различные секции данных исходной программы размещаются в
выделенных блоках; памяти данных
. data: {}>BLOCK0 PAGE 1: {}>BLOCK1 PAGE 1
}
2.6 Командный
файл программного имитатора
0,0,0x1000,ram; Определение ПП типа RAM с адресами 0-0х1000
ma 0,1,0x05f,ram; Определение ПП типа RAM с адресами 0-0х05f
ma 0x100,1,0x400,ram; ПД типа RAM с адресами 0х100-0х4ff, блоки внутреннего DARAM; B0, B1
ma 0x800,1,0x1200,ram; Внешняя ПД с адресами 0х800 - 0хfff
; Команды задания входного\выходного параллельных портов и
подключения к ним; файлов для чтения и записи
ma 0x50,2,1, iport0x51,2,1,oport0x50,2, infile.
dat,READ0x51,2,outfile. dat,WRITE
; pincTINT. bat; загрузка файла с командами имитатора
loadIIR. out; загрузка исполняемой программы
? PC=0x00; установка начального значения программного счетчика
mem 0x0100; формирование и задание начальных адресов двух окон
памяти0x200on; включение звуковой игнализации
2.7 Таблица
значений импульсной характеристики
Номер отсчета
|
Значение ИХ в FD
|
Значение ИХ в
программе
|
0
|
0.054
|
5.401611328125E-002
|
1
|
0.0743965
|
7.4371337890625E-002
|
2
|
-0.083662
|
-8.3648681640625E-002
|
3
|
-0.173136
|
-.173126220703125
|
4
|
0.0520795
|
5.2001953125E-002
|
5
|
0.190937
|
.
190887451171875
|
6
|
-0.0464815
|
-4.6478271484375E-002
|
7
|
-0.162193
|
-.1622314453125
|
8
|
0.0510734
|
5.0994873046875E-002
|
9
|
0.112876
|
.11285400390625
|
2.7 Расчет
максимально возможной частоты дискретизации
Количество тактов подпрограммы обслуживания прерывания: n=720.
Длительность одного такта: T =50 нс.
Время выполнения программы: t= 4.5 мкс.
Максимально возможная частота дискретизации f=222 кГц.
3. Расчет и
результаты фильтра с помощью пакета Filter Design
.1 КИХ фильтр
АЧХ фильтра.
ФЧХ фильтра.
ИХ фильтра.
3.2 БИХ
фильтр
Характеристики фильтра.
Литература
1. Л.А.
Яковлев, "Реализация ЦФ на цифровом процессоре обработки сигналов.
Методические указания к выполнению курсовой работы", СПб, 2004.
2. Л.А.
Яковлев, "Цифровые процессоры обработки сигналов. Методические указания к
выполнению лабораторных работ", СПб, 2003.
. А.И.
Солонина, Л.А. Яковлев, Д. Улахович, "Алгоритмы и процессы цифровой
обработки сигналов", СПб, 2002.