45096

Программирование КИХ-фильтра на языке ассемблера процессора ADSP-2181

Лабораторная работа

Информатика, кибернетика и программирование

Разработка программы КИХ-фильтра заданного типа и с заданными характеристиками на языке ассемблера ADSP-2181. Изучение характеристик спроектированного фильтра с использование программы DFT.ASM. Изучение преобразований типовых дискретных сигналов при прохождении через КИХ-фильтры.

Русский

2013-11-15

569.5 KB

30 чел.

Федеральное агентство образования РФ

РГРТУ

Кафедра РТС

 

Лабораторная работа № 4

по дисциплине «Техника цифровой обработки сигналов»

Программирование КИХ-фильтра на языке ассемблера процессора ADSP-2181

                                                                                                        Выполнил:

студент 514 группы                                                                                                      Андреев Р.Н.                                                                                                         Проверил:

Сальников Н.И.

Рязань 2009

Цель работы:

         Разработка программы КИХ-фильтра заданного типа и с заданными характеристиками на языке ассемблера ADSP-2181. Изучение характеристик спроектированного фильтра с использование программы DFT.ASM. Изучение преобразований типовых дискретных сигналов при прохождении через КИХ-фильтры.

Подготовка к работе.

Вариант №1:

         Для синтеза фильтра используем пакет расширения MATLAB. Получим коэффициенты фильтра, а также АЧХ/ФЧХ и импульсную характеристику:

АЧХ и ФЧХ:

Импульсная характеристика:

Текст программы.

/*___________________________________________________________________

DFT.ASM         ADSP-2181 Дискретное преобразование Фурье

 Программа выполняет преобразование

 исходной дискретной последовательности input(n) длиной N

 отсчётов в дискретный спектр real(k)+j*imag(k) длиной N

 спектральных отсчётов в соответствии с формулой

 

                  N-1

 real(k)+j*imag(k) = SUM input(n)[C - j*S]; k=0 to N-1,

                     n=0

 где C=cos(2*pi*k*n/N), S=sin(2*pi*k*n/N), j=sqrt(-1)

 

___________________________________________________________________*/

#define N 64               // Определение символической константы N,

     //количество входных отсчётов N=64        

.section/data data1;    // DM, начало секции данных,

     // data1 - раздел, который содержит данные

//.VAR input[N]="test64_02.dat";    // Организовать в DM входной буфер с символи-

.VAR input[N]="1bp24.txt";        // ческим  именем input длиной N и загрузить

             // в буфер содержимое файла инициализации

 // "test ... .dat". Файл инициализации содержит

 // исходную последовательность отсчётов

         

.VAR real[N];   // Организовать в DM выходные буферы длиной N 

.VAR imag[N];    // для хранения вычисленных программой спект-

.VAR spectr[N];   // ральных отсчётов: real - для действительных

    // составляющая спектра, imag - для мнимых

     // составляющих, spectr - для амплитудных

     // значений дискретных спектральных отсчётов  

              

.section/pm   pm_da;    // PM, начало секции данных,  

     // pm_da - раздел, который содержит данные   

.VAR sine[N]="sine64_00.dat";  // Организовать в PM  буферы длиной N         

.VAR cos[N]="cos64_00.dat";  // c символическими именами sine и cos и за-  

          // грузить в них файлы инициализации

          // "sine64_00.dat" и "cos64_00.dat". Файлы

           // инициалиции содержат таблицы дискретных

           // значений синусов и косинусов              

           

.section/pm interrupts;    // PM, начало секции  для хранения

      // векторов прерываний                        

__reset:JUMP start; rti; rti; rti;  // 0x0000: reset                           

           rti; rti; rti; rti;  // 0x0004: IRQ2                            

           rti; rti; rti; rti;  // 0x0008: IRQL1                    

              rti; rti; rti; rti;  // 0x000c: IRQL0                           

              rti; rti; rti; rti;  // 0x0010: SPORT0 tx                       

              rti; rti; rti; rti;  // 0x0014: SPORT1 rx                       

              rti; rti; rti; rti;  // 0x0018: IRQE                            

              rti; rti; rti; rti;  // 0x001c: BDMA                            

              rti; rti; rti; rti;  // 0x0020: SPORT1 tx or IRQ1               

              rti; rti; rti; rti;  // 0x0024: SPORT1 rx or IRQ0               

              rti; rti; rti; rti;  // 0x0028: timer                           

              rti; rti; rti; rti;  // 0x002c: power down                      

