Главная » Просмотр файлов » Глинченко А.С. Принципы организации и программирования сигнальных процессоров ADSP-21xx (2000)

Глинченко А.С. Принципы организации и программирования сигнальных процессоров ADSP-21xx (2000) (1264223), страница 14

Файл №1264223 Глинченко А.С. Принципы организации и программирования сигнальных процессоров ADSP-21xx (2000) (Глинченко А.С. Принципы организации и программирования сигнальных процессоров ADSP-21xx (2000)) 14 страницаГлинченко А.С. Принципы организации и программирования сигнальных процессоров ADSP-21xx (2000) (1264223) страница 142021-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 14)

Выходные сигналы звеньев y(n) при прямойформе их реализации вычисляются в соответствии с разностным уравнением:y( n ) = b0 x( n ) + b1 x( n − 1 ) + b2 x( n − 2 ) − a1 y( n − 1 ) − a 2 y( n − 2 ) ,в котором х(n) являются текущими отсчетами входных сигналов звеньев,x(n-1), x(n-2) и y(n-1), y(n-2) – предыдущими (задержанными) отсчетамивходных и выходных сигналов звеньев, b0, b1 , b2 , a1 , a2 - весовымикоэффициентами звеньев.

Каждый отсчет выходного сигнала звенапредставляет взвешенную сумму текущего отсчета входного сигнала и двухпредыдущих отсчетов входного и выходного сигналов звеньев. Выходнойсигнал предыдущего звена является входным сигналом следующего звена.Входной сигнал первого звена является входным сигналом фильтра, авыходной сигнал последнего звена – выходным сигналом фильтра. Входныесигналя всех звеньев умножаются также на масштабные коэффициенты m<1,исключающие переполнения сумматоров фильтра.

Их значения принимаютобычно равными ближайшей целой степени двойки: m ≈2 − r , где r=1, 2, 3,…−коэффициенты сдвига. При этом масштабирование сигналов x(n)осуществляется путем сдвига вправо их двоичных значений на r бит.Отсчеты сигналов x(n-2), x(n-1), y(n-2), y(n-1) размещаются в указаннойпоследовательности в памяти данных процессора по возрастающим адресамв соответствии с порядком включения звеньев, образуя сигнальную памятьфильтра в виде циклического буфера data_buffer длиною 4*L. Коэффициентыr, b2 , b1 , b0 , a2 , a1 образуют память коэффициентов фильтра. В такойпоследовательности они размещаются в циклическом буфере coef_bufferдлиною 6*L памяти программ согласно порядку включения звеньев.Коэффициенты звеньев в каскадной структуре могут иметь максимальные помодулю значения, не превышающие 2.

Для представления их в дробномформате 1.15 все коэффициенты звеньев нужно поделить на 2, а выходныесигналы звеньев y(n) после завершения обработки сдвинуть влево на 1 бит.Задачи инициализации рекурсивного фильтра совпадают с описаннымивыше задачами инициализации нерекурсивного цифрового фильтра. Поэтомуони могут использовать один и тот же модуль подпрограммы инициализациифильтров flt_init. Отличие их заключается только в содержимомподключаемого файла коэффициентов <coef.dat> и файла констант <const.h>.Файл <const.h> для рекурсивного фильтра имеет следующую структуру:.CONST n_sec = <число звеньев>, ldbuf = <4*n_sec>, lcbuf = <6*n_sec>;В файле задается число секций (звеньев) n_sec и зависящие от него значениядлины буфера данных ldbuf и коэффициентов lcbuf, например:77.CONST n_sec = 4, ldbuf = 16, lcbuf = 24;В приводимом модуле подпрограммы обработки прерыванийрекурсивного фильтра iir_proc из подключаемого файла <const.h>передаются значения констант n_sec = L, ldbuf = 4*L и lcbuf = 6*L,объявляются метка входа proc_start, внешние переменные data_buffer иcoef_buffer и в соответствии с разностным уравнением осуществляетсяпокаскадная алгоритмическая обработка очередного отсчета сигнала,который считывается с приемного регистра порта RX0.Обработка выполняется в цикле по числу звеньев фильтра.

