Разработка программной реализации КИХ и БИХ фильтров на базе процессора TMS320C50

 

САНКТ-ПЕТЕРБУРГСКИЙ

ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЯ

им. проф. М.А. БОНЧ-БРУЕВИЧА

Факультет РТС.

Кафедра радиосистем и обработки сигналов.








КУРСОВАЯ РАБОТА

ПО ДИСЦИПЛИНЕ "ЦИФРОВЫЕ ПРОЦЕССОРЫ ОБРАБОТКИ СИГНАЛОВ"

"РАЗРАБОТКА ПРОГРАММНОЙ РЕАЛИЗАЦИИ КИХ И БИХ ФИЛЬТРОВ НА БАЗЕ ПРОЦЕССОРА TMS320C50".





Выполнил: ст. гр. Р-01 Гоца Л. Н.;

Проверил: Степанов А. Б.





Санкт-Петербург 2014

Оглавление


1. Реализация КИХ-фильтра на процессоре TMS320C50

1.1 Вариант кода задания и техническое задание на проектирование

1.2 Структурная схема

1.3 Блок-схема алгоритма

1.4 Исходный текст программы на языке ассемблера с комментариями

1.5 Командный файл компоновки

1.6 Командный файл программного имитатора

1.6 Таблица значений импульсной характеристики

1.7 Расчет максимально возможной частоты дискретизации

2. Реализация БИХ фильтра на процессоре TMS320C50

2.1 Вариант кода задания

2.2 Структурная схема

2.3 Алгоритм

2.4 Исходный текст программы на языке ассемблера с комментариями

2.5 Командный файл компоновки

2.6 Командный файл программного имитатора

2.7 Таблица значений импульсной характеристики

2.7 Расчет максимально возможной частоты дискретизации

3. Расчет и результаты фильтра с помощью пакета Filter Design

3.1 КИХ фильтр

3.2 БИХ фильтр

Литература

1. Реализация КИХ-фильтра на процессоре TMS320C50


1.1 Вариант кода задания и техническое задание на проектирование


ABCDE16743

Разряд А определяет номер решаемой задачи. В моем случае А=1, это значит, что данная задача предусматривает разработку и отладку программы реализации на процессоре TMS320C50 цифрового фильтра с конечной импульсной характеристикой /КИХ/, коэффициенты которого заданы.

Разряд В определяет исходные данные для программы фильтра: коэффициенты bi и масштабный множитель входного сигнала ММ.


В=6ММ=0.85b9=0.21961315b0=0.00517338b10=0.03508036b1=-0.04783066b11=-0.19031033b2=-0.04100188b12=-0.08467900b3=-0.05968966b13=0.12231730b4=0.08542713b14=0.08542713b5=0.12231730b15=-0.05968966b6=-0.08467900b16=-0.04100188b7=-0.19031033b17=-0.04783066b8=0.03508036b18=0.00517338

Разряд С определяет размещение секций программы в памяти процессора:


С7Коды программ (память программ) 600Данные - секция. data (память данных) 400Коэффициенты и переменные (память данных) 280

Разряд D определяет тип прерываний, используемый для ввода отсчета сигнала:


D4Тип прерыванийTINT

Разряд Е определяет период прерываний (период ввода отсчетов сигнала)


Е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 AR2,# (BUFFER2+N-1); загрузка начального (для вычислений) адреса; отсчетов в регистр AR2

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

; sound on; включение звуковой cигнализации

1.6 Таблица значений импульсной характеристики


Номер отсчетаЗаданоПолучено /OUTFILE. DA/OUTFILE. DA * MM10.005173384.302978515625E-0030.005172-0.04783066-4.06494140625E-002-0.047843-0.04100188-3.485107421875E-002-0.0414-0.05968966-5.06591796875E-002-0.0596850.085427137.257080078125E-0020.085360.122317301.0345458984375E-0020.12237-0.08467900-7.1929931640625E-002-0.08478-0.19031033-1.617431640625E-002-0.190390.035080362.972412109375E-0020.035100.219613151.8646240234375E-0020.219110.035080362.972412109375E-0020.03512-0.19031033-1.617431640625E-002-0.190413-0.08467900-7.1929931640625E-002-0.0847140.122317301.0345458984375E-0020.1224150.085427137.257080078125E-0020.085416-0.05968966-5.06591796875E-002-0.0596917-0.04100188-3.485107421875E-002-0.04118-0.04783066-4.06494140625E-002-0.04784190.005173384.302978515625E-0030.00517

