Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ADSP2101
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
-JonnS-
Знатоки, помогите пожалоста разобратся в ASM коде для ADSP2101.
Оригинал проекта: http://forum.cqham.ru/viewtopic.php?t=9639
Прилагаю кусок дезасмб. кода где данные от АЦП перемножются на Sin и Cos чтоб получить обе составляющие комплексного сигнала. Еще каждий период сигнала перемножаеться и на значение из таблиц. График значения в етой таблице похожи на разспределене Гауса, поетому так ее и назвал.
Вопрос в том почему перемножаем сигнал на таблица Гаусса (адрес 0х03B5) ?
Спасибо заранее.
P.S. Частота семплов 48kHz, частота сигнала 1кHz.
el34
если потом(после "гаусса") домножаем еще раз на sin/cos и складываем -имеем полосовой фильтр
а "гаусс" это наверно таблица коэфф FIR LP фильтра ....
ну или (если еще раз не домножаем) то может быть это часть синхр. детектора....
сорри - асм не смотрел....но похоже так....
-JonnS-
Не совсем точно написал в сообщене. Сначало умножаем на "Гаус" а потом на опорний Sin/Cos и складываем :
mx0 = dm(ADC_Left) ; Captured data
my0 = dm(i1, m0) ; Get Reference Sin(t) value.
mf = mx1 * my0 (rnd) ; =Round(RefSin(t)*Gauss(T))
mr = mr + mx0 * mf (ss) ; Multiplay and Accumulate real part
; =SUM(Sin(t)*RefSin(t)*Gauss(T))
Ето полосовой фильтр, да?
el34
тож не очень ....
откуда mx1...?
да и cos чето не видно...

в хорошем вопросе уже большая часть ответа....
тут этого нету
.....
-JonnS-
Спасибо за ответ и желание помоч.
Извиняюсь в спешке стерь wacko.gif вместе с коментарии и инструкцию: mx1 = dm(i3, m3) ; Get Gauss data value

Кусок кода относился только для реальная часть сигнала, - там умножение только на sin.
Вот код где произходить умножение с накоплением обоих состовляющих:
Код
ROM:03A9                 cntr = 480             ; Capture 480 periods signal
ROM:03AA                 do All_Per until ce
ROM:03AB                 mr = 0                 ; Clear Summator
ROM:03AC                 ena sec_reg
ROM:03AD                 mr = 0
ROM:03AE                 dis sec_reg
ROM:03AF                 cntr = 48              ; One period input signal
ROM:03B0                 do One_Per until ce
ROM:03B2                 mx0 = dm(ADC_Left)     ; Captured data
ROM:03B3                 mx1 = dm(i3, m3)       ; Get Gauss data value
ROM:03B3                                        ; not increment pointer m0==0
ROM:03B3                                        ; Values in table is positive
ROM:03B3                                        ; range 0x0000 .. 0x7FFF
ROM:03B4                 my0 = dm(i1, m0)       ; Get Reference Sin(t) value.
ROM:03B4                                        ; with autoincrement pointer
ROM:03B4                                        ; (m0==1 -> set in Init_measure())
ROM:03B5                 mf = mx1 * my0 (rnd)   ; =Round(RefSin(t)*Gauss(T))
ROM:03B6                 mr = mr + mx0 * mf (ss); Multiplay and Accumulate real part
ROM:03B6                                        ; =SUM(Sin(t)*RefSin(t)*Gauss(T))
ROM:03B6                                        ; (ss) first and second var
ROM:03B6                                        ; are signed variables
ROM:03B7                 ena sec_reg
ROM:03B8                 mx0 = dm(ADC_Left)     ; LEFT Playback Data Input
ROM:03B9                 mx1 = dm(i3, m3)       ; Get Gauss data value
ROM:03B9                                        ; not increment pointer m0==0
ROM:03B9                                        ; Values in table is positive
ROM:03B9                                        ; range 0x0000 .. 0x7FFF
ROM:03BA                 my0 = dm(i2, m0)       ; Get Reference Cos(t) value.
ROM:03BA                                        ; with autoincrement pointer
ROM:03BA                                        ; (m0==1 -> set in Init_measure())
ROM:03BB                 mf = mx1 * my0 (rnd)   ; =Round(RefCos(t)*Gauss(T))
ROM:03BC                 mr = mr + mx0 * mf (ss); Multiplay and Accumulate imaginery part
ROM:03BC                                        ; =SUM(Sin(t)*RefCos(t)*Gauss(T))
ROM:03BC                                        ; (ss) first and second var
ROM:03BC                                        ; are signed variables
ROM:03BD                 dis sec_reg
ROM:03BE
ROM:03BE One_Per:                               ; CODE XREF: Capture_DATA+18j
ROM:03BE                 modify(i3, m0)         ; Increment Gauss data pointer
ROM:03BE                                        ; m0==1 -> set in Init_measure()
ROM:03BF                 af = mr0 + af          ; ay1, ay0, af [MSB LSB]
ROM:03BF                                        ; is accumulator periods
ROM:03C0                 ar = mr1 + ay0 + C
ROM:03C1                 ay0 = ar
ROM:03C2                 ar = mr2 + ay1 + C
ROM:03C3                 ay1 = ar
ROM:03C4                 ena sec_reg
ROM:03C5                 af = mr0 + af
ROM:03C6                 ar = mr1 + ay0 + C
ROM:03C7                 ay0 = ar
ROM:03C8                 ar = mr2 + ay1 + C
ROM:03C9                 ay1 = ar
ROM:03CA                 dis sec_reg
ROM:03CB
ROM:03CB All_Per:
el34
опять надо додумывать....
может все же m3=0? (по мне так - вряд ли)
вижу
mx0 = dm(ADC_Left) ; некое знач из адреса (конст.???)
mx1 = dm(i3, m3) ;умножили на нек значен из адреса в i3 (конст. - если без инкримента ?????)
в цикле на значения таблицы(синуса?) из адреса в i1++....
сложили с накоплением.....

оно Вам надо?
а я сдаюсь....
yaghtn
Цитата(-JonnS- @ May 24 2007, 00:12) *
Вопрос в том почему перемножаем сигнал на таблица Гаусса (адрес 0х03B5) ?



"Преобразование Фурье", analog.com.ru/Public/5.pdf
Ответ на 25 странице: "Взвешивание с использованием функции окна для уменьшения эффекта расширения спектра"
-JonnS-
Спасибо бОльшое yaghtn!
Прямо в точку! Огромное Вам уважение и a14.gif
beer.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.