Jump to content

    
_sda

Реализация извлечения корня

Recommended Posts

20 minutes ago, _sda said:

Около того. А вы с какой целью интересуетесь?

Чтобы понять насколько оправданы 24 бита )

Ну и 100 дБ - это уже очень и очень до фига.

Хотя если это звук, то возможно.

Share this post


Link to post
Share on other sites
28 minutes ago, _sda said:

Около того.

Путаетесь в показаниях.. :)

 

On 11/20/2021 at 2:11 PM, _sda said:

... есть две шины комплексных данных разрядностью 24 бита RE и 24 бита IM в каждой шине.

Две шины комплексных данных по 24 бита, это ~24,5 бит для вещественной огибающей. Так что ДД будет примерно: 24,5*6,02 + 1,76 ≈ 150 дБ.

Видимо, 50 дБ где-то потерялись по дороге.. :)

 

Share this post


Link to post
Share on other sites
2 minutes ago, blackfin said:

Видимо, 52 дБ где-то потерялись по дороге.. :)

Может у него потери на обработку 0,001 дБ и КАМ256, тогда может )

Или звук, где пороговое SNR около 40 дБ и он должен мега помеху давить в соседнем канале, ибо аналоговая фильтрация не сдюжит.

Share this post


Link to post
Share on other sites
12 часов назад, blackfin сказал:

Путаетесь в показаниях.. :)

 

Две шины комплексных данных по 24 бита, это ~24,5 бит для вещественной огибающей. Так что ДД будет примерно: 24,5*6,02 + 1,76 ≈ 150 дБ.

Видимо, 50 дБ где-то потерялись по дороге.. :)

 

Но вы же посчитали динамический диапазон самой шины данных, а у всего приёмного тракта он будет заметно меньше. Ясный перец что размер шины можно уменьшить на несколько бит, я об этом говорил в самом начале. А оно мне надо?

Share this post


Link to post
Share on other sites
1 час назад, _sda сказал:

И...? Чем этот вариант лучше штатной IP-core?

Не знаю... от Вас было много горя в голосе, что Ваш алгоритм вычисления квадратного корня выполняется слишком много тактов и Вас не устраивает... В то же время, Вы были в восторге от CORDIC-а, который можно конвейеризировать... Мне показалось странном, что Вы не сложили два + два, вот и решил немного Вам помочь...:) Хорошо, что с этим вопросом Вы все-таки определились...

Share this post


Link to post
Share on other sites

Что ж тут поделаешь, материалистический дуализм - единство и борьба противоположностей. А насчёт своего алгоритма корня признаю - увлёкся и зациклился.

Share this post


Link to post
Share on other sites

Коллеги, а может кто-то помочь разобраться с кордиком Альтеры?  Режим Vector Translate Function. Что у них там за формат такой хитрый?

Приводят константу К с точностью до 12-го знака, а сами пишут "has no fixed value". Как из выходного кода получить нормальные значения?

Дополнительной информации найти не удалось.

image.thumb.png.d709efbca5a71d8a02cca52de1a09af4.png

Share this post


Link to post
Share on other sites
16 hours ago, _sda said:

Коллеги, а может кто-то помочь разобраться с кордиком Альтеры?  Режим Vector Translate Function. Что у них там за формат такой хитрый?

Приводят константу К с точностью до 12-го знака, а сами пишут "has no fixed value". Как из выходного кода получить нормальные значения?

не с точностью, а сходится к числу, при устремлении количества итераций в бесконечность. Число зависит от количества шагов, ЕМНП, после 8го шага, оно константа, для типового альтеровского 18 битного умножителя.

Про формат не знаю, но скорей всего, что-то типа fixed point u1.16 или u1.17 и умножитель знаковый или беззнаковый стоит

Share this post


Link to post
Share on other sites
5 часов назад, des00 сказал:

не с точностью, а сходится к числу, при устремлении количества итераций в бесконечность. Число зависит от количества шагов, ЕМНП, после 8го шага, оно константа, для типового альтеровского 18 битного умножителя.

Про формат не знаю, но скорей всего, что-то типа fixed point u1.16 или u1.17 и умножитель знаковый или беззнаковый стоит

Спасибо! Вы реально с этой коркой работали? У меня отношение правильного значения к вычисленному примерно 1,26 - довольно далеко от указанного коэффициента. А с фазой как? При подаче на вход двух одинаковых компонент на выходе имею 35 градусов вместо положенных 45.  Вот незадача...

Share this post


Link to post
Share on other sites
1 hour ago, _sda said:

Спасибо! Вы реально с этой коркой работали? Т.е. число должно стоять на входе корки несколько тактов (например 8), а не один? Это я не пробовал, в описании эту тонкость не видел. Я считал что корка потоковая... И у меня отношение правильного значения к вычисленому примерно 1,26 - довольно далеко от указанного коэффициента. А с фазой как? При подаче на вход двух одинаковых компонент на выходе имею 35 градусов вместо положеных 45.  Вот незадача...

с этой нет, я кордик сам делал, там работы минут на 15-20. Точность зависит от количества шагов.

Вот например для кордика с разрядностью углов 16 бит и коэффициента масштабирования 8 бит в формате u1.7,  до 16 шагов

  localparam int cANGLE_W = 16 ;  // script defined

  typedef logic signed [cANGLE_W-1 : 0] angle_t;

  localparam angle_t cALPHA_DEG [0 : 15] = '{ 8192, 4836, 2555, 1297, 651, 326, 163, 81, 41, 20, 10, 5, 3, 1, 1, 0};

  localparam int cK_W = 8 ;  // script defined

  localparam logic [cK_W-1 : 0] cK [0 : 15]  = '{ 181, 162, 157, 156, 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155 };

# angle in degrees '{45, 26.5649, 14.035, 7.12463, 3.57605, 1.79077, 0.895386, 0.444946, 0.22522, 0.109863, 0.0549316, 0.0274658, 0.0164795, 0.00549316, 0.00549316, 0}
# k '{1.41406, 1.26563, 1.22656, 1.21875, 1.21875, 1.21094, 1.21094, 1.21094, 1.21094, 1.21094, 1.21094, 1.21094, 1.21094, 1.21094, 1.21094, 1.21094}

Вот только сейчас, подняв старый проект, обратил внимание на цифры. 1.6, хмм, странная константа, откуда она у них взялась то.

ЗЫ. Ну и как видно, количество шагов ограничено разрядностью угла. Если у вас углы 8 бит, то и делать больше чем 8 шагов не имеет смысла.

ЗЗЫ. Про углы, есть еще особенность масштабирования и интерпретации. У меня скрипт мог делать кордик где 360 градусов это 2^N, а мог, где градусы задаются в нативном формате, например s8.8 (+-180 градусов). Там отображение нативное. Как работает корка от альтеры незнаю.

 

Share this post


Link to post
Share on other sites
17 минут назад, des00 сказал:

странная константа, откуда она у них взялась то.

Спасибо! Очень похоже на то что мне придётся отказаться от этой корки. Я лет 15 назад писал свой кордик (ещё когда модемами занимался), но он не параметризован. Копаться в столь древних исходниках то ещё удовольствие, поэтому решил попробовать альтеровскую корку, показалось что это будет быстрее.

Сейчас вижу что параметризовать старый проект всё-же будет быстрее. Что-то альтеровцы там намутили...

Share this post


Link to post
Share on other sites

По поводу корней п

1 hour ago, _sda said:

Спасибо! Очень похоже на то что мне придётся отказаться от этой корки. Я лет 15 назад писал свой кордик (ещё когда модемами занимался), но он не параметризован. Копаться в столь древних исходниках то ещё удовольствие, поэтому решил попробовать альтеровскую корку, показалось что это будет быстрее.

Сейчас вижу что параметризовать старый проект всё-же будет быстрее. Что-то альтеровцы там намутили...

посмотрите еще здесь:

https://patents.su/4-1260951-matrichnoe-ustrojjstvo-dlya-izvlecheniya-kvadratnogo-kornya.html

Share this post


Link to post
Share on other sites
12 минут назад, Serhiy_UA сказал:

По поводу корней п

посмотрите еще здесь:

https://patents.su/4-1260951-matrichnoe-ustrojjstvo-dlya-izvlecheniya-kvadratnogo-kornya.html

Спасибо, но для меня вопрос с корнями уже решён. Теперь дело за реализацией.

Share this post


Link to post
Share on other sites
4 часа назад, des00 сказал:

Вот только сейчас, подняв старый проект, обратил внимание на цифры. 1.6, хмм, странная константа, откуда она у них взялась то.

Откуда она взялась у них как раз известно и понятно:) А вот откуда у Вас такие константы... Хотя... можно предположить, что на константу 1.646 выходной результат надо таки делить, что я предполагаю, Вы и делаете, т.к. 1/1.646 это подозрительно близко к 155/256 и где-то даже выполняется равенство 1/1.646 = 1.2109/2...:)

Share this post


Link to post
Share on other sites
43 минуты назад, Самурай сказал:

Хотя... можно предположить, что на константу 1.646 выходной результат надо таки делить

А у меня нужно умножать:

RE - 10000

IM - 20000

Вычисленный радиус - 18411

Должен быть - 22361

А-а-а, точно, там ещё на 2 нужно умножить... Спасибо!

Осталось с фазой разобраться.

А в гайде за это дело молчок...

image.png.b82cdc12d0160894513ae2ebd4453e3a.png

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.