Maverick_ 15 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба Добрый день Пожалуйста разобраться с коркой вычисления atan Нашел корку - запустил симуляцию (в атаче архив), но не пойму как по выходам определить угол. Аналогичную корку нащел здесь на форуме Помогите понять как понимать данные выдаваемые коркой и переводить в угол PS Времени нет сесть разорбраться сейчас, но обязательно это сделаю позже... atan.7z Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба страницы документа 4-5, режим вектор 03-Zakharov-Algoritmy-CORDIC-p-353.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuSTA 0 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба входная theta ноль, x и y входные параметра, в строке 91 дефайном определить что выдавать будет: радианы или градусы. Смотреть выходную theta - это и есть угол выраженные в соотвествующих единицах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 3 мая, 2023 Опубликовано 3 мая, 2023 · Жалоба наконец появилось время доразобраться написал тестбенч для define RADIAN_16... получил как проверить выходные данные на "калькуляторе" не соображу/запутался... в матлабе для первой пары данных atan(15/20)=0.6435 сделал мат операции с результатом симуляциии 24734/32768=0.7548 24734/65636=0.3774 2^16=65636 2^15=32768 числа разные на симуляции и в матлабе ... или погрешность вычисления в кордике? или я не правильно считаю? cordic.v cordic_vhd_tst.vhd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 мая, 2023 Опубликовано 4 мая, 2023 · Жалоба прошу помогите разобраться - время не мой друг сейчас... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 4 мая, 2023 Опубликовано 4 мая, 2023 · Жалоба 1 hour ago, Maverick_ said: прошу помогите разобраться - время не мой друг сейчас... 1. Как понимаю код не ваш. 2. Если сделать в тб не как у вас, а сделать пары 15/20, 150/200, 1500/2000, результат будет другой. будет 30356 (почему не знаю, вопрос к автору). Если взять таблицу углов, а первый угол там 45 градусов, то получается 45*30356/25735 = 53,0802 градуса. а atan(15/20)*180/pi = 36.87, но atan(20/15)*180/pi = 53,1301. Опять же вопрос к автору что он считает 3. Вот ваша же тема)) Мы же уже обсуждали. Зачем взяли мутный код, не потятно от кого и без сопроводительной документации? ЗЫ. Автор использует таблицу углов в режиме фиксированной точки. А именно выдает значение в диапазоне где то -180.00000 .... + 179.99805, местоположение фиксированной точки где-то 2^9 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 5 4 мая, 2023 Опубликовано 4 мая, 2023 · Жалоба 48 минут назад, Maverick_ сказал: прошу помогите разобраться - время не мой друг сейчас... а вы в тестбенче проверьте крайние и красивые значения, типа 0 градусов, 30, 60, 90, градусов, 180 градусов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 мая, 2023 Опубликовано 4 мая, 2023 · Жалоба не мой Вы правы des00 мне надо вичислять φ = arctan( Q/I) и желательно в пайплайне... понял корка кривая... жаль... (в очередной раз убеждаюсь что OpenCores доверять надо на 1%) Может кто-то может поделиться рабочей коркой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 4 мая, 2023 Опубликовано 4 мая, 2023 · Жалоба 4 minutes ago, Maverick_ said: Может кто-то может поделиться рабочей коркой? эмм, я же вам дал ссылку на генератор кордиков в режиме atan.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 мая, 2023 Опубликовано 4 мая, 2023 · Жалоба 19 minutes ago, des00 said: эмм, я же вам дал ссылку на генератор кордиков в режиме atan.... Огромное спасибо!!!! сейчас запущу симуляцию... PS Посмотрел время созданя поста - 10 лет прошло да и к сожалению память подводит - все не упомнишь ... Добавил в ветку Ссылки на готовые описания модулей на форуме - в первом сообщении Так не забудиться))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 мая, 2023 Опубликовано 4 мая, 2023 · Жалоба 6 hours ago, des00 said: запустил по умолачанию (вообще не было проблем с запуском) как я понял с описания описание - pipeline если можно поясните пожалуйста параметры parameter int pN = 8 , // 0...15 parameter int pIDAT_W = 9 , parameter int pMAGN_W = pIDAT_W + 2 , parameter int pMAGN_PRECISION = pN , // 0..pN parameter bit pMAGN_SCALE_DISABLE = 0 pN - задаем разрядность данных pMAGN_PRECISION - точность ? что остальные обозначают? ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 4 мая, 2023 Опубликовано 4 мая, 2023 · Жалоба 13 hours ago, Maverick_ said: если можно поясните пожалуйста параметры parameter int pN = 8 , // 0...15 Код генерируется на количество итераций/шагов 16, это определяется дельтой угла на каждом шаге алгоритма (45градусов/2^[0:15]). По умолчанию алгоритму требуется 16 тактов, но если требуется меньше латентность и можно пожертвовать точностью/разрешающей способностью, то можно уменьшить количество шагов, без перегенерации корки. 13 hours ago, Maverick_ said: parameter int pIDAT_W = 9 , разрядность входных данных в дополнительном коде 13 hours ago, Maverick_ said: parameter int pMAGN_W = pIDAT_W + 2 , Разрядность вектора амплитуды(магнтитуды), из-за того что амплитуда равна sqrt(x^2 + y^2), представление этого числа требует +2 бит. (формат магнитуды в файле readme кстати указан тоже) 13 hours ago, Maverick_ said: parameter int pMAGN_PRECISION = pN , // 0..pN Точность рассчета магнитуды(шагов), т.к. кордик на каждом шаге делит число на 2^i и сравнивает, то чтобы не было потери точности (x/y не уходили в 0), по умолчанию это делается на полной разрядности (x/y умножаются на 2^N), но это приводит к росту ресурса. В тех применениях, где можно пожервовать точностью ради ресуса, можно ее уменьшить. 13 hours ago, Maverick_ said: parameter bit pMAGN_SCALE_DISABLE = 0 Честная амплитуда требует умножения результата на масштабирующий коэффициент, который зависит от количества шагов алгоритма и сходится к 1/1.647. Но это требует умножителя) Если например делать коррелятор по амплитуде, то там не нужно умножать, ведь все равно ищем максимум. В общем экономия ресурса) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 5 мая, 2023 Опубликовано 5 мая, 2023 · Жалоба спасибо за помощь des00 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 4 октября, 2023 Опубликовано 4 октября, 2023 · Жалоба des00 подскажите пожалуйста входные данные в Вашем описании как я понимаю положительные, т.е. находятся в 1 квадранте пытаюсь сравнить результаты с matlab но у меня не сходиться (в матлабе использую функцию atan2(Y,X)) прошу помощи разобраться PS работы много, а желание разобраться осталось cordic_script_des00.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 4 октября, 2023 Опубликовано 4 октября, 2023 · Жалоба 1 hour ago, Maverick_ said: подскажите пожалуйста входные данные в Вашем описании как я понимаю положительные, т.е. находятся в 1 квадранте Там же есть файлик readme.txt в нем указано Quote в папку py лежит скрипт для генерации корки в папке tb лежит тест для корок и сгенерированная корка кордика с разрядностью фазы 18 бит. для запуска теста надо запустить матлабовский скрипт cordic_golden_data.m и настроить желаемые пороги ошибок в тесте разрдяность входных данных в cordic_golden_data.m и в tb должны совпадать !!! диапазон фазы в радианах -pi ... + pi в градусах -180 .. + 180 нормировка фазы (местоположение фиксированной точки) в радианах 2**(cANGLE_W-1-2) в градусах 2**(cANGLE_W-1-8) нормировка амплитуды (местоположение фиксированной точки) в 2**(pMAGN_W-pIDAT_W-2), естественно если поставить pMAGN < pIDAT_W + 2, то никакой фикированной точки в выходной амплитуде не будет. Входные данные и выходная магнитуда представлены в ЗНАКОВОМ формате, т.е. по сути знаковый бит в магнитуде всегда равен нулю. после генерации корки количество стадий кордика, разрядность входных данных и выходной магнитуды можно произвольно менять, без перегенерации корки(!!!) Поэтому там любые данные на декартовой плоскости Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться