45096

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

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

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

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

Русский

2013-11-15

569.5 KB

36 чел.

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

РГРТУ

Кафедра РТС

 

Лабораторная работа № 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 команд.


 

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

9908. Определение амплитуд и частот колебаний аппаратов химических технологий 262.5 KB
  Определение амплитуд и частот колебаний аппаратов химических технологий. Цель работы.Известно,что в процессе эксплуатации различных химических аппаратов, трубопроводов и приборов появляются всевозможные вибрации (колебания). ...
9909. Составление дифференциального уравнения, описывающего химико-технологический процесс и его решение методом конечных разностей. 198.5 KB
  Составление дифференциального уравнения, описывающего химико-технологический процесс и его решение методом конечных разностей. Цель работы. Значительное количество химических и технологических процессов можно описать дифференциальными уравнени...
9910. Древнегреческий героический эпос и Илиада Гомера 168 KB
  А.И. Зайцев Древнегреческий героический эпос и Илиада Гомера Как мы узнали в результате многолетних раскопок, начатых в 1870 г. Генрихом Шлиманом и законченных перед второ...
9911. Драматургия Еврипида и конец античной героической трагедии 196.5 KB
  В. Н. Ярхо Драматургия Еврипида и конец античной героической трагедии   Трагичнейшим из поэтов назвал Еврипида Аристотель, и многовековая посмертная слава последнего из триады великих афинских трагиков, по-видимому, целиком...
9912. Миметическое начало поэтического искусства 139 KB
  Е. Алымова, к.ф.н., СПбГУ Миметическое начало поэтического искусства Представляется само собой разумеющимся, что аристотелевская Поэтика как первое сочинение по теории художественной словесности должна была неминуемо вставать на пути каждого, кто об...
9913. Авторство и авторитет 140 KB
  Аверинцев С. С. Авторство и авторитет Оба слова, вынесенные нами в заглавие, имеют схожий облик, и сходство их отнюдь не случайно. У них одно и то же - латинское - происхождение, единая этимологическая характеристика и если их словарные з...
9914. Криптографические методы защиты информации 70.5 KB
  Криптографические методы защиты информации Шифр системы классифицируются по различным признакам: по видам защищаемой информации (текст, речь, видеоинформация), по криптографической стойкости, по принципам обеспечения защиты информации (симметричные,...
9915. Понятие информационной безопасности. Основные составляю-щие. Важность проблемы 58.5 KB
  Понятие информационной безопасности. Основные составляющие. Важность проблемы Под информационной безопасностью (ИБ) следует понимать защиту интересов субъектов информационных отношений. Ниже описаны основные ее составляющие - конфиденциальность...
9916. Распространение объектно-ориентированного подхода на информационную безопасность 79 KB
  Распространение объектно-ориентированного подхода на информационную безопасность В этой лекции закладываются методические основы курса. Кратко формулируются необходимые понятия объектно-ориентированного подхода, в соответствии с ним выделяются уровн...