Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Порядок выполнения и оформления
Пояснительная записка оформляется на листах стандартного формата 210х297мм (А4), сшитых с помощью скоросшивателя или стиплера.
На титульном листе пояснительной записки должны быть указаны:
· фамилия и инициалы студента, курс, группа,
· дата выполнения проекта,
· фамилия и инициалы преподавателя.
· название проекта.
Материалы пояснительной записки следует располагать в следующем порядке:
· оглавление, содержащее все разделы проекта с указанием страниц и перечень приложений;
· вариант кода задания и техническое задание на проектирование, структурная схема устройства;
· схема алгоритма работы системы и выполнения программы;
· таблицы коэффициентов и частотные характеристики используемого фильтра,
· таблицы идентификаторов всех использованных переменных, распределение памяти и регистров для хранения переменных и констант;
· исходный текст программы на языке ассемблера с необходимыми пояснениями и комментариями, носящими содержательный (смысловой ) характер;
· командный файл компоновки программы;
· таблица компоновки (файл *.map);
· таблицы значений импульсной характеристики фильтра, полученные в пакете FD и снятые при выполнении программы в имитаторе;
· расчет максимально возможной частоты дискретизации сигнала;
· список использованной литературы.
Основные части записки (кроме оглавления и списка используемой литературы) оформляются для каждой выполняемой задачи отдельно.
Все страницы пояснительной записки должны быть пронумерованы. Схемы и пояснительная записка оформляются в соответствии с требованиями ЕСПД и ГОСТов [1], [2], [3].
2. Задание на проектирование
Объектом проектирования является программа реализации цифрового фильтра с заданными характеристиками в системе цифровой обработки сигнала (ЦОС) на ЦПОС TMS320C50.
Обобщенная структурная схема системы ЦОС приведена на рис. 1.

Рис. 1. Структурная схема системы ЦОС
Входное внешнее устройство (ВУ) может включать в себя источник аналогового сигнала и преобразователь сигнала АЦП. Оно может также являться получателем сигнала из канала связи. Чаще всего ввод информации в системе ЦОС осуществляется по прерываниям. В этом случае ВУ формирует помимо вводимых данных сигнал запроса на прерывание ЗП.

Рис. 2. Имитация ВУ
Программа предназначена для выполнения в реальном масштабе времени. Выполнение курсовой работы включает отладку программы на имитаторе процессора и проверка характеристик полученного фильтра. При использовании программного имитатора невозможна проверка работы устройства в реальном масштабе времени. Поэтому при отладке на имитаторе ВУ заменяется в соответствии с рис. 2 файлами отсчетов входного сигнала и сигналов ЗП (при использовании внешних прерываний). Отсчеты выходного сигнала системы записываются также в файл.
Схема алгоритма работы системы и программы в соответствии с определением [2] должна отображать последовательность операций, выполняемых в системе в соответствии с командами программы. Поэтому в ней не отображаются действия, выполняемые транслятором и компоновщиком, которые также описываются в программе, но с использованием директив ассемблера. Такими действиями, например, являются резервирование памяти, загрузка в память значений коэффициентов и т. д.
Задание на проектирование состоит из нескольких задач, описание которых приведено ниже.
Вариант задания определяется 6-разрядным кодом ABCDEF, который студент получает от преподавателя. Значения отдельных разрядов в этом коде определяют конкретные параметры программы и фильтра (разряд F используется при решении задач 3, 4).
Разряд А определяет номер решаемой задачи. Значения остальных разрядов приведено ниже при описании конкретных задач.
2.1. Задача 1. Реализация КИХ-фильтра на процессоре TMS320C50
Данная задача предусматривает разработку и отладку программы реализации на процессоре TMS320C50 цифрового фильтра с конечной импульсной характеристикой (КИХ), коэффициенты которого заданны.
Конечной импульсной характеристикой обладают нерекурсивные цепи и поэтому их обычно называют КИХ - цепями (КИХ-фильтрами). КИХ-фильтр порядка N-1 (длины N) описывается передаточной функцией:

