Перейти к содержанию
    

Добрый день

Пожалуйста разобраться с коркой вычисления atan Нашел корку - запустил симуляцию (в атаче архив), но не пойму как по выходам определить угол. 

Аналогичную корку нащел здесь на форуме

Помогите понять как понимать данные выдаваемые коркой и переводить в угол

PS Времени нет сесть разорбраться сейчас, но обязательно это сделаю позже...

 

atan.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

страницы документа 4-5, режим вектор

03-Zakharov-Algoritmy-CORDIC-p-353.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

входная theta ноль, x и y входные параметра, в строке 91 дефайном определить что выдавать будет: радианы или градусы. Смотреть выходную theta - это и есть угол выраженные в соотвествующих единицах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наконец появилось время доразобраться

написал тестбенч для define RADIAN_16...

получил 

image.thumb.png.800f47198bc22efceaa0060f02003bc7.png

как проверить выходные данные на "калькуляторе" не соображу/запутался...

в матлабе для первой пары данных

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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. Опять же вопрос к автору что он считает

image.thumb.png.4797efe1433454dcc2ae8d4d51fc34a1.png

3. Вот ваша же тема)) Мы же уже обсуждали. Зачем взяли мутный код, не потятно от кого и без сопроводительной документации?

ЗЫ. Автор использует таблицу углов в режиме фиксированной точки. А именно выдает значение в диапазоне где то -180.00000 .... + 179.99805, местоположение фиксированной точки где-то 2^9

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

48 минут назад, Maverick_ сказал:

прошу помогите разобраться - время не мой друг сейчас...

а вы в тестбенче проверьте крайние и красивые значения, типа 0 градусов, 30, 60, 90, градусов, 180 градусов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не мой Вы правы des00

мне надо вичислять φ = arctan( Q/I) и желательно в пайплайне...

понял корка кривая... жаль... (в очередной раз убеждаюсь что OpenCores доверять надо на 1%) 

Может кто-то может поделиться рабочей коркой?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Maverick_ said:

Может кто-то может поделиться рабочей коркой?

эмм, я же вам дал ссылку на генератор кордиков в режиме atan....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 minutes ago, des00 said:

эмм, я же вам дал ссылку на генератор кордиков в режиме atan....

Огромное спасибо!!!!

сейчас запущу симуляцию...

PS Посмотрел время созданя поста - 10 лет прошло да и к сожалению память подводит - все не упомнишь ...

Добавил в ветку Ссылки на готовые описания модулей на форуме - в первом сообщении

Так не забудиться)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, des00 said:

 

запустил по умолачанию (вообще не было проблем с запуском)

image.thumb.png.04b06e7b740a45ccff226ea2bbc73693.png

 

как я понял с описания описание - 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      - точность ?

что остальные обозначают? ))) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.  Но это требует умножителя) Если например делать коррелятор по амплитуде, то там не нужно умножать, ведь все равно ищем максимум. В общем экономия ресурса)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

des00 

подскажите пожалуйста входные данные в Вашем описании как я понимаю положительные, т.е. находятся в 1 квадранте

пытаюсь сравнить результаты с matlab но у меня не сходиться (в матлабе использую функцию atan2(Y,X))

прошу помощи разобраться

PS работы много, а желание разобраться осталось

cordic_script_des00.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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, то никакой
фикированной точки в выходной амплитуде не будет. 

Входные данные и выходная магнитуда представлены в ЗНАКОВОМ формате, т.е. по сути знаковый бит в магнитуде всегда равен нулю.

после генерации корки количество стадий кордика, разрядность входных данных и выходной магнитуды можно произвольно менять, без перегенерации корки(!!!)

Поэтому там любые данные на декартовой плоскости

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...