.section/pm seg_code;       // PM, начало секции программного кода        

start:  M0=1;        // Содержимое регистров модификации, обеспе-   M1=1;                                     // чивающее последовательное обращение к со-  

 M2=1;        // седним ячейкам буферов                     

 M3=1;

 M7=1;

 I0=input;       // В индексном регистре адрес ячейки входного

         // буфера input, адрес входного отсчёта       

 L0=64;              // Длина входного буфера input, буфер

         // циклический                                

 I1=imag;       // В индексном регистре адрес ячейки выходного

         // буфера imag, адрес выходного отсчёта       

 L1=0;        // Выходной буфер нециклический               

 I2=real;       // В индексном регистре адрес ячейки выходного

         // буфера real, адрес выходного отсчёта       

 L2=0;         // Выходной буфер нециклический               

 I3=spectr;       // В индексном регистре адрес ячейки выходного

         // буфера spectr, адрес выходного отсчёта     

 L3=0;         // Выходной буфер нециклический               

 

dft:             I6=sine;             // В индексном регистре адрес ячейки буфера

     // sine, адрес дискретного значения синуса    

 L6=64;   // Длина буфера sine, буфер циклический       

 I7=cos;     // В индексном регистре адрес ячейки буфера

     // cos, адрес дискретного значения косинуса   

 L7=64;     // Длина буфера cos, буфер циклический        

 

 I5=0;

 L5=0;    

          

 CNTR=N; DO outre UNTIL CE; // Внешний цикл вычисления real (k)

                                                       // по изменению k                           

 

 

 M6=I5;               // Содержимое регистра модификации перемен-

                            // ное для реализации чтения таблицы cos

                            // с прореживанием при изменении k          

                               

 MR=0;               // Сброс выходного регистра МАС             

 

 CNTR=N; DO calcre UNTIL CE; // Внутренний цикл вычисления  real (k) по

                                                        // изменению n                             

 MX0=DM(I0,M0); MY0=PM(I7,M6);

calcre:               MR=MR+MX0*MY0(SS);

   

 DM(I2,M2)= MR1;            // Сохранение  real (k) в буфере              

 

outre:                MODIFY(I5,M7);          // Подготовка адреса таблицы cos 

                                                                  // в следующем внутреннем цикле             

 I5=0;

 L5=0;    

          

 CNTR=N; DO outim UNTIL CE; // Внешний цикл вычисления imag (k)

                                                        // по изменению k                           

 

 M6=I5;

 

 MR=0;

 

 CNTR=N; DO calcim UNTIL CE; // Внутренний цикл вычисления imag (k)

                                                         // по изменению n                          

 

 MX0=DM(I0,M0); MY0=PM(I6,M6);

calcim:               MR=MR-MX0*MY0(SS);

 

 DM(I1,M1)= MR1;                        // Сохранение  imag (k) в буфере           

  

outim:                MODIFY(I5,M7);                     // Подготовка адреса таблицы sine

                                                                             // в следующем внутреннем цикле            

 

 I1=imag;

 I2=real;    

 I3=spectr;  

 

 CNTR=N; DO outsp UNTIL CE; // Цикл вычисления spectr(k)= [real(k)]^2 +

                                                       // + [imag(k)]^2                            

 MR=0;

 MX0=DM(I1,M1); MY0=MX0;

 MR=MX0*MY0(SS);                   // Получение  [imag(k)]^2                   

 

 AX0=MR1;

 MX0=DM(I2,M2); MY0=MX0;

 MR=MX0*MY0(SS);                   // Получение  [real(k)]^2                   

 

 AY0=MR1;

 AR=AX0+AY0;

 