где bn - коэффициенты фильтра, которые равны отсчетам импульсной характеристики.
Структурная схема КИХ-фильтра при прямой форме реализации приведена на рис. 3.
Для выполнения задачи необходимо сделать следующее.
1. Написать программу реализации фильтра, в соответствии со структурной схемой, изображенной на рис. 3. Пример программы реализации фильтра приведен в разделе 4.1.
Исходные данные для программы фильтра ( коэффициенты и множители ММ) выбираются из табл. 1 в соответствии с значением разряда В кода варианта задания. Во всех вариантах фильтра используется частота дискретизации 8 КГц.
|
Рис 3. Структурная схема реализации КИХ-фильтра (MM – масштабный множитель)
2. Отладить написанную программу на имитаторе процессора.
3. Снять импульсную характеристику полученного фильтра, используя в качестве входного сигнала единичный импульс.
Критерием правильности функционирования программы будет совпадение значений полученной импульсной характеристики с заданными коэффициентами фильтра с учетом введенного на входе масштабного множителя (для совпадения коэффициенты должны быть умножены на масштабный множитель).
4. Используя пакет синтеза фильтров FD получить импульсную характеристику для заданного фильтра и сравнить её с характеристикой, снятой в имитаторе при выполнении разработанной программы.
5. Определить в имитаторе время вычисления выходного отсчета фильтра (в тактах) и рассчитать максимально возможную частоту дискретизации входного сигнала для проектируемого фильтра.
Различные варианты заданий отличаются адресами размещения секций программы в памяти процессора и типом прерываний, используемым для ввода входного сигнала.
Значение С кода варианта определяет размещение секций программы в памяти процессора. Адреса размещения секций (в 16-ричной системе) для различных значений С приведены в табл. 2
Таблица. 1.
В = 1 | В = 2 | В = 3 | В = 4 | В = 5 |
MM.=0.9 | MM.=0.9 | MM.=0.9 | MM.=0.85 | MM.=0.9 |
0. 0. 0. -0. 0. 0. -0. -0. -0. 0. 0. | -0. -0. 0. -0. -0. 0. -0. 0. -0. 0. -0. -0. 0. -0. -0. | 0. -0. -0. 0. 0. -0. -0. 0. 0. 0. -0. -0. 0. 0. -0. -0. 0. | -0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. -0. | 0. 0. 0. -0. -0. -0. 0. 0. -0. -0. -0. 0. 0. 0. |
В = 6 | В = 7 | В = 8 | В = 9 | В = 0 |
MM.=0.85 | MM.=0.85 | MM.=0.77 | MM.=0.85 | MM.=0.9 |
0. -0. -0. -0. 0. 0. -0. -0. 0. 0. 0. -0. -0. 0. 0. -0. -0. -0. 0. | 0. 0. -0. -0. -0. -0. 0.4332183 0.4332183 -0. -0. -0. -0. 0.0393386 0.0275093 | 0. 0. -0. 0. -0. -0. 0. 0. -0.2792375 -0. 0. -0. 0. 0. | -0. 0. 0. 0. -0. 0. -0. 0. 0. -0. -0. | -0. 0. 0. -0. 0. -0. 0. 0. -0. |
В таблице использованы следующие обозначения:
ММ – масштабный множитель входного сигнала.
Таблица 2
С | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
коды программы (память программ) | 40 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 |
данные – секция.data (память данных) | 100 | 180 | 200 | 280 | 300 | 380 | 400 | 480 | 150 | 350 |
коэффициенты и переменные (память данных) | 280 | 300 | 380 | 100 | 180 | 200 | 280 | 150 | 350 | 400 |
Значение D кода варианта определяет тип прерываний, используемый для ввода отсчетов сигнала. В табл. 3 приведены используемые типы прерываний в зависимости от значения D:
INT1, INT2, INT3 – внешние прерывания от устройств, запросы которых подаются на различные входы процессора,
TINT – прерывания по таймеру.
Таблица 3
D | 1 | 2 | 3 | 4 |
Тип прерываний | INT1 | INT2 | INT3 | TINT |
Значение E кода варианта определяет период прерываний (период ввода отсчетов сигнала). В табл. 4 приведены значения периода ( в тактах) в зависимости от E.
Таблица 4
E | 1 | 2 | 3 | 4 |
Период ввода входных сигналов (в тактах) | 1000 | 1200 | 1500 | 2000 |
Методические указания по выполнению задачи и использованию прерываний для ввода сигнала приведены в разделе 3.
2.2. Задача 2. Синтез и реализация КИХ-фильтра на процессоре TMS320C50
Данная задача предусматривает синтез цифрового фильтра с конечной импульсной характеристикой по заданным параметрам АЧХ, разработку и отладку программы его реализации на процессоре TMS320C50.
Для выполнения задачи необходимо сделать следующее.
1. С помощью пакета FD синтезировать фильтр в соответствии с требованиями, заданными значением В номера варианта. Соответствующие параметры приведены в табл. 5. Последовательность действий, необходимая для синтеза фильтра приведена в разделе 5. Во всех вариантах используется частота дискретизации 8 кГц.
2. Используя пакет FD зарисовать и составить таблицу значений импульсной характеристики синтезированного фильтра.
3. Написать программу реализации фильтра, в соответствии со структурной схемой изображенной на рис. 3. Пример программной реализации фильтра приведен в разделе 4.1.
4. Отладить написанную программу с помощью имитатора процессора.
5. Снять импульсную характеристику (ИХ) полученного фильтра, используя в качестве входного сигнала единичный импульс.
Критерием правильности функционирования программы будет совпадение значений полученной импульсной характеристики с заданными коэффициентами фильтра с учетом введенного на входе масштабного множителя (для совпадения коэффициенты должны быть умножены на масштабный множитель).
6. Сравнить ИХ, полученную при синтезе фильтра с характеристикой, снятой в имитаторе.
7. Определить в имитаторе время вычисления выходного отсчета фильтра (в тактах) и рассчитать максимально возможную частоту дискретизации входного сигнала для проектируемого фильтра.
Различные варианты заданий отличаются адресами размещения секций программы в памяти процессора и типом прерываний, используемым для ввода входного сигнала.
Значение С кода варианта определяет размещение секций программы в памяти процессора. Адреса размещения секций (в 16-ричной системе) для различных значений С приведены в табл. 2.
Таблица 5
Значение В Вид ИХ | Левая граница | Значение АЧХ | Правая граница | Значение АЧХ | Ошибка | Примечания |
|
1 | 0 | 1 | 1600 | 1 | 0,1 | П. П. |
|
Симметричная | 1600 | 1 | 2000 | 0 | 0 | Перех. П. |
|
2000 | 0 | 4000 | 0 | 0,1 | П. З. |
| |
2 | 0 | 1 | 1700 | 1 | 0,1 | П. П. |
|
Симметричная | 1700 | 1 | 2000 | 0 | 0 | Перех. П. |
|
2000 | 0 | 4000 | 0 | 0,1 | П. З. |
| |
3 | 0 | 1 | 1000 | 1 | 0,1 | П. П. |
|
Симметричная | 1000 | 1 | 1300 | 0 | 0 | Перех. П. |
|
1300 | 0 | 4000 | 0 | 0,1 | П. З. |
| |
4 | 0 | 0 | 2100 | 0 | 0,1 | П. З. |
|
Симметричная | 2100 | 0 | 2500 | 1 | 0 | Перех. П. |
|
2500 | 1 | 4000 | 1 | 0,1 | П. П. |
| |
5 | 0 | 0 | 2400 | 0 | 0,1 | П. З. |
|
Cимметричная | 2400 | 0 | 2700 | 1 | 0 | Перех. П. |
|
2700 | 1 | 4000 | 1 | 0,1 | П. П. |
| |
0 | 0 | 1200 | 0 | 0,1 | П. З. | ||
6 | 1200 | 0 | 1500 | 1 | 0 | Перех. П. | |
Симметричная | 1500 | 1 | 4000 | 1 | 0,1 | П. П. | |
0 | 0 | 900 | 0 | 0,1 | П. З. | ||
900 | 0 | 1200 | 1 | 0 | Перех. П. | ||
7 | 1200 | 1 | 1800 | 1 | 0,1 | П. П. | |
Симметричная | 1800 | 1 | 2400 | 0 | 0 | Перех. П. | |
2400 | 0 | 4000 | 0 | 0,1 | П. З. | ||
0 | 0 | 700 | 0 | 0,1 | П.3. | ||
8 | 700 | 0 | 1300 | 1 | 0 | Перех. П. | |
Антисимметричная | 1300 | 1 | 1800 | 1 | 0,1 | П. П. | |
1800 | 1 | 2100 | 0 | 0 | Перех. П. | ||
2100 | 0 | 4000 | 0 | 0,1 | П. З. | ||
0 | 0 | 1100 | 0 | 0,01 | П. З. | ||
9 | 1100 | 0 | 1400 | 1 | 0 | Перех. П. | |
Симметричная | 1400 | 1 | 2100 | 1 | 0,05 | П. П. | |
2100 | 1 | 3200 | 0 | 0 | Перех. П. | ||
3200 | 0 | 4000 | 0 | 0,01 | П. З. | ||
0 | 1 | 1000 | 1 | 0,1 | П. П. | ||
0 | 1000 | 1 | 1600 | 0 | 0 | Перех. П. | |
Симметричная | 1600 | 0 | 2000 | 0 | 0,1 | П. З. | |
2000 | 0 | 2400 | 1 | 0 | Перех. П. | ||
2400 | 1 | 4000 | 1 | 0,1 | П. П. | ||
Значение D кода варианта определяет тип прерываний, используемый для ввода отсчетов сигнала. Используемые типы прерываний в зависимости от значения D приведены в табл. 3:
INT1, INT2, INT3 – внешние прерывания от устройств, запросы которых подаются на различные входы процессора,
TINT – прерывания по таймеру.
Значение E кода варианта определяет период прерываний (период ввода отсчетов сигнала). Значения периода (в тактах) в зависимости от E приведены в табл. 4.
Методические указания по выполнению задачи и использованию прерываний для ввода сигнала приведены в разделе 3.
2.3. Задача 3. Реализация БИХ-фильтра на процессоре TMS320C50
Задача аппроксимации (конструирование передаточной функции фильтра) в большинстве случаев может быть оптимально решена с использованием общеизвестных программных средств, например, при помощи системы автоматизации математических и научно - технических расчетов MatLab, пакетов для расчета и анализа цифровых фильтров DFDP или FD. При выполнении данной задачи этап аппроксимации реализуется с помощью пакета программ FD.
Для БИХ фильтров предлагается два типа передаточных функций. Передаточные функции, полученные из ФНЧ аналоговых прототипов с помощью билинейного преобразования частоты - это функции Баттерворта, Чебышева I, Чебышева II и Золотарева-Кауэра. Второй тип передаточных функций используется, в основном, для построения амплитудных корректоров.
В результате декомпозиции полученной передаточной функции, которую выполняет программа FD, получается передаточная функция, записанная в виде последовательности передаточных функций первого и второго порядков, т. к. на практике, в основном, используется реализация фильтров в виде каскадного соединения звеньев первого и второго порядка.
Передаточная функция БИХ-фильтра при каскадной форме реализации имеет вид:
|
где множители
соответствуют передаточным функциям звеньев второго порядка

Для реализации звеньев второго порядка могут использоваться различные структуры. На рис. 4 приведены структурные схемы звеньев при различных формах реализации. На этих рисунках не показаны умножители на масштабные коэффициенты, которые должны стоять на входе каждого звена.

Рис. 4а Схема звена РЦФ второго порядка – прямая форма реализации

Рис. 4б Схема звена РЦФ второго порядка – каноническая форма реализации

Рис. 4в Схема звена РЦФ второго порядка – трансформированная форма реализации
На рис.4.а приведена прямая форма реализации (структура 1), на рис. 4.б – каноническая форма реализации (структура 2), на рис. 4в – трансформированная форма реализации (структура 3).
Для выполнения задачи необходимо сделать следующее.
1. Написать программу реализации БИХ фильтра в виде последовательного соединения звеньев заданной структуры.
Исходные данные для программы фильтра (коэффициенты и масштабные множители m двух звеньев), которые определяются значением В кода варианта, приведены в табл. 6. Во всех вариантах фильтров используется частота дискретизации 8 кГц.
Структуры звеньев фильтра определяются значением F кода варианта в соответствии с табл. 7. Структурные схемы показаны на рис. 4.
Примеры программной реализации звеньев различной структуры приведены в разделе 4.3.
2. Отладить написанную программу с помощью имитатора процессора.
3. Используя пакет синтеза фильтров FD получить импульсную характеристику для заданного фильтра и составить таблицу её значений.
4. Снять импульсную характеристику полученного фильтра в имитаторе процессора, используя в качестве входного сигнала единичный импульс.
Критерием правильности функционирования программы будет совпадение значений снятой в имитаторе импульсной характеристики с значениями функции, полученной в пакете FD.
5. Определить в имитаторе время вычисления выходного отсчета фильтра (в тактах) и рассчитать максимально возможную частоту дискретизации входного сигнала для данного фильтра.
Варианты заданий отличаются адресами размещения секций программы в памяти процессора и типом прерываний, используемым для ввода входного сигнала.
Значение С номера варианта определяет размещение секций программы в памяти процессора. Адреса размещения секций (в 16-ричной системе) приведены в табл. 2.
Значение D кода варианта определяет тип прерываний, используемый для ввода отсчетов сигнала. Используемые типы прерываний в зависимости от значения D приведены в табл. 3:
INT1, INT2, INT3 – внешние прерывания от устройств, запросы которых подаются на различные входы процессора,
TINT – прерывания по таймеру.
Таблица 6
Значение В | 1 | 2 | 3 | 4 | 5 |
Звено 1 | b0=0.3845 b1=-0.7691 b2=0.3845 a0=1.0000 a1=0.0388 a2=0.0000 m=0.598 | b0=0.3525 b1=-.5717 b2=0.3525 a0=1.0000 a1=0.5497 a2=0.2926 m=0.5406 | b0=0.3149 b1=0.2643 b2=0.3149 a0=1.000 a1=-0.6163 a2=0.6570 m=0.3073 | b0=0.5074 b1=0.9557 b2=0.5074 a0=1.0000 a1=0.6365 a2=0.6342 m=0.5688 | b0=0.1986 b1=0.0000 b2=-0.1986 a0=1.0000 a1=-0.5772 a2=0.8451 m=0.3773 |
Звено 2 | b0=0.3845 b1=-0.3845 b2=0.0000 a0=1.0000 a1=0.1036 a2=0.3346 m=1.0000 | b0=0.3525 b1=-0.2523 b2=0.3525 a0=1.000 a1=-0.007214 a2=0.8211 m=0.9500 | b0=0.3149 b1=0.3149 b2=0.00 a0=1.0000 a1=-0.4586 a2=0.000 m=0.9025 | b0=0.5074 b1=0.5074 b2=0.0000 a0=1.0000 a1=-0.1192 a2=0.0000 m=0.95000 | b0=0.1986 b1=0.0868 b2=0.1986 a0=1.0000 a1=-0.3071 a2=0.9242 m=0.9500 |
Значение В | 6 | 7 | 8 | 9 | 0 |
Звено 1 | b0=0.1703 b1=0.0000 b2=-0.1703 a0=1.0000 a1=0.2926 a2=0.8476 m=0.4401 | b0=0.3245 b1=0.0000 b2=-0.3245 a0=1.0000 a1=-0.2776 a2=0.6399 m=0.5403 | b0=0.5672 b1=0.1109 b2=0.5672 a0=1.0000 a1=-0.7751 a2=0.5118 m=0.3972 | b0=0.7056 b1=0.2897 b2=0.7056 a0=1.0000 a1=0.8653 a2=0.6492 m=0.5133 | b0=0.4419 b1=-0.4633 b2=0.4419 a0=1.0000 a1=0.6610 a2=0.7462 m=0.1660 |
Звено 2 | b0=0.1703 b1=-0.1666 b2=0.1703 a0=1.0000 a1=0.0070 a2=0.9242 m=0.7737 | b0=0.3245 b1=0.4918 b2=0.3245 a0=1.0000 a1=0.4167 a2=0.8322 m=0.9500 | b0=0.5672 b1=0.3834 b2=0.5672 a0=1.0000 a1=1.2385 a2=0.6120 m=1.0000 | b0=0.7056 b1=0.0885 b2=0.7056 a0=1.0000 a1=-0.4878 a2=0.6152 m=1.00000 | b0=0.4419 b1=-0.4633 b2=0.4419 a0=1.0000 a1=0.8577 a2=0.4496 m=1.00000 |
.
Таблица. 7
Значение F | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
№ структуры | 1 | 2 | 3 | 3 | 1 | 2 | 2 | 1 | 1 | 3 |
Значение E кода варианта период прерываний (период ввода отсчетов сигнала). Значения периода (в тактах) в зависимости от E приведены в табл. 4.
Методические указания по выполнению задачи и использованию прерываний для ввода сигнала приведены в разделе 3.
2.4. Задача 4. Синтез и реализация БИХ-фильтра на процессоре TMS320C50
Данная задача предусматривает синтез цифрового фильтра с бесконечной импульсной характеристикой по заданным параметрам, разработку и отладку программы его реализации на процессоре TMS320C50.
Для выполнения задачи необходимо сделать следующее.
1. С помощью пакета FD синтезировать фильтр в соответствии с требованиями, заданными значением В кода варианта. Параметры фильтра при различных значениях В приведены в табл. 8. Необходимая последовательность действий при синтезе фильтра приведена в разделе 5.
Структуры звеньев определяются значением F кода варианта в соответствии с табл. 7. Соответствующие структурные схемы показаны на рис. 4. На этих рисунках не показаны умножители на масштабные коэффициенты, которые должны стоять на входе каждого звена.
2. Зарисовать и составить таблицу значений импульсной характеристики синтезированного фильтра, расcчитанную в пакете FD.
3. Написать программу реализации фильтра, в соответствии с заданной структурной схемой. Примеры программной реализации звеньев различной структуры приведены в разделе 4.3.
4. Отладить написанную программу с помощью имитатора процессора.
5. Снять импульсную характеристику полученного фильтра в имитаторе процессора, используя в качестве входного сигнала единичный импульс.
Критерием правильности функционирования программы будет совпадение значений снятой в имитаторе импульсной характеристики с значениями характеристики, полученной в пакете FD.
5. Определить в имитаторе время вычисления выходного отсчета фильтра (в тактах) и рассчитать максимально возможную частоту дискретизации входного сигнала для полученного фильтра.
Варианты заданий отличаются адресами размещения секций программы в памяти процессора и типом прерываний, используемым для ввода входного сигнала.
Значение С номера варианта определяет размещение секций программы в памяти процессора. Адреса размещения секций (в 16-ричной системе) в зависимости от С приведены в табл. 2.
Таблица. 8.
Значение В Тип аппроксимации | Левая граница | Значение АЧХ | Правая граница | Значение АЧХ | Ошибка | Примечания |
|
1 | 0 | 1 | 1000 | 1 | 0,1 | П. П. |
|
Чебышева 2 | 1000 | 1 | 1300 | 0 | 0 | Перех. П. |
|
1300 | 0 | 4000 | 0 | 0,1 | П. З. |
| |
2 | 0 | 1 | 2000 | 1 | 0,1 | П. П. |
|
Чебышева 2 | 2000 | 1 | 2500 | 0 | 0 | Перех. П. |
|
2500 | 0 | 4000 | 0 | 0,1 | П. З. |
| |
3 | 0 | 1 | 950 | 1 | 0,05 | П. П. |
|
Золотарева- | 950 | 1 | 1100 | 0 | 0 | Перех. П. |
|
Кауэра | 1100 | 0 | 4000 | 0 | 0,1 | П. З. |
|
4 | 0 | 0 | 950 | 0 | 0,1 | П. З. |
|
Золотарева- | 950 | 0 | 1000 | 1 | 0 | Перех. П. |
|
Кауэра | 1000 | 1 | 4000 | 1 | 0,1 | П. П. |
|
5 | 0 | 0 | 2200 | 0 | 0,01 | П. З. |
|
Золотарева- | 2200 | 0 | 3100 | 1 | 0 | Перех. П. |
|
Кауэра | 3100 | 1 | 4000 | 1 | 0,01 | П. П. |
|
6 | 0 | 0 | 800 | 0 | 0,01 | П. З. |
|
Чебышева 2 | 800 | 0 | 2000 | 1 | 0 | Перех. П. |
|
2000 | 1 | 4000 | 1 | 0,01 | П. П. | ||
0 | 0 | 500 | 0 | 0,1 | П.3. | ||
7 | 500 | 0 | 800 | 1 | 0 | Перех. П. | |
Золотарева- | 800 | 1 | 1500 | 1 | 0,1 | П. П. | |
Кауэра | 1500 | 1 | 2200 | 0 | 0 | Перех. П. | |
2200 | 0 | 4000 | 0 | 0,1 | П. З. | ||
0 | 0 | 850 | 0 | 0,1 | П. З. | ||
8 | 850 | 0 | 1100 | 1 | 0 | Перех. П. | |
Золотарева- | 1100 | 1 | 2000 | 1 | 0,1 | П. П. | |
Кауэра | 2000 | 1 | 2300 | 0 | 0 | Перех. П. | |
2300 | 0 | 4000 | 0 | 0,1 | П. З. | ||
0 | 1 | 800 | 1 | 0,1 | П. П. | ||
9 | 800 | 1 | 1300 | 0 | 0 | Перех. П. | |
Чебышева 2 | 1300 | 0 | 1800 | 0 | 0,01 | П. З. | |
1800 | 0 | 2500 | 1 | 0 | Перех. П. | ||
2500 | 1 | 4000 | 1 | 0,1 | П. П. | ||
0 | 1 | 500 | 1 | 0,1 | П. П. | ||
0 | 500 | 1 | 1200 | 0 | 0 | Перех. П. | |
Чебышева 1 | 1200 | 0 | 1600 | 0 | 0,01 | П. З. | |
1600 | 0 | 2400 | 1 | 0 | Перех. П. | ||
2400 | 1 | 4000 | 1 | 0,1 | П. П. |
Значение D кода варианта тип прерываний, используемый для ввода отсчетов сигнала. Используемые типы прерываний в зависимости от значения D приведены в табл. 3:
INT1, INT2, INT3 – внешние прерывания от устройств, запросы которых подаются на различные входы процессора,
TINT – прерывания по таймеру.
Значение E кода варианта период прерываний (период ввода отсчетов сигнала). Значения периода (в тактах) в зависимости от E приведены в табл. 4.
Методические указания по выполнению задачи и использованию прерываний и периодов ввода сигнала приведены в разделе 3.
3. Методические указания по выполнению задач
3.1.Составление программы
3.1.1. Программа реализации КИХ фильтра
Пример программы реализации нерекурсивного фильтра с подробными комментариями приведен в разделе 4.1. Программа является заведомо не оптимальной и оставляет простор для творчества. В частности, в ней не используются циклические буферы для коэффициентов и отсчетов фильтра, комбинированные команды типа LTD, MADD.
В программе реализуется ввод отсчетов входного сигнала по прерываниям через параллельный порт процессора. В соответствии с вариантами заданий возможно использование трех внешних прерываний и прерывания по таймеру. Вид прерывания сказывается в программе только на используемой команде перехода в таблице векторов прерывания. (Вид используемого прерывания будет влиять на отладку программы в имитаторе). Подпрограмма прерывания, при выполнении которой производится ввод входного отсчета и вычисление выходного, одинакова для всех типов прерываний.
Программа реализации фильтра состоит из нескольких секций.
Основная программа (секция "Init_main") содержит команды настройки процессора на необходимые режимы работы и бесконечную (пустую) петлю ожидания прихода очередного отсчета входного сигнала (запроса на прерывание). При поступлении запроса происходит переход к выполнению подпрограммы обработки прерывания - производится ввод входного отсчета сигнала и вычисление очередного выходного отсчета фильтра.
Соответственно подпрограмма обработки прерывания содержит следующие основные части.
· Секция "Vvod" : ввод отсчета, умножение его на масштабный множитель, запись в буфер отсчетов.
· Секция "Filter": вычисление значения выходного отсчета фильтра; при этом производится сдвиг входных отсчетов в буфере, необходимый для правильного вычисления последующего очередного отсчета.
· Секция "Vivod": вывод выходного отсчета фильтра, восстановление разрешения прерывания, так как при переходе к обработке прерывания процессор запрещает все маскируемые прерывания; возврат в основную программу для ожидания прихода очередного входного отсчета.
В программе используются три секции данных. Секция .data содержит текущие входной и выходной отсчеты фильтра и масштабный коэффициент. Именованная секция "BUFFER1" содержит коэффициенты фильтра. Именованная секция "BUFFER2" является неинициализированной и резервирует место для хранения предыдущих отсчетов входного сигнала.
В зависимости от варианта задания в программе могут изменяться следующие величины (значения).
· Количество коэффициентов N (порядок фильтра).
· Значения коэффициентов, записываемые в буфер .sect "BUFFER1". Правило задания коэффициентов директивой .word очевидно из приведенных комментариев.
· Значение масштабного множителя MM (секция .data). Если величина масштабного множителя равно 1, то в программе необходимо подставить значение 0,999 или вообще убрать умножение на него.
Размещение секций программы в памяти определяется в командном файле компоновки. Пример командного файла компоновки с подробными комментариями приведен в разделе 4.2. В соответствии с вариантами задания необходимо изменять начальные адреса блоков конфигурируемой памяти системы для размещения секций программы по требуемым адресам. Длина блоков памяти задаётся исходя из оценки длины соответствующих секций с некоторым запасом. Точные значения объема секций можно увидеть в файле таблицы компоновки после её выполнения.
3.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. В соответствии с заданием необходимо изменять начальные адреса блоков конфигурируемой памяти системы для размещения секций программы по требуемым адресам. Длина блоков памяти задаётся исходя из оценки длины соответствующих секций с некоторым запасом. Точные значения объема секций можно увидеть в таблице компоновки после её выполнения. Естественно, необходимо обратить внимание на то, что в примере командного файла приведены имена секций для КИХ-фильтра. В программе БИХ фильтра имена секций отличаются.
3.2.Отладка программы
Отладка программы производится с помощью программного имитатора sim5x.exe . Имитатор работает под управлением командного файла siminit.cmd . В этом файле задаётся конфигурация памяти разрабатываемой системы, и записываются различные команды имитатора (например, загрузка исполняемой программы), которые в принципе могут вводится после запуска имитатора. Однако при отладке и тестировании программы приходится неоднократно запускать имитатор и запись некоторых команд в файл позволяет избежать рутинных операций по вводу некоторых команд. Следует обратить внимание на то, что конфигурация памяти, задаваемая для имитатора не должна противоречить конфигурации памяти, задаваемой в командном файле компоновки исполняемой программы. Как правило, память имитатора "шире". Пример командного файла имитатора приведен в разделе 4.4. Естественно, при работе с конкретными исполняемыми программами необходимо корректировать имя загружаемой программы в команде load и указывать используемые области памяти в командах mem.
При работе с имитатором отсчеты входного сигнала записываются в файл данных infile.dat, который подключается для чтения к порту ввода; выходные данные записываются в выходной файл outfilre.dat. Соответствующие команды для определения портов и подключения файлов с комментариями приведены в примере командного файла имитатора.
Подача сигнала на вход фильтра производится по прерываниям.
Период внешних прерываний задаётся в файле прерываний, который подключается к соответствующему входу процессора и имитирует поступление запросов на прерывания (в примере командного файла это вход INT1 и файл t_int.dat). Период прерываний можно записывать различным образом, в частности файл может иметь следующую запись:
100 (+1000) rpt 20
Это выражение означает, что первый запрос на прерывание возникнет через 100 тактов после запуска программы на выполнение и затем запрос на прерывание будет повторятся 20 раз с интервалом 1000 тактов.
При использовании прерываний по таймеру период прерываний задаётся регистром периода таймера. Для задания периода необходимо в секцию программы "Init_main" к командам задания режима добавить следующие команды
SPLK #1000,PRD
SPLK #1000,TIM
При этом прерывания будут повторятся с интервалом 1000 тактов. Под тактом понимается время командного цикла. Командный цикл процессора Tk (длительность такта) равен 2/f, где f – тактовая частота работы процессора.
В качестве входного тестового сигнала при проверке программы реализации фильтра используется единичный импульс. При этом выходным сигналом является импульсная характеристика. Совпадение полученной характеристики с теоретической (снятой в пакете FD) является критерием правильного выполнения программы. Для формирования единичного импульса файл входных отсчетов должен представлять собой следующую последовательность значений (одна 1 и последовательность нулей):
7FFF
0000
0000
0000
…..
…..
Количество записей в файле определяет количество рассчитываемых значений ИХ. Оно должно превышать порядок фильтра и количество запросов на прерывание, задаваемых в файле t_int.dat.
При отладке программы для выяснения состояния процессора и режима его работы необходимо знать и использовать значения разрядов регистра масок (запретов) прерываний IMR и регистра флагов (признаков наличия запросов) IFR. Распределение различных прерываний по разрядам регистров приведены в табл. 9.
Таблица 9
Разряд | D5 | D4 | D3 | D2 | D1 | D0 |
IFR IMR | XINT | RINT | TINT | INT3 | INT2 | INT1 |
Признак запрета всех прерываний INTM – разряд D9 ST0. При значении INTM равном 1 все маскируемые прерывания запрещены.
При отладке программы можно использовать команды:
· INTM - вызов на экран бита разрешения/запрета всех прерываний для контроля правильности установки режима,
· WA CLK - вызов на экран счетчика машинных циклов,
· TINT - вызов на экран бита разрешения/запрета прерывания таймера.
Процесс отладки и проверки программ носит творческий характер и может выполняться индивидуально. Тем не менее, можно рекомендовать следующий порядок действий по проверке правильности работы программы.
1. Отключить временно в командном файле имитатора команду для подключения файла t_int.dat, определяющего период прерываний. Команду можно временно убрать, поставив в первой позиции соответствующей строки точку с запятой.
2. Запустить имитатор и проверить загрузку текста программы, правильность загрузки коэффициентов и параметров фильтра (окна памяти mem), правильность подключения входного и выходного файлов данных (команды меню Memory, List).
3. Выполнить программу по шагам до реализации петли ожидания запросов на прерывания (метка Loop) и несколько шагов по петле.
4. Проверить наличие разрешения используемого прерывания, т. е. установку соответствующих значений в разрядах регистров ST0 и IMR.
5. Установить значение 1 в используемый по заданию разряд регистра IFR, соответствующий используемому типу прерываний; при этом будет имитироваться подача запроса на прерывание.
6. Выполнить далее программу по шагам. При правильном выполнении программы должен произойти переход на ветвь таблицы векторов прерывания и далее к выполнению подпрограммы прерывания. После выполнения команды ввода и считывания первого значения из входного файла данных в ячейке INAD должно появится первое значение сигнала 7FFF. Имеет смысл проверить выполнение подпрограммы обработки прерывания по шагам до конца и возврат после её окончания в основную программу.
7. Поставить точку останова на команду подпрограммы, которая стоит следующей после команды ввода сигнала. Последовательно вычислить выходные отсчеты фильтра, выполняя каждый раз следующее:
· установить значение 1 в используемый разряд регистра IFR,
· запустить команду RUN,
· после остановки выполнения программы проверять правильность считывания очередного отсчета из файла входных данных в ячейке INAD, формирование выходного значения в ячейке OUTAD.
Для проверки влияния режимов работы запретите прерывания процессора, занеся при нахождении в основной программе в ST0 значение 0600; выполните после этого программу, обратив внимание на то, что прерывания не происходят. Восстановите содержимое ST0 и запретите используемые прерывания, занеся в IMR соответствующие значения; выполните после этого программу.
После считывания всех значений из файла отсчетов входного сигнала необходимо выйти из программы имитатора и проверить правильность формирования файла выходных данных и совпадение полученных значений ИХ с значениями, полученными в пакете FD. Соответствующие пояснения приведены в разделе 3.3.
Если полученная ИХ является правильной, можно переходить к дальнейшей проверке программы. Если же она не совпадает с расчетной, необходимо проверять правильность вычисления выходных отсчетов фильтра, т. е. правильность выполнения подпрограммы обработки прерывания.
После получения правильной ИХ необходимо подключить файл, задающий период прерываний и проверить правильность выполнения программы в автоматическом режиме. Для этого можно сделать следующее.
1. После запуска программы имитатора установить точку останова на используемую команду перехода (ветвь) таблицы векторов прерывания.
2. Проверить правильность подключения файла к входу запроса на прерывания – команды меню Pin, List.
3. Ввести команду CLK.
4. Последовательно выполнять команду RUN и после останова проверять полученное значение периода прерываний – значение CLK (или изменение значение счетчика таймера TIM) и изменения значений отсчетов сигнала в ячейках INAD и OUTAD.
Полученное значение периода прерываний (CLK) должно примерно совпадать с требуемым по заданию.
Отладка программы при использовании прерываний по таймеру не отличается от описанной выше. Файл t_int.dat, определяющий поступление запросов на внешние прерывания в командном файле имитатора необходимо отключить постоянно. На первом этапе проверки программы вместо отключения этого файла необходимо из программы убрать команды настройки таймера
SPLK #1000,PRD
SPLK #1000,TIM,
а затем при проверке правильности периода прерываний включить эти команды в программу. Полученный период прерываний можно проверить по значению CLK или регистра TIM.
3.3.Получение импульсной характеристики фильтра
Эталонные значения ИХ фильтра, используемые для проверки правильности выполнения программы его реализации, снимаются в пакете FD и оформляются в виде таблицы значений в десятичной системе.
Значения выходного сигнала при программной реализации фильтра и использовании имитатора формируются в 16 – ричной системе в дополнительном коде. Для преобразования этих значений в десятичную систему счисления можно использовать программу data_convert.exe. При запуске программа запрашивает имя файла, содержащего данные, которые нужно преобразовать и имя файла, в который надо поместить преобразованные значения. Программа и преобразуемый файл должны находится в одной директории.
Для получения ИХ входной сигнал фильтра должен представлять единичный импульс (см. раздел 3.2).
3.4.Определение максимально возможной частоты дискретизации
Частота дискретизации сигнала определяется из следующих соображений: обработка процессором очередного отсчёта входного сигнала должна быть закончена до поступления следующего отсчета.
В реально функционирующей системе и вводе входного сигнала по прерываниям запрос на прерывания формируется ВУ при поступлении очередного отсчета на вход. При прерываниях по таймеру частота дискретизации определяется таймером.
Следовательно, при проверке фильтра на имитаторе моделируется ситуация, при которой частота дискретизации определяется заданным в соответствии с вариантом задания периодом прерываний, который заведомо больше времени выполнения программы.
Для определения максимально возможной частоты дискретизации необходимо определить время выполнения разработанной программы, причем не всей, а только той её части, которая повторяется при вычислении каждого выходного отсчета. Это можно сделать следующим образом.
Убрать из командного файла имитатора команду pinc подключения файла к входам INT процессора; при использовании прерываний по таймеру необходимо убрать из программы команды настройки таймера.
Запустить имитатор и загрузить программу
Установить точку останова на команду в петле ожидания (на команду с меткой LOOP).
Ввести счетчик тактов командой Clk.
Ввести запрос на прерывания в регистр IFR
Ввести команду RUN
Счетчик тактов покажет количество тактов n, затраченное на вычисление отсчета выходного сигнала и выполнение различных команд перехода.
При расчете времени выполнения и частоты дискретизации необходимо учитывать следующее. Командный цикл процессора Tk (длительность такта) равен 2/f, где f – тактовая частота работы процессора. Величину, показываемую счетчиком тактов необходимо разделить на 8 (для компенсации ошибки имитатора). Время выполнения программы будет равно
tвып = Tk * n / 8
4. Примеры программ
4.1.Программа реализации нерекурсивного фильтра
*Реализация КИХ фильтра (N-1) порядка (N коэффициентов)
.version 50
.global BUFFER2
.mmregs
* Задание значений символов, используемых в программе
N. set 17 ; к-во коэффициентов фильтра
OUTPORT. set 51h ; параллельный порт, используемый для вывода
; отсчетов фильтра
INPORT. set 50h ; параллельный порт, используемый для ввода
; отсчетов сигнала
.data
; данные для фильтра
INAD. word 0
OUTAD. word 0 ; выходной отсчет
MM. word 32768*900/1000 ; масштабный множитель на входе 0,9
.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 #0
SPLK #(N-2),BRCR ; установка к-ва повторений блока команд
LDP #INAD
IN INAD, INPORT ; приём отсчета через входной порт
* умножение отсчета на масштабный множитель
LT INAD
MPY MM
LDP #BUFFER2 ;
SPH BUFFER2 ; запись отсчета в буфер
*при значении множителя ММ=1 необходимо убрать умножение на него;
* для этого вместо последних 4-х команд вставить команды
* LACC INAD
* LDP #BUFFER2
* SACL 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 -> регистр T, начиная с B(n-1)
MPYA *- ; B*X -> PREG, предыдущее (PREG) добавляется к (ACC)
DMOV *,AR1 ; сдвиг отсчета Х в буфере, необходимый для
; вычисления следующего выходного значения фильтра Y
B_END:
* перемножение и добавление в ACC последнего
* произведения B*X без сдвига X
LT *,AR2
MPYA *
APAC
LDP #OUTAD
SACH OUTAD ; сохранение полученного выходного отсчета
.sect "Vivod"
; Вывод выходного отсчета фильтра
OUT OUTAD, OUTPORT
CLRC INTM ; разрешение прерывания для приема следующего
; отсчета
RET
* резервирование памяти для хранения входных отсчетов
.sect "BUFFER2"
BUFFER2 .space N*16
* секция данных с к-тами фильтра, начиная с B0
.sect "BUFFER1"
BUFFER1
.word -(32768*439/10000) ; В0 = - 0,0439
.word -(32768*359/10000) ; B1 = - 0,0359
.word (32768*506/10000) ; B2 = 0,0506
.word 32768*304/10000 ; B3 = 0,0304
.word -(32768*363/10000) ; B4 = - 0,0363
.word -(32768*965/10000) ; B5 = - 0,0965
.word 32768*528/10000 ; B6 = 0,0528
.word (32768*3092/10000) ; B7 = 0,3092
.word 32768*4535/10000 ; B8 = 0,4535
.word 32768*3092/10000
.word 32768*528/10000
.word -(32768*965/10000)
.word -(32768*363/10000)
.word 32768*304/10000
.word 32768*506/10000
.word -(32768*359/10000)
.word -(32768*439/10000)
.end
4.2. Командный файл компоновки
/* Командный файл компоновки для КИХ фильтра */
-V0 /*версия нулевая*/
-e reset /* задание начального адреса счетчика программ
после загрузки */
-m nrf_in. map /* имя файла с таблицей компоновки */
-o nrf_in. out /* имя выходного файла */
nrf_in. obj /* имена компонуемых файлов */
/* Задание конфигурации памяти проектируемой системы*/
MEMORY
{
/* Определение блоков в памяти программ с заданием их начальных
адресов и длины, блоки не должны перекрываться */
PAGE 0 :
VECS : origin=0x00, length=0x0040
PROG : origin=0x0040, length=0x0300/**/
/* Определение блоков в памяти данных с заданием их начальных
адресов и длины, блоки не должны перекрываться */
PAGE 1 :
: /* предопределенный блок памяти
для размещения регистров процессора, отраженных на память */
REGS : origin=0x0000, length=0x0060
/* выделенные блоки в памяти данных для размещения секций данных
исходной программы */
BLOCK0: origin=0x0100, length=0x0100
BLOCK1: origin=0x0200, length=0x0100
BLOCK2: origin=0x0300, length=0x0100
}
/* указания по размещению секций программы в блоках
заданной выше памяти системы */
SECTIONS
{
/*размещение секции Vectors в блоке памяти
программ VECS начиная с начального адреса блока */
Vectors : {} > VECS PAGE 0
/* секции программы Init_main, Vvod, Filter, Vivod размещаются в блоке памяти программ PROG в друг за другом в указанном порядке начиная с начального адреса блока; они образуют чисто условный модуль Main в выходном файле */
Main: { * ( Init_main)
* ( Vvod)
* (Filter)
* (Vivod)
} > PROG PAGE 0
/* различные секции данных исходной программы размещаются в
выделенных блоках памяти данных */
.data : {} > BLOCK0 PAGE 1
BUFFER2 : {} > BLOCK1 PAGE 1
BUFFER1 : {} > BLOCK2 PAGE 1
}
4.3.Программа реализации рекурсивного фильтра
4.3.1. Прямая форма
Структурная схема звена второго порядка в прямой форме приведена на рис. 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 ;
OUT1 .word 0 ; выходной отсчет
S31 .word 0 ; задержанные выходные отсчеты
S41 .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
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
4.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
IN INAD, INPORT ; прием отсчета через порт ввода
* умножение входного отсчета на масштабный множитель
LT INAD
MPY MM1
LDP #IN1
SPH IN1 ; запись отсчета во входную ячейку первого звена
*при значении множителя ММ=1 необходимо убрать умножение на него;
* для этого вместо последних 4-х команд вставить команды
* LACC INAD
* LDP #IN1
* SACL IN1
.sect "Filter"
* вычисление выходного отсчета
ZAP ; (ACC) = (PREG) = 0
LT S31 ; (S31) -> регистр T
MPY B21 ; (S31)*(B21) -> PREG
LTA S21 ; предыдущее (PREG) + (ACC) -> ACC, (S21) -> T
MPY B11 ; (S21)*(B11) -> PREG
APAC ; предыдущее (PREG) + (ACC) -> ACC
EXAR ; (ACC) <-> буфер BCC
LACC IN1,16 ; (IN1) -> ACC
LT S31 ; (S31) ->T
MPY A21 ; (S31)*(A21) -> PREG
LTA S21 ; предыдущее (PREG) + (ACC) -> ACC, (S21) -> T
MPY A11 ; (S21)*(A11) -> PREG
APAC ; предыдущее (PREG) + (ACC) -> ACC
SACH S11 ; сохранение S11
LT S11 ;(S11) -> T
MPY B01 ;(S11)*(B01) -> PREG
EXAR ; (ACC) <-> буфер BCC
APAC ; предыдущее (PREG) + (ACC) -> ACC
SACH OUT1 ; сохранение выходного отчета
DMOV S21 ; сдвиг (S21) -> S31
DMOV S11 ; сдвиг (S11) -> S21
.sect "Vivod"
; Вывод выходного отсчета фильтра
LACC OUT1
LDP #OUTAD
SACL OUTAD
OUT OUTAD, OUTPORT
CLRC INTM ; разрешение прерывания для следующего отсчета
RET
.end
4.3.3. Трансформированная форма
Структурная схема звена второго порядка в трансформированной форме приведена на рис. 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 ; промежуточное значение
OUT1 .word 0 ; выходной отсчет звена
.sect "Vectors"
* Таблица векторов прерываний
B START
B BEGIN ; INT1 внешние прерывания
B BEGIN ; NT2
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
IN INAD, INPORT
* умножение входного отсчета на масштабный множитель
LT INAD
MPY MM1
LDP #IN1
SPH IN1
при значении множителя ММ=1 необходимо убрать умножение на него;
* для этого вместо последних 4-х команд вставить команды
* LACC INAD
* LDP #IN1
* SACL IN1
.sect "Filter"
* вычисление выходного отсчета
ZAP ; (ACC) = (PREG) = 0
LACC S21,16 ; S21 -> ACC
LT IN1 ; IN1 -> регистр T
MPY B01 ; (IN1)*(B01) -> PREG
APAC ; (PREG)+(ACC) -> ACC
SACH OUT1 ; сохранение выходного отсчета
LACC S11,16 ; S11 -> ACC
MPY B11 ; (IN1)*(B11) -> PREG
LTA OUT1 ; предыдущее (PREG)+(ACC) -> ACC, OUT1 -> T
MPY A11 ; (OUT1)*(A11) -> PREG
APAC ; (PREG)+(ACC) -> ACC
SACH S21 ; сохранение значения S21
MPY A21 ; (OUT1)*(A21) -> PREG
LTP IN1 ; предыдущее (PREG) - ACC, (IN1) - T
MPY B21 ; (IN1)*(B21) -> PREG
APAC ; (PREG)+(ACC) -> ACC
SACH S11 ; сохранение значения S11
.sect "Vivod"
; Вывод выходного отсчета фильтра
LACC OUT1
LDP #OUTAD
SACL OUTAD
OUT OUTAD, OUTPORT
CLRC INTM ; разрешение прерывания для следующего отсчета
RET
.end
4.4.Командный файл программного имитатора
; Командный файл имитатора
ma 0,0,0x1000,ram ; Определение ПП типа RAM с адресами 0 - 0x1000
ma 0,1,0x05f, ram ; Определение ПП типа RAM с адресами 0 - 0x05f
; (регистры, отраженные на память)
ma 0x100,1,0x0400,ram ; ПД типа RAM с адресами 0xx4ff
; Блоки Внутреннего DARAM B0, B1
ma 0x800,1,0x1200,ram ; Внешняя ПД c адресами 0xxffff
; Команды задания входного|выходного паралельных портов
; (страница 2 - пространство ввода/вывода) и подключения к ним
: файлов для чтения (infile. dat) и записи (outfile. dat)
ma 0x50,2,1,iport
ma 0x51,2,1,oport
mc 0x50,2,infile. dat, READ
mc 0x51,2,outfile. dat, WRITE
; Команда подключения к входу процессора INT1 файла t_int. dat, задающего
; период поступления внешних запросов на прерывание
pinc INT1, t_int. dat
take alias. bat ; загрузка файла с командами имитатора
load nrf_in. out ; загрузка исполняемой программы
? PC=0x00 ; установка начального значения программного счётчика
mem 0x0100 ; формирование и задание начальных адресов трех
mem1 0x0200 ; окон памяти
mem2 0x0300
sound on ; включение звуковой сигнализации
5. Расчет фильтра с помощью пакета программ FD
Приведем типичную последовательность действий по расчету цифрового фильтра при работе с пакетом FD. Для расчета и реализации фильтра следует выполнить следующие операции.
Запустите программу FD.
Выберите с помощью меню пункты Синтез, Вид фильтра (Нерекурсивный фильтр/Рекурсивный фильтр);
Задайте тип синтезируемого фильтра (ФНЧ, ФВЧ, ПФ, РФ, КОРРЕКТОР). В появившемся окне (рис.5.)
· задайте метод расчета (для КИХ-фильтра только алгоритм Ремеза) и вид импульсной характеристики;
· установите частоту дискретизации;
· задайте параметры АЧХ;
· установите рекомендуемый порядок фильтра;
· нажмите кнопку Синтез.
После окончания процедуры расчета фильтра в появившихся окнах просмотрите характеристики и коэффициенты фильтра и составьте таблицы значений коэффициентов фильтра и его импульсной характеристики.

Рис. 5. Окно выбора параметров при синтезе фильтра
6. Литература
1. Единая система программной документации. Общие положения.
ГОСТ 19.001-77
2. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. ГОСТ 19.701-90 (ИСО 5807-85). –М., 1991.
3. Общие требования к текстовым документам - ГОСТ 2.105-95
4. Яковлев процессоры обработки сигналов: методические рекомендации к лабораторным работам/ СПбГУТ. СПб, 2003
5. , , Яковлев и процессоры обработки сигналов. – СПб.: БХВ-Петербург, 2001.
6. Основы цифровой обработки сигналов: Курс лекций/ - СПб.: БХВ-Петербург, 2003.
Содержание
1. Порядок выполнения и оформления.. 1
2. Задание на проектирование.. 2
2.1. Задача 1. Реализация КИХ-фильтра на процессоре TMS320C50. 3
2.2. Задача 2. Синтез и реализация КИХ-фильтра на процессоре TMS320C50. 7
2.3. Задача 3. Реализация БИХ-фильтра на процессоре TMS320C50. 9
2.4. Задача 4. Синтез и реализация БИХ-фильтра на процессоре TMS320C50. 13
3. Методические указания по выполнению эадач.. 15
3.1. Составление программы... 15
3.1.1. Программа реализации КИХ фильтра. 15
3.1.2. Программа реализации БИХ фильтра. 16
3.2. Отладка программы... 19
3.3. Получение импульсной характеристики фильтра.. 23
3.4. Определение максимально возможной частоты дискретизации.. 23
4. Примеры программ... 24
4.1. Программа реализации нерекурсивного фильтра.. 24
4.2. Командный файл компоновки.. 26
4.3. Программа реализации рекурсивного фильтра.. 28
4.3.1. Прямая форма. 28
4.3.2. Каноническая форма. 30
4.3.3. Трансформированная форма. 32
4.4. Командный файл программного имитатора.. 34
5. Расчет фильтра с помощью пакета программ FD.. 35
6. Литература.. 36