В данном случае (при воздействии на входе КИХ-фильтра тестового сигнала в виде единичного импульса) отсчеты ИХ фильтра равны соответствующим коэффициентам фильтра.


1.7 Расчет максимально возможной частоты дискретизации


Количество тактов подпрограммы обслуживания прерывания: n=747.

Длительность одного такта: T =50 нс.

Время выполнения программы: tвып = T * n / 8=4.67 мкс

Максимально возможная частота дискретизации f=1/ tвып =214 кГц.

2. Реализация БИХ фильтра на процессоре TMS320C50


2.1 Вариант кода задания


ABCDEF376426

Разряд А определяет номер решаемой задачи. А=3: данная задача предусматривает разработку и отладку программы реализации на процессоре TMS320C50 цифрового фильтра с бесконечной импульсной характеристикой. Разряд В определяет исходные данные для программы фильтра: коэффициенты bi и масштабные множители двух звеньев m


B=7Звено 1Звено 2b0=0.3245b0=0.3245b1=0.0000b1=0.4918b2=-0.3245b2=0.3245a0=1.0000a0=1.0000a1=0.2776a1=0.4167a2=0.6399a2=0.8322m=0.5403m=0.9500

Разряд С определяет размещение секций программ в памяти процессора.


С2Коды программ (память программ) 100Данные - секция. data (память данных) 180Коэффициенты и переменные (память данных) 300

Разряд D определяет тип прерываний, используемый для ввода отсчета сигнала.


D4Прерывание по таймеруTINT

Разряд Е определяет период прерываний (период ввода отсчетов сигнала).


Е2Период ввода входных сигналов, такты1200

Разряд F определяет номер структуры звеньев фильтра, F=6, номер структуры - 2, каноническая форма реализации.

Для выполнения задачи необходимо сделать следующее:

. Написать программы реализации БИХ-фильтра в виде последовательного соединения звеньев заданной структуры.

. Отладить написанную программу с помощью имитатора процессора.

. Используя пакет синтеза фильтров FD, получить импульсную характеристику заданного фильтра и составить таблицу значений.

. Снять импульсную характеристику полученного фильтра в имитаторе процессора, используя в качестве входного сигнала единичный импульс.

. Определить в имитаторе время вычисления выходного отсчета фильтра (в тактах) и рассчитать максимальную возможную частоту дискретизации входного сигнала для данного фильтра.


2.2 Структурная схема



Обозначения:

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

}

; указания по размещению секций программы в блоках заданной выше памяти системы

{

; размещение секции Vectors в блоке памяти программ VECS начиная с начального адреса; блока: {}>VECS PAGE 0

; секции программы 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Значение ИХ в программе00.0545.401611328125E-00210.07439657.4371337890625E-0022-0.083662-8.3648681640625E-0023-0.173136-.17312622070312540.05207955.2001953125E-00250.190937. 1908874511718756-0.0464815-4.6478271484375E-0027-0.162193-.162231445312580.05107345.0994873046875E-00290.112876.11285400390625

2.7 Расчет максимально возможной частоты дискретизации


Количество тактов подпрограммы обслуживания прерывания: n=720.

Длительность одного такта: T =50 нс.

Время выполнения программы: t= 4.5 мкс.

Максимально возможная частота дискретизации f=222 кГц.

3. Расчет и результаты фильтра с помощью пакета Filter Design


.1 КИХ фильтр


АЧХ фильтра.

ФЧХ фильтра.


ИХ фильтра.



3.2 БИХ фильтр


Характеристики фильтра.

Литература


1.Л.А. Яковлев, "Реализация ЦФ на цифровом процессоре обработки сигналов. Методические указания к выполнению курсовои? работы", СПб, 2004.

2.Л.А. Яковлев, "Цифровые процессоры обработки сигналов. Методические указания к выполнению лабораторных работ", СПб, 2003.

.А.И. Солонина, Л.А. Яковлев, Д. Улахович, "Алгоритмы и процессы цифровой обработки сигналов", СПб, 2002.


САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЯ им. проф. М.А. БОНЧ-БРУЕВИЧА Факультет РТС. Кафедра радиосистем и обработки сигнало

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