реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
-JonnS-
сообщение May 23 2007, 20:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-05-07
Из: Болгария
Пользователь №: 27 577



Знатоки, помогите пожалоста разобратся в ASM коде для ADSP2101.
Оригинал проекта: http://forum.cqham.ru/viewtopic.php?t=9639
Прилагаю кусок дезасмб. кода где данные от АЦП перемножются на Sin и Cos чтоб получить обе составляющие комплексного сигнала. Еще каждий период сигнала перемножаеться и на значение из таблиц. График значения в етой таблице похожи на разспределене Гауса, поетому так ее и назвал.
Вопрос в том почему перемножаем сигнал на таблица Гаусса (адрес 0х03B5) ?
Спасибо заранее.
P.S. Частота семплов 48kHz, частота сигнала 1кHz.
Прикрепленные файлы
Прикрепленный файл  Capture_Data.rar ( 2.83 килобайт ) Кол-во скачиваний: 40
 
Go to the top of the page
 
+Quote Post
el34
сообщение May 23 2007, 20:45
Сообщение #2


инженер
****

Группа: Свой
Сообщений: 717
Регистрация: 4-03-05
Пользователь №: 3 064



если потом(после "гаусса") домножаем еще раз на sin/cos и складываем -имеем полосовой фильтр
а "гаусс" это наверно таблица коэфф FIR LP фильтра ....
ну или (если еще раз не домножаем) то может быть это часть синхр. детектора....
сорри - асм не смотрел....но похоже так....


--------------------
........поужинали вяленой рыбой, кот лежал рядом, молчали.......
Go to the top of the page
 
+Quote Post
-JonnS-
сообщение May 23 2007, 21:04
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-05-07
Из: Болгария
Пользователь №: 27 577



Не совсем точно написал в сообщене. Сначало умножаем на "Гаус" а потом на опорний 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))
Ето полосовой фильтр, да?
Go to the top of the page
 
+Quote Post
el34
сообщение May 23 2007, 21:21
Сообщение #4


инженер
****

Группа: Свой
Сообщений: 717
Регистрация: 4-03-05
Пользователь №: 3 064



тож не очень ....
откуда mx1...?
да и cos чето не видно...

в хорошем вопросе уже большая часть ответа....
тут этого нету
.....


--------------------
........поужинали вяленой рыбой, кот лежал рядом, молчали.......
Go to the top of the page
 
+Quote Post
-JonnS-
сообщение May 23 2007, 22:06
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-05-07
Из: Болгария
Пользователь №: 27 577



Спасибо за ответ и желание помоч.
Извиняюсь в спешке стерь 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:
Go to the top of the page
 
+Quote Post
el34
сообщение May 23 2007, 22:48
Сообщение #6


инженер
****

Группа: Свой
Сообщений: 717
Регистрация: 4-03-05
Пользователь №: 3 064



опять надо додумывать....
может все же m3=0? (по мне так - вряд ли)
вижу
mx0 = dm(ADC_Left) ; некое знач из адреса (конст.???)
mx1 = dm(i3, m3) ;умножили на нек значен из адреса в i3 (конст. - если без инкримента ?????)
в цикле на значения таблицы(синуса?) из адреса в i1++....
сложили с накоплением.....

оно Вам надо?
а я сдаюсь....


--------------------
........поужинали вяленой рыбой, кот лежал рядом, молчали.......
Go to the top of the page
 
+Quote Post
yaghtn
сообщение May 31 2007, 10:00
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 7-11-05
Из: Чебоксары
Пользователь №: 10 546



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



"Преобразование Фурье", analog.com.ru/Public/5.pdf
Ответ на 25 странице: "Взвешивание с использованием функции окна для уменьшения эффекта расширения спектра"
Go to the top of the page
 
+Quote Post
-JonnS-
сообщение Jun 1 2007, 07:57
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-05-07
Из: Болгария
Пользователь №: 27 577



Спасибо бОльшое yaghtn!
Прямо в точку! Огромное Вам уважение и a14.gif
beer.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 04:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.02309 секунд с 7
ELECTRONIX ©2004-2016