outsp:               DM(I3,M3)=AR;                           // Сохранение [real(k)]^2 + [imag(k)]^2

                                                       // в буфере spectr                          

               

                               

end:                     IDLE;                                     // Перевод в состояние ожидания прерывания,

                                                                          // в режим с малым потреблением

Выполнение работы.

5) Отредактированный файл, содержащий коэффициенты заданного фильтра, выглядит так:

6) Получим спектр импульсной характеристики проектируемого фильтра с помощью программы ДПФ:

После модификации в программе изменилась только одна строка:

//.VAR input[N]="test64_02.dat";   // старое значение

.VAR input[N]="1bp24.txt";        //новое

График окна input:

Содержимое окна input полностью соответствует импульсной характеристике, подсчитанной ранее, но т.к. коэффициентов было 25, а размер input соответствует 64, то оставшиеся заполняются нулями.

Графики построенные симулятором:

Реальная часть спектра:

C=cos(2*pi*k*n/N)

Мнимая часть спектра:

S=sin(2*pi*k*n/N)

Спектр  рассчитывается по формуле:

[real(k)]^2 + [imag(k)]^2

7-9) Откроем файл проекта LR4.dpj. Добавим к файлам инициализации файл с рассчитанными коэффициентами КИХ-фильтра из папки Exemple5. Вызовем пограмму FIR.asm и произведём её трансляцию. Далее выполним программу до её конца.

10) Графики входного и выходного сигналов, полученные после выполнения программы: 

 

 

11) Получим характеристики выполненной программы (время выполнения, объём):

В ADSP-2181 при частоте внешнего кварцевого резонатора 50МГц и напряжении питания 5В время выполнения одного цикла команд составляет 25нс. Так как CYCLES=1A8F16=679910, то время выполнения программы равно tпр=25нс*6799=169 мс. Объём программы оценим по количеству команд, содержащихся в промежутке от метки start до метки end (информационное окно Disassembly). Объем программы равен 24 команд.


 

А также другие работы, которые могут Вас заинтересовать

81484. ЛПНП и ЛПВП - транспортные, формы холестерина в крови, роль в обмене холестерина. Гиперхолестеринемия. Биохимические основы развития атеросклероза 110.43 KB
  Содержание холестерола и его эфиров в ЛППП достигает 45; часть этих липопротеинов захватывается клетками печени через рецепторы ЛПНП которые взаимодействуют и с апоЕ и с апоВ100. Транспорт холестерола в составе ЛПНП. Рецепторы ЛПНП. На ЛППП оставшиеся в крови продолжает действовать ЛПлипаза и они превращаются в ЛПНП содержащие до 55 холестерола и его эфиров.
81485. Механизм возникновения желчнокаменной болезни (холестериновые камни). Применение хенодезокеихолевой кислоты для лечения желчнокаменной болезни 103 KB
  Выделение холестерола в жёлчь должно сопровождаться пропорциональным выделением жёлчных кислот и фосфолипидов удерживающих гидрофобные молекулы холестерола в жёлчи в мицеллярном состоянии У большинства больных желчнокаменной болезнью активность ГМГКоАредуктазы повышена следовательно увеличен синтез холестерола а активность 7αгидроксилазы участвующей в синтезе жёлчных кислот снижена. В результате синтез холестерола увеличен а синтез жёлчных кислот из него замедлен что приводит к диспропорции количества холестерола и жёлчных кислот...
81486. Общая схема источников и путей расходования аминокислот в тканях. Динамическое состояние белков в организме 134.22 KB
  Значение аминокислот для организма в первую очередь определяется тем что они используются для синтеза белков метаболизм которых занимает особое место в процессах обмена веществ между организмом и внешней средой. Аминокислоты непосредственно участвуют в биосинтезе не только белков но и большого количества других биологически активных соединений регулирующих процессы обмена веществ в организме таких как нейромедиаторы и гормоны производные аминокислот. Аминокислоты служат донорами азота при синтезе всех азотсодержащих небелковых...
