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

Cordic на Verilog

Доброго времени суток. Кто-то может поделиться ссылками или открытыми источниками на  Cordic алгоритм на verilog, который бы выдавал адекватно точные SIN и COS в зависимости от входящего угла. Я промоделировал достаточно кодов, и так и не нашел такой, выход  которого бы совпадал с идеальными  SIN и COS  в рамках теоретической точности. Заранее спасибо.

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


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

так раз вы уже настолько продвинулись, сделайте собственный. Начните с целочисленного прототипа в каком нить матлабо-питоне, а потом он минут за 20 переносится на верилог. А там и глянем получилась у вас теоретическая точность или нет)

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


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

В том то и дело, не знаю от чего оттолкнуться. Все коды выполнены по похожему алгоритму, но все выдают разные значения. Я пытался ковыряться с кодом CORDICA, но видимо упирался в какую-то тонкость, и ничего лучше уже готового так и не получилось.
По теории точность может достигать 0,001 градуса  уже при 16 итерациях вычисления , но от этого результата та я далек на десятки градусов)

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


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

26 minutes ago, dima6656 said:

В том то и дело, не знаю от чего оттолкнуться. Все коды выполнены по похожему алгоритму, но все выдают разные значения. Я пытался ковыряться с кодом CORDICA, но видимо упирался в какую-то тонкость, и ничего лучше уже готового так и не получилось.
По теории точность может достигать 0,001 градуса  уже при 16 итерациях вычисления , но от этого результата та я далек на десятки градусов)

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

а оттолкнуться от статьи А. В. Захаров, В. М. Хачумов "Алгоритмы CORDIC. Современное состояние и перспективы" там этот алгоритм на пальцах разобран, перенести на любой ЯП дело получаса максимум

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


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

1 час назад, des00 сказал:

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

Тоже отдельный момент. После многих попыток я уже приблизительно не понимаю какая точность может быть достигнута, при входном угле разрядностью [31:0], выходном синусе разрядностью [15:0]  (то есть размахом  от -32767 до 32767) и при 16 итерациях вычисления. Отсюда я не могу отделить хороший код от плохого.

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


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

48 minutes ago, dima6656 said:

Тоже отдельный момент. После многих попыток я уже приблизительно не понимаю какая точность может быть достигнута, при входном угле разрядностью [31:0], выходном синусе разрядностью [15:0]  (то есть размахом  от -32767 до 32767) и при 16 итерациях вычисления. Отсюда я не могу отделить хороший код от плохого.

поэтому я вам сразу и сказал: откладываем все корки, берем теорию, ручку, тетрадь, разбираемся в алгоритме, пишем эталонную модель на любом ЯП, обкатываем со всех сторон, делаем целочисленную модель, исследуем и все станет ясно. Работы дня на 4.

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


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

1 hour ago, dima6656 said:

Тоже отдельный момент. После многих попыток я уже приблизительно не понимаю какая точность может быть достигнута, при входном угле разрядностью [31:0], выходном синусе разрядностью [15:0]  (то есть размахом  от -32767 до 32767) и при 16 итерациях вычисления. Отсюда я не могу отделить хороший код от плохого.

Входная разрядность 32 бит при выходной в 16 бит не имеет смысла. 
Эмпирически  для выходной разрядности в N бит требуется N+4 разрядность операций и N ... N+4 число шагов  алгоритма.
Отсюда и практическая входная разрядность не боле N ... N+4 

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


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

17 hours ago, des00 said:

а оттолкнуться от статьи А. В. Захаров, В. М. Хачумов "Алгоритмы CORDIC. Современное состояние и перспективы" там этот алгоритм на пальцах разобран, перенести на любой ЯП дело получаса максимум

Собственно, именно это уже делали - 4 строка в поиске:

Реализация CORDIC-алгоритма

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


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

В 13.10.2023 в 09:19, Raven сказал:

Собственно, именно это уже делали - 4 строка в поиске:

Реализация CORDIC-алгоритма

Дмитрий Дайнеко (автор статьи) - коллега уважаемого @des00  🙂

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


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

7 часов назад, Raven сказал:

Собственно, именно это уже делали - 4 строка в поиске:

Реализация CORDIC-алгоритма

В этой статье на 41 странице есть строчка : "Теперь уже можно сказать, что вычисленное значение синуса и косинуса не будет превышать ошибки в 0,001°". Это значит, что при выходной разрядности синуса -  16. Максимальная ошибка
sin(0,001°)*(2^16) , что равно около 1?

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


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

On 10/13/2023 at 8:50 PM, den6656 said:

В этой статье на 41 странице есть строчка : "Теперь уже можно сказать, что вычисленное значение синуса и косинуса не будет превышать ошибки в 0,001°". Это значит, что при выходной разрядности синуса -  16. Максимальная ошибка
sin(0,001°)*(2^16) , что равно около 1?

Здрасьте, я - автор статьи) Писал очень давно, не все помню. Но - что точно можно сказать - точность вычислений зависит от разрядности и количества поворотов вектора на плоскости. В цифре - количества итераций. В реальной жизни можно промоделировать разные варианты, разные разрядности и количество итераций. Получить синус/косинус в виде отчетов и исследовать на паразитные составляющие спектра в MathCAD/MatLAB - добиться допустимых значений и не усложнять себе жизнь.

On 3/15/2024 at 1:10 PM, dde29 said:

Здрасьте, я - автор статьи) Писал очень давно, не все помню. Но - что точно можно сказать - точность вычислений зависит от разрядности и количества поворотов вектора на плоскости. В цифре - количества итераций. В реальной жизни можно промоделировать разные варианты, разные разрядности и количество итераций. Получить синус/косинус в виде отчетов и исследовать на паразитные составляющие спектра в MathCAD/MatLAB - добиться допустимых значений и не усложнять себе жизнь.

Честно говоря, я щас пользуюсь другим модулем кордика, более лаконичным - а на тот мой древний 2011 года, глаза б мои не смотрели)))) Но он работает, да и в качестве самой математики вычислений - самое то, для новичка, думаю...

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


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

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

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

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

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

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

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

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

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

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