_sda 0 November 21, 2021 Posted November 21, 2021 · Report post 42 минуты назад, blackfin сказал: Это ещё зачем? "Нормальные герои всегда идут в обход?" ;-) Вы с этой формулой не согласны? Вы меня заинтриговали, с нетерпением жду вашего совета. Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 7 November 21, 2021 Posted November 21, 2021 · Report post Есть такой бытрый способ, но его точность может быть для вас недостаточной: sqrt (a*a + b*b) ~ max (|a|, |b|) + min (|a|, |b|)/2 Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 21, 2021 Posted November 21, 2021 · Report post 58 минут назад, andrew_b сказал: Есть такой бытрый способ, но его точность может быть для вас недостаточной: sqrt (a*a + b*b) ~ max (|a|, |b|) + min (|a|, |b|)/2 Спасибо! Но эта формула позволяет вычислить только sqrt(a^2 + b^2). С остальными двумя корнями она не справится. Очень надеюсь что уважаемый blackfin покажет свою формулу. Quote Share this post Link to post Share on other sites More sharing options...
blackfin 3 November 22, 2021 Posted November 22, 2021 · Report post Всё просто: 1. CORDIC'ом преобразуем оба числа в показательную форму: z1 = x1 + y1*i = r1*exp(i*φ1); z2 = x2 + y2*i = r2*exp(i*φ2); 2. Вычисляем корни обоих чисел: sqrt(z1) = sqrt(r1)*exp(i*φ1/2); sqrt(z2) = sqrt(r2)*exp(i*φ2/2); 3. Находим корень произведения: sqrt(z1*z2) = sqrt(z1)*sqrt(z2) = sqrt(r1)*sqrt(r2)*exp(i*φ1/2+i*φ2/2); 4. При необходимости, CORDIC'ом преобразуем полученный корень произведения в алгебраическую форму: Re(sqrt(z1*z2)) + i*Im(sqrt(z1*z2)) = sqrt(r1)*sqrt(r2)*[cos(φ1/2+φ2/2) + i*sin(φ1/2+φ2/2)]; Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 22, 2021 Posted November 22, 2021 · Report post Отличный ход! Я знал что вы знаете... Спасибо за совет! Я о показательной форме совсем не подумал... Тогда у меня будет примерно следующий расход времени: 1). Преобразование в показательную форму и обратно = 2*N тактов (пока не знаю, выясню). А так как IP-core Кордик работает в потоковом режиме то эти такты можно не учитывать, просто добавится латентность. 2). Извлечение корня из вещественного числа = 12/2+1=7 тактов Это заметно меньше чем в предыдущих вариантах. Но 7 тактов это тоже много, я не успею всё посчитать. Проблема в том что моя реализация корня не работает в потоковом режиме. У меня извлечение выглядит так - установил данные на порт, дёрнул ireq, дождался oready, забрал вычисленный корень. Для этой задачи такой режим совершенно не годится. Режим работы должен быть потоковым. Попробую штатную IP core корня, но емнип там жуткие тормоза по тактовой частоте. Проверю, если так и есть то буду пробовать ввести конвейер в свою реализацию корня. Quote Share this post Link to post Share on other sites More sharing options...
des00 9 November 22, 2021 Posted November 22, 2021 · Report post 43 minutes ago, _sda said: Но 7 тактов это тоже много, я не успею всё посчитать. Проблема в том что моя реализация корня не работает в потоковом режиме. Если нельзя сделать потоковым, то на вход/выход карусельный арбитр и несколько последовательных блоков. Quote Share this post Link to post Share on other sites More sharing options...
1891ВМ12Я 0 November 22, 2021 Posted November 22, 2021 · Report post On 11/20/2021 at 2:11 PM, _sda said: Может кому приходилось решать подобную задачу? Как действовали? На Xilinx просто брал их CORDIC и получал корень Конечно там всегда возня с форматами, но при должном упорстве разгадать можно. Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 22, 2021 Posted November 22, 2021 · Report post 14 минут назад, des00 сказал: Если нельзя сделать потоковым, то на вход/выход карусельный арбитр и несколько последовательных блоков. Да, согласен, это вариант. Спасибо! 1 минуту назад, AVR сказал: На Xilinx просто брал их CORDIC и получал корень Конечно там всегда возня с форматами, но при должном упорстве разгадать можно. А корень чего вы получали? Quote Share this post Link to post Share on other sites More sharing options...
1891ВМ12Я 0 November 22, 2021 Posted November 22, 2021 · Report post 3 minutes ago, _sda said: А корень чего вы получали? Кажется понял, нужно из комплексного числа? В этом и сложность задачи этой темы? Комплексные у CORDIC может и есть но я не припоминаю. Quote Share this post Link to post Share on other sites More sharing options...
des00 9 November 22, 2021 Posted November 22, 2021 · Report post 10 minutes ago, _sda said: А корень чего вы получали? скорее всего имелась в виду амплитуда Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 22, 2021 Posted November 22, 2021 · Report post 47 минут назад, des00 сказал: скорее всего имелась в виду амплитуда Тоже подумал что модуль, не понял к чему это... Стандартная функция кордика... Quote Share this post Link to post Share on other sites More sharing options...
Tpeck 0 November 22, 2021 Posted November 22, 2021 · Report post On 11/20/2021 at 2:11 PM, _sda said: Динамический диапазон сигнала во входных шинах очень широкий Больше 100 дБ? Quote Share this post Link to post Share on other sites More sharing options...
Самурай 7 November 22, 2021 Posted November 22, 2021 · Report post 6 часов назад, _sda сказал: не понял к чему это... Стандартная функция кордика... ... Включает в себя в том числе и вычисление обычного квадратного корня Quote Share this post Link to post Share on other sites More sharing options...
faa 1 November 22, 2021 Posted November 22, 2021 · Report post Помнится, пришлось применить метод Понселе Посмотрите, может точности хватит. Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 22, 2021 Posted November 22, 2021 · Report post 2 часа назад, Самурай сказал: ... Включает в себя в том числе и вычисление обычного квадратного корня И...? Чем этот вариант лучше штатной IP-core? По дефолту на пятом циклоне она показала максимум Fs=36МГц, немного поколдовал - стала показывать 290МГц, солидный запас для моей тактовой. Так что с этим вопросом я окончательно определился. 2 часа назад, faa сказал: Помнится, пришлось применить метод Понселе Посмотрите, может точности хватит. Этот метод я применяю уже лет 15, поверьте, здесь ему делать нечего. Кордик рулит. 3 часа назад, Tpeck сказал: Больше 100 дБ? Около того. А вы с какой целью интересуетесь? Quote Share this post Link to post Share on other sites More sharing options...