81487. Переваривание белков. Протеиназы - пепсин, трипсин, химотрипсин; проферменты протеиназ и механизмы их превращения в ферменты. Субстратная специфичность протеиназ. Экзопептидазы и эндопептидазы 110.2 KB
  Подавляющее их количество входит в состав белков которые гидролизуются в ЖКТ под действием ферментов протеаз пептидщцролаз. Под действием всех протеаз ЖКТ белки пищи распадаются на отдельные аминокислоты которые затем поступают в клетки тканей. Источником Н является Н2СО3 которая образуется в обкладочных клетках желудка из СО2 диффундирующего из крови и Н2О под действием фермента карбоангидразы карбонатдегидратазы: Н2О СО2 → Н2СО3 → НСО3 H Диссоциация Н2СО3 приводит к образованию бикарбоната который с участием специальных...
81488. Диагностическое значение биохимического анализа желудочного и дуоденального сока. Дать краткую характеристику состава этих соков 109.1 KB
  Анализ желудочного сока является очень важным методом исследования больных с заболеваниями желудка кишечника печени желчного пузыря крови и пр Составная часть Единицы СИ Азот: небелковый 143 343 ммоль л мочевины и аммиака 499 999 ммоль л аминокислот 143 57 ммоль л Хлориды 1551 ммоль л Свободная хлористоводородная кислота 20 ммоль л Мочевая кислота 476 1189 мкмоль л Калий 56 353 мэкв л ммоль л Натрий 313 1893 мэкв л ммоль л Общая кислотность 4060 ммоль л Свободная соляная кислота 2040 ммоль л Связанная соляная кислота...
81489. Протеиназы поджелудочной железы и панкреатиты. Применение ингибиторов протеиназ для лечения панкреатитов 115.09 KB
  Протеолитические ферменты трипсин химотрипсин эластаза карбоксипептидазы А и В выделяются панкреацитами в неактивном состоянии что предотвращает самопереваривание клеток. Трипсин. Трипсиноген и трипсин получены в кристаллическом виде полностью расшифрована их первичная структура и известен молекулярный механизм превращения профермента в активный фермент. В опытах in vitro превращение трипсиногена в трипсинкатализируют не только энтеропептидаза и сам трипсин но и другие протеиназы и ионы Са2.
81490. Трансаминирование: аминотрансферазы; коферментная функция витамина В6. Специфичность аминотрансфераз 144.39 KB
  Из реакции переноса NH2 наиболее важны реакции трансаминирования . 346 относится к альдиминам или шиффовым основаниям во время реакции аминокислота 1 вытесняет остаток лизина и образуется новый альдимин 2. На второй частиреакции те же стадии протекают в противоположном направлении: пиридоксаминфосфат и вторая 2кетокислота образуют кетимин который иэомеризуется в альдимин. Механизм реакции трансаминирования открыт в 1937 году советскими учеными А.
81491. Аминокислоты, участвующие в трансаминировании; особая роль глутаминовой кислоты. Биологическое значение реакций трансаминирования. Определение трансаминаз в сыворотке крови при инфаркте миокарда и болезнях печени 119.25 KB
  Определение трансаминаз в сыворотке крови при инфаркте миокарда и болезнях печени. Чрезвычайно широкое распространение трансаминаз в животных тканях у микроорганизмов и растений их высокая резистентность к физическим химическим и биологическим воздействиям абсолютная стереохимическая специфичность по отношению к Lаминокислотам а также высокая каталитическая активность в процессах трансаминирования послужили предметом детального исследования роли этих ферментов в обмене аминокислот. Таким образом трансаминазы катализируют опосредованное...
81492. Окислительное дезаминирование аминокислот; глутаматдегидрогеназа. Непрямое дезаминирование аминокислот. Биологическое значение. 248.67 KB
  Непрямое дезаминирование аминокислот. Дезаминирование аминокислот реакция отщепления αаминогруппы от аминокислоты в результате чего образуется соответствующая αкетокислота безазотистый остаток и выделяется молекула аммиака. Безазотистый остаток используется для образования аминокислот в реакциях трансаминирования в процессах глюконеогенеза кетогенеза в анаплеротических реакциях для восполнения убыли метаболитов ОПК в реакциях окисления до СО2 и Н2О.