_sda 0 November 20, 2021 Posted November 20, 2021 · Report post Коллеги, есть две шины комплексных данных разрядностью 24 бита RE и 24 бита IM в каждой шине. После комплексного перемножения этих шин получаю результат с 48 бит/компонента. И теперь из этого комплексного произведения хочу извлечь квадратный корень. Так как для извлечения корня компоненты нужно возвести в квадрат то получаем уже 96 бит/компонента. Это же будут жуткие тормоза на высоких тактовых частотах. Динамический диапазон сигнала во входных шинах очень широкий, максимум могу ужать на 2...3 бита, это не решит проблему. Может кому приходилось решать подобную задачу? Как действовали? Quote Share this post Link to post Share on other sites More sharing options...
V_G 8 November 20, 2021 Posted November 20, 2021 · Report post Насколько сильно нужно? Я делал приемник сигнала с амплитудной манипуляцией, там важна не амплитуда, а положение импульса. От извлечения корня отказался, выдавал просто сумму квадратов I и Q компонент. Quote Share this post Link to post Share on other sites More sharing options...
Dr.Alex 0 November 20, 2021 Posted November 20, 2021 · Report post 1 hour ago, _sda said: для извлечения корня компоненты нужно возвести в квадрат Зачем это ещё? Это что за алгоритм? Я такого не знаю. Если за 1 такт не нужно, то никаких квадратов там нет, всё делается крайне просто за N/2 тактов, результат тоже длины N/2. Если нужно быстрее, можно конвейеризовать. Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 20, 2021 Posted November 20, 2021 · Report post 27 минут назад, V_G сказал: Насколько сильно нужно? Я делал приемник сигнала с амплитудной манипуляцией, там важна не амплитуда, а положение импульса. От извлечения корня отказался, выдавал просто сумму квадратов I и Q компонент. Увы, мне такой вариант не приемлем. Мне после извлечения корня ещё фазу нужно считать. 22 минуты назад, Dr.Alex сказал: Зачем это ещё? Это что за алгоритм? Я такого не знаю. Если за 1 такт не нужно, то никаких квадратов там нет, всё делается крайне просто за N/2 тактов, результат тоже длины N/2. Если нужно быстрее, можно конвейеризовать. А ваш алгоритм точно умеет извлекать корни из комплексных чисел? Или только из вещественных? 24 минуты назад, blackfin сказал: Если нужен просто модуль комплексного числа, то корень не нужен. И перемножение "комплексных данных" не нужно. CORDIC: rectangular to polar conversion Не нужен мне "просто модуль комплексного числа", почитайте пожалуйста условие внимательней. Quote Share this post Link to post Share on other sites More sharing options...
Dr.Alex 0 November 20, 2021 Posted November 20, 2021 · Report post 6 minutes ago, _sda said: А ваш алгоритм точно умеет извлекать корни из комплексных чисел? Или только из вещественных? Из вещественных. Про корень из комплексного числа вообще никогда не слышал. Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 20, 2021 Posted November 20, 2021 · Report post 1 минуту назад, Dr.Alex сказал: Из вещественных. Про корень из комплексного числа вообще никогда не слышал. Мой алгоритм умеет такое делать. Алгебра за 11-й класс. Quote Share this post Link to post Share on other sites More sharing options...
blackfin 4 November 20, 2021 Posted November 20, 2021 · Report post 26 minutes ago, _sda said: Не нужен мне "просто модуль комплексного числа", почитайте пожалуйста условие внимательней. Для начала, перепишите свой первый пост на нормальном языке используемом в алгебре за 11-й класс. А то не понятно, "кто на ком стоял".. )) Пока что, мне понятно лишь то, что есть два комплексных числа z1 и z2: z1 = x1 + y1*i; z2 = x2 + y2*i; Что вам нужно с ними сделать мне пока не понятно.. Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 20, 2021 Posted November 20, 2021 · Report post 2 минуты назад, blackfin сказал: Для начала, перепишите свой первый пост на нормальном языке используемом в алгебре за 11-й класс. А то не понятно, "кто на ком стоял".. )) Пока что, мне понятно лишь то, что есть два комплексных числа z1 и z2: z1 = x1 + y1*i; z2 = x2 + y2*i; Что вам нужно с ними сделать мне пока не понятно.. Давайте попробуем. Нужно вычислить SQRT(z1 * z2). Разрядность шин x1,x2,y1,y2 равна 24 бита, если бы было меньше то этот вопрос скорее всего не появился бы . Добавлю что в матлабе алгоритм работы всего этого математического модуля уже отлажен, работает отлично. Проблему вижу в реализации. Quote Share this post Link to post Share on other sites More sharing options...
blackfin 4 November 20, 2021 Posted November 20, 2021 · Report post 14 hours ago, _sda said: Нужно вычислить SQRT(z1 * z2). Разрядность шин x1,x2,y1,y2 равна 24 бита, если бы было меньше то этот вопрос скорее всего не появился бы. Так в чем проблема? Алгебра за 11-й класс: SQRT(z1 * z2) = SQRT(z1) * SQRT(z2). Оба корня справа будут иметь разрядность: 24/2 = 12 бит Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 20, 2021 Posted November 20, 2021 · Report post 5 минут назад, blackfin сказал: Так в чем проблема? Алгебра за 11-ый класс: SQRT(z1 * z2) = SQRT(z1) * SQRT(z2). Оба корня справа будут иметь разрядность: 24/2 = 12 бит Я думал об этом, но мне показалось что в малосигнальном режиме из-за квантования погрешность вычисления будет больше чем в исходной формуле и отбросил этот вариант. Я конечно проверю сравнительные характеристики, а как на ваш взгляд велика ли будет погрешность? Quote Share this post Link to post Share on other sites More sharing options...
blackfin 4 November 20, 2021 Posted November 20, 2021 · Report post 5 minutes ago, _sda said: ... а как на ваш взгляд велика ли будет погрешность? Странный вопрос.. Сколько бит оставите в вычисленных корнях, столько и будет. Можете вычислять оба корня SQRT(z1) и SQRT(z2) с 24-х битной точностью в формате с фиксированной запятой: 12 целых + 12 дробных разрядов. Quote Share this post Link to post Share on other sites More sharing options...
_sda 0 November 20, 2021 Posted November 20, 2021 · Report post 2 минуты назад, blackfin сказал: Можете вычислять оба корня SQRT(z1) и SQRT(z2) с 24-х битной точностью в формате с фиксированной запятой: 12 целых + 12 дробных разрядов. Ага, и когда я перемножу эти 24р * 24р опять получу свои 48 разрядов. Но правда, их в квадрат уже возводить не придётся. Похоже что вы как всегда правы, на 48 разрядов мне таки жизнь облегчили. Покумекаю в этом направлении ещё. Большое спасибо! Quote Share this post Link to post Share on other sites More sharing options...
petrov 1 November 21, 2021 Posted November 21, 2021 · Report post Может корень и не нужно вычислять, а достаточно просто фазу на 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 3 часа назад, petrov сказал: Может корень и не нужно вычислять, а достаточно просто фазу на 2 поделить? Нет, корень нужен чтобы вернуться к отсчётам "напряжения", ведь после перемножения отсчёты имеют размерность мощности. Дело в том что после перемножения отсчеты произведения участвуют ещё в нескольких блоках и им размерность мощности никак не подходит. А фазу после извлечения да, конечно буду умножать на 2, мне важна фаза после комплексного умножителя. А с вычислением корня похоже рано я расслабился. Для извлечения корня из комплексного числа нужно выполнить три извлечения корня из вещественного числа. Два из них можно выполнить параллельно, поэтому нужно последовательно выполнить два извлечения корня из вещественного числа. Одно извлечение корня из 48-битного числа займёт 48 тактов, два - 96 тактов. У меня просто нет столько времени, новые данные начнут приходить гораздо раньше... Длительность выхлопа из БПФ - 100 мкс и этот выхлоп идёт периодически с интервалом 300 мкс. Это тупиковая ситуация. Коллеги, может есть ещё какие-то более шустрые методы перехода от "мощности" к "напряжению" для комплексных отсчётов? Quote Share this post Link to post Share on other sites More sharing options...
blackfin 4 November 21, 2021 Posted November 21, 2021 · Report post 11 minutes ago, _sda said: Для извлечения корня из комплексного числа нужно выполнить три извлечения корня из вещественного числа. Это ещё зачем? "Нормальные герои всегда идут в обход?" ;-) Quote Share this post Link to post Share on other sites More sharing options...