dips11 0 12 октября, 2023 Опубликовано 12 октября, 2023 · Жалоба Доброго времени суток. Кто-то может поделиться ссылками или открытыми источниками на Cordic алгоритм на verilog, который бы выдавал адекватно точные SIN и COS в зависимости от входящего угла. Я промоделировал достаточно кодов, и так и не нашел такой, выход которого бы совпадал с идеальными SIN и COS в рамках теоретической точности. Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 октября, 2023 Опубликовано 12 октября, 2023 · Жалоба так раз вы уже настолько продвинулись, сделайте собственный. Начните с целочисленного прототипа в каком нить матлабо-питоне, а потом он минут за 20 переносится на верилог. А там и глянем получилась у вас теоретическая точность или нет) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dips11 0 12 октября, 2023 Опубликовано 12 октября, 2023 · Жалоба В том то и дело, не знаю от чего оттолкнуться. Все коды выполнены по похожему алгоритму, но все выдают разные значения. Я пытался ковыряться с кодом CORDICA, но видимо упирался в какую-то тонкость, и ничего лучше уже готового так и не получилось. По теории точность может достигать 0,001 градуса уже при 16 итерациях вычисления , но от этого результата та я далек на десятки градусов) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 октября, 2023 Опубликовано 12 октября, 2023 · Жалоба 26 minutes ago, dima6656 said: В том то и дело, не знаю от чего оттолкнуться. Все коды выполнены по похожему алгоритму, но все выдают разные значения. Я пытался ковыряться с кодом CORDICA, но видимо упирался в какую-то тонкость, и ничего лучше уже готового так и не получилось. По теории точность может достигать 0,001 градуса уже при 16 итерациях вычисления , но от этого результата та я далек на десятки градусов) вангую что у вас с нормировкой что-то не то, типа как тут . Ну и теория теорией, но надо же понимать что в целочисленной арифметике, все зависит не только от угла, но еще и от входной амплитуды данных, от разрядности представления угла, от усечения битовой разрядности (если такое есть внутри). а оттолкнуться от статьи А. В. Захаров, В. М. Хачумов "Алгоритмы CORDIC. Современное состояние и перспективы" там этот алгоритм на пальцах разобран, перенести на любой ЯП дело получаса максимум Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dips11 0 12 октября, 2023 Опубликовано 12 октября, 2023 · Жалоба 1 час назад, des00 сказал: Ну и теория теорией, но надо же понимать что в целочисленной арифметике, все зависит не только от угла, но еще и от входной амплитуды данных, от разрядности представления угла, от усечения битовой разрядности (если такое есть внутри). Тоже отдельный момент. После многих попыток я уже приблизительно не понимаю какая точность может быть достигнута, при входном угле разрядностью [31:0], выходном синусе разрядностью [15:0] (то есть размахом от -32767 до 32767) и при 16 итерациях вычисления. Отсюда я не могу отделить хороший код от плохого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 октября, 2023 Опубликовано 12 октября, 2023 · Жалоба 48 minutes ago, dima6656 said: Тоже отдельный момент. После многих попыток я уже приблизительно не понимаю какая точность может быть достигнута, при входном угле разрядностью [31:0], выходном синусе разрядностью [15:0] (то есть размахом от -32767 до 32767) и при 16 итерациях вычисления. Отсюда я не могу отделить хороший код от плохого. поэтому я вам сразу и сказал: откладываем все корки, берем теорию, ручку, тетрадь, разбираемся в алгоритме, пишем эталонную модель на любом ЯП, обкатываем со всех сторон, делаем целочисленную модель, исследуем и все станет ясно. Работы дня на 4. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 12 октября, 2023 Опубликовано 12 октября, 2023 · Жалоба 1 hour ago, dima6656 said: Тоже отдельный момент. После многих попыток я уже приблизительно не понимаю какая точность может быть достигнута, при входном угле разрядностью [31:0], выходном синусе разрядностью [15:0] (то есть размахом от -32767 до 32767) и при 16 итерациях вычисления. Отсюда я не могу отделить хороший код от плохого. Входная разрядность 32 бит при выходной в 16 бит не имеет смысла. Эмпирически для выходной разрядности в N бит требуется N+4 разрядность операций и N ... N+4 число шагов алгоритма. Отсюда и практическая входная разрядность не боле N ... N+4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 13 октября, 2023 Опубликовано 13 октября, 2023 · Жалоба 17 hours ago, des00 said: а оттолкнуться от статьи А. В. Захаров, В. М. Хачумов "Алгоритмы CORDIC. Современное состояние и перспективы" там этот алгоритм на пальцах разобран, перенести на любой ЯП дело получаса максимум Собственно, именно это уже делали - 4 строка в поиске: Реализация CORDIC-алгоритма Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 45 13 октября, 2023 Опубликовано 13 октября, 2023 · Жалоба В 13.10.2023 в 09:19, Raven сказал: Собственно, именно это уже делали - 4 строка в поиске: Реализация CORDIC-алгоритма Дмитрий Дайнеко (автор статьи) - коллега уважаемого @des00 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dips11 0 13 октября, 2023 Опубликовано 13 октября, 2023 · Жалоба 7 часов назад, Raven сказал: Собственно, именно это уже делали - 4 строка в поиске: Реализация CORDIC-алгоритма В этой статье на 41 странице есть строчка : "Теперь уже можно сказать, что вычисленное значение синуса и косинуса не будет превышать ошибки в 0,001°". Это значит, что при выходной разрядности синуса - 16. Максимальная ошибка sin(0,001°)*(2^16) , что равно около 1? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dde29 0 15 марта Опубликовано 15 марта · Жалоба 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 года, глаза б мои не смотрели)))) Но он работает, да и в качестве самой математики вычислений - самое то, для новичка, думаю... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться