45096

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

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

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

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

Русский

2013-11-15

569.5 KB

34 чел.

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

РГРТУ

Кафедра РТС

 

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


 

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

9654. Факторы, формирующие профиль рисков организации 415.5 KB
  Факторы, формирующие профиль рисков организации Акционеры и инвесторы. Увеличение инвестиционных долей как собственного акционерного капитала фирмы, так и частных лиц на фоне возрастающей глобальной изменчивости экономики и финансов требует все боль...
9655. Общая характеристика экономической деятельности организации 42 KB
  Общая характеристика экономической деятельности организации Бизнес есть бизнес, в какой бы области он ни развивался, и, по определению, делать бизнес означает не что иное, как выполнять услуги, имеющие определенную коммерческую ценность...
9656. Риски производственной деятельности организации 201 KB
  Риски производственной деятельности организации Что может вызвать производственный риск. Из анализа сущности производственной деятельности можно заключить, что такой риск вызывается рядом причин, приводящих либо к снижению объемов производства, либо...
9657. Финансовые риски организации и их влияние на предпринимательство 181.5 KB
  Финансовые риски организации и их влияние на предпринимательство Основанием для оценки финансового риска по-прежнему является системный анализ сути (содержания, взаимосвязей) финансово-кредитной деятельности. Напомним, что по своему содержанию подо...
9658. Коммерческие и посреднические риски и их роль в предпринимательской деятельности 240 KB
  Коммерческие и посреднические риски и их роль в предпринимательской деятельности При осуществлении коммерческой деятельности риск возникает на различных стадиях продвижения товаров и услуг как собственно внутри страны, где работает предприниматель,...
9659. Направления государственного регулирования 32.5 KB
  Направления государственного регулирования. Коммерческая деятельность, как и любая иная предпринимательская деятельность, в значительной степени регулируется государством. Прежде всего это относится к правовым основам, особенностям создания и функци...
9660. Правовая и нормативная база государственного регулирования коммерческой деятельности 36 KB
  Правовая и нормативная база государственного регулирования коммерческой деятельности. Коммерческое право - совокупность правовых норм, разработанных для обслуживания товарного оборота и регулирующих взаимоотношения между профессиональными предп...
9661. Стимулирование коммерческой деятельности 26.5 KB
  Стимулирование коммерческой деятельности. В наше время предприятия более чем когда-либо вынуждены изыскивать новые и эффективные способы увеличения объема продаж. Для этого они в своей коммерческой деятельности прибегают к стимулированию. В течение ...
9662. Стандартизация деятельность по установлению правил и характеристик 47 KB
  Стандартизация. Стандартизация - это деятельность по установлению правил и характеристик в целях их добровольного многократного использования, направленная на достижение упорядоченности в сферах производства и обращения продукции и повышение ко...