В концекаждого цикла осуществляются операции сдвига или обновления сигнальнойпамяти звена в соответствии с операторами присваивания: x(n-2) = x(n-1),x(n-1) = x(n), y(n-2) = y(n-1), y(n-1) = y(n). Входной отсчет следующегозвена приравнивается выходному отсчету предыдущего звена: .Выходной отсчет данных всего фильтра записывается в передающийрегистр последовательного порта TX0.Все коэффициенты и значения данных представляются в формате 1.15.{Модуль подпрограммы обработки рекурсивного фильтра}.M0DULE/ RAM iir_proc;.INCLUDE <const.h>;.EXTERNAL data_buffer, coef_buffer;.ENTRY proc_start;Параметры вызова:I0 = начало буфера сигнальной памятиL0 = 4*L длина буфера сигнальной памяти фильтраI4 = начало буфера коэффициентов звеньевL4 = 5*L длина буфера памяти коэффициентов фильтраM0, M4 = 1Возвращаемые значения:TX0 = выходной отсчет фильтра y(n) (с округлением)I0 = указывает начало буфера данныхI4 = указывает начало буфера коэффициентовL0 = длина буфера сигнальной памятиL4 = длина буфера коэффициентов фильтраM0, M4 = 1Изменяемые регистры:SE, SI, MX0, MX1, MY0, MR, SR, CNTRВремя выполнения: (8* L/2)+5 цикловПредполагается, что все коэффициенты и значения данных представленыв формате 1.15}proc_start: CNTR = n_sec;M1 = − 3;{CNTR = число секций}78SI = RX0;{чтение отсчета данных x(n) с порта SPORT0}DO num UNTIL CE;SE = DM(I4, M4);{число масштабирующих сдвигов r}SR = ASHIFT SI (HI);{промасштабированное значение x(n)}MX0 = DM(I0, M0), MY0 = PM(I4, M4);{чтение x(n-2), b2}MR = MX0*MY0 (SS), MX1 = DM(I0, M0), MY0 = PM(I4, M4);{MR= b2*x(n-2); чтение x(n-1), b1}MR = MR+MX1*MY0 (SS), MY0 = PM(I4, M4);{MR = MR+b1*x(n-1); чтение b0}MR = MR+SR1*MY0 (SS), MX0 = DM(I0, M0), MY0 = PM(I4, M4);{MR = MR+b0*x(n); чтение y(n-2), -a2}MR = MR+MX0*MY0 (SS), MX0 = DM(I0, M1), MY0 = PM(I4, M4);{MR = MR+(-a2*y(n-2); чтение y(n-1), -a1}DM(I0, M0) = MX1, MR = MR+MX0*MY0 (RND);{x(n-2) = x(n-1); MR = MR+(-a1*y(n-1) = y(n)/2 }IF MV SAT MR;{включить насыщение}SR1 = MR1;{SR1 = y(n)/2 c насыщением}SR = IF NOT MV ASHIFT MR1 BY 1 (HI);{SR1 = y(n)}DM(I0, M0)=SR1; {x(n-1) = x(n) }DM(I0, M0)=MX0; {y(n-2) = y(n-1)}DM(I0, M0)=SR1; {y(n-1) = y(n)}num: SI = SR1;{x(n) = y(n)};TX0 = SR1; {запись y(n) из SR1 в регистр передачи SPORT0}RTI;{возврат в главную программу}.ENDMOD;12.3.

ПОДПРОГРАММА ВЫЧИСЛЕНИЯ СИНУСОИДАЛЬНОЙ ФУНКЦИИСинусоидальная функция y = sin(x) широко используется в цифровойобработке сигналов. В данной подпрограмме она аппроксимируетсяформулой:y =sin (x)=3.140625x+0.02026367x2-5.325196x3+0.5446778x4+1.800293x5Аргументом функции является нормированная переменная x, связанная сугловой мерой −180°≤ϕ°<180° или −π≤ϕ [рад]<π соотношениями x = ϕ°/180или x = ϕ [рад]/π, −1≤ x < 1. Непосредственно вычисления по формулевыполняются для первого квадранта, соответствующего значениям 0 ≤ x ≤ 0,5или 0 ≤ ϕ°≤ 90°, 0 ≤ ϕ [рад] ≤ π/2. Для других квадрантов используютсясоотношения: sin(−ϕ)=−sin(ϕ), sin(180-ϕ)=sin(ϕ) и sin(ϕ-180)=−sin(ϕ).Подпрограмма анализирует значение аргумента x и приводит его к первомуквадранту.

Знак результата вычисления при необходимости корректируется сучетом номера квадранта. Значения x представляются в дробном формате1.15. Углу 180° в этом формате соответствует максимальное положительноезначение x 0x7FFF (примерно плюс единица), углуминус 180° -79максимальное (по абсолютной величине) отрицательное значение x 0х8000(минус единица), углу 90° отвечает 16-ричное значение x 0x400 (плюс 0,5).Коэффициенты C1 ,C 2 ,C3 ,C 4 ,C 5 аппроксимирующего полинома инициализированы в буфере sin_coef [5] памяти данных в формате 4.12, содержащем 1разряд знака, 3 разряда целой части и 12 разрядов дробной части.Функцию cos(x) можно вычислить с учетом соотношения:cos(ϕ)=sin(ϕ+π/2).Подпрограмма выполняет вычисления синуса с погрешностью в пределахдвух единиц младшего разряда.{Подпрограмма аппроксимации синусоидальной функции}.MODULE Sin_Approximation;{Параметры вызоваAX0 = аргумент х в формате 1.15Возвращаемые параметрыAR = функция у = sin(x) в формате 1.15Изменяемые регистрыAY0, AF, AR, MY1, MX1, MF, MR, SR, I3, M3, L3, CNTRВремя выполнения 25 циклов }.VAR/DM sin_coef [5];.INIT sin_coef: 0х3240,0х0053, 0хААСС, Ох08В7, 0х1ССЕ;.ENTRY sin;sin:I3=^sin_coef; {Указатель на буфер коэффициентов}М3 = 1;L3 = 0;AY0=0x4000;AR=AX0, AF=AX0 AND AY0; {проверка 2-го или 4-го квадрантов}IF NE AR=−AX0;{если да, то инвертировать выход}AY0=0x7FFF;AR=AR AND AY0;{удаление знакового бита}MY1=AR;MF=AR*MY1 (RND), MX1=DM(I3, M3); {MF = х2 , MX1= C1}MR=MX1*MY1 (SS), MX1=DM (I3, M3); {MR = C1x, MX1= C2}CNTR=3;DO approx UNTIL CE;MR=MR+MX1*MF (SS);approx: MF=AR*MF (RND), MX1=DM (I3, M3);MR=MR+MX1*MF (SS); {MR=MR+ C5 х5}SR=ASHIFT MR0 BY 3 (HI);{приведение sin(x) к}SR=SR OR LSHIFT MR0 BY 3 (LO); {формату 1.15}AR=PASS SR1;IF LT AR=PASS AY0; {если необходимо, то насыщение}80AF=PASS AX0;IF LT AR=−AR;RTS;.ENDM0D;{если необходимо, то инвертировать}12.4.

ПОДПРОГРАММА УМНОЖЕНИЯ МАТРИЦ С ОДИНАРНОЙ ТОЧНОСТЬЮДанная подпрограмма умножает 2 входные матрицы: матрицу X размераRxS (R строк, S столбцов), находящуюся в памяти данных, и матрицу Yразмера SxT (S строк, Т столбцов), находящуюся в памяти инструкций.Матрица-результат Z размера RxT (R строк, Т столбцов) записывается впамять данных.Подпрограмма требует инициализации нескольких регистров перед еевызовом (см. параметры вызова).

Регистр SE должен содержать значение, накоторое производится сдвиг результата каждого умножения для приведенияего к нужному формату. Например, для того чтобы получить матрицурезультат в формате 1.31 умножением матриц формата 1.15, нужноустановить SE в нуль.. M0DULE matmul;{Умножение матриц с одинарной точностьюSZ (i, j ) = ∑ X (i, k ) ⋅ Y (k , j ) ; i = 0...R , j = 0...T ;k =0X – матрица RxS; Y – матрица SxT ; Z – матрица RxT;Параметры вызоваI1 – указатель на Z-матрицу в памяти данныхI2 – указатель на Х-матрицу в памяти данных, сохраняемую по строкамI6 – указатель на Y-матрицу в памяти программ, сохраняемую по строкамL0, L1, L2, L4, L5, L6 = 0, М0 = 1, M1 = S, М4 = 1, M5 = Т;SE – масштабный множительCNTR = RВозвращаемые параметрыБуфер Z, заполненный по строкамИзменяемые регистрыI0, I1, I2, I4, I5, MR, MX0, MY0, SRВремя выполнения – ((S+8)×Т+4)×R+2+2 циклов;}.ENTRY spmm;spmm: DO row_loop UNTIL CE;I5=I6;{ I5 = начало Y }CNTR=M5;DO column_loop UNTIL CE;I0=I2; {Установить I0 на текущую строку X}I4=I5; {Установить I4 на текущий столбец Y}81CNTR=M1;MR=0, MX0=DM(I0,M0), MY0=PM(I4, M5);{Выборка I-го данного}DO element_loop UNTIL CE;element_loop:MR=MR+MX0*MY0(SS),MX0=DM(I0,M0),MY0=PM(I4,M5);SR=ASHIFT MR1 (HI), MY0=DM(I5, M4); {Обновление I5}SR=SR OR LSHIFT MR0 (LO); {Последний сдвиг}column_loop:DM(I1, M0)=SR1; {Сохранение результата}row_loop: MODIFY (I2, M1); {Обновление I2 на следующую строку X}RTS;.ENDM0D;КОНТРОЛЬНЫЕ ВОПРОСЫ1.

Каковы структура ассемблерной программы и основные директивы ассемблера?2. Что понимается под программным модулем и как он объявляется?3. Как объявляются константы в ассемблере ADSP-2181?4. Как объявляются переменные в ассемблере ADSP-2181?5. Как осуществляется инициализация переменных (буферов)?6. Какие директивы используются для межмодульных связей?7. Каково назначение директивы INCLUDE?8. Какие комментарии в модулях подпрограмм являются обязательными?9. Какова структура программ цифровой фильтрации?10. Что нужно изменить в главном модуле программы цифровой фильтрации приисполнении ее сигнальным процессором ADSP-2181?11. Покажите схему подключения АЦП и ЦАП при программной реализациицифровых фильтров.12.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее