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

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

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

с 48 бит/компонента. И теперь из этого комплексного произведения хочу извлечь квадратный корень. Так как для извлечения корня компоненты нужно 

возвести в квадрат то получаем уже 96 бит/компонента. Это же будут жуткие тормоза на высоких тактовых частотах. Динамический диапазон сигнала во 

входных шинах очень широкий, максимум могу ужать на 2...3 бита, это не решит проблему. Может кому приходилось решать подобную задачу?

Как действовали?

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


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

Насколько сильно нужно? Я делал приемник сигнала с амплитудной манипуляцией, там важна не амплитуда, а положение импульса. От извлечения корня отказался, выдавал просто сумму квадратов I и Q компонент.

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


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

1 hour ago, _sda said:

для извлечения корня компоненты нужно возвести в квадрат

 

Зачем это ещё? Это что за алгоритм? Я такого не знаю.

Если за 1 такт не нужно, то никаких квадратов там нет, всё делается крайне просто за N/2 тактов, результат тоже длины N/2.

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

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


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

27 минут назад, V_G сказал:

Насколько сильно нужно? Я делал приемник сигнала с амплитудной манипуляцией, там важна не амплитуда, а положение импульса. От извлечения корня отказался, выдавал просто сумму квадратов I и Q компонент.

Увы, мне такой вариант не приемлем. Мне после извлечения корня ещё фазу нужно считать.

22 минуты назад, Dr.Alex сказал:

 

Зачем это ещё? Это что за алгоритм? Я такого не знаю.

Если за 1 такт не нужно, то никаких квадратов там нет, всё делается крайне просто за N/2 тактов, результат тоже длины N/2.

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

А ваш алгоритм точно умеет извлекать корни из комплексных чисел? Или только из вещественных?

24 минуты назад, blackfin сказал:

Если нужен просто модуль комплексного числа, то корень не нужен. И перемножение "комплексных данных" не нужно.

 

CORDIC: rectangular to polar conversion

Не нужен мне "просто модуль комплексного числа", почитайте пожалуйста условие внимательней.

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


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

6 minutes ago, _sda said:

А ваш алгоритм точно умеет извлекать корни из комплексных чисел? Или только из вещественных?

 

Из вещественных.

Про корень из комплексного числа вообще никогда не слышал.

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


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

1 минуту назад, Dr.Alex сказал:

 

Из вещественных.

Про корень из комплексного числа вообще никогда не слышал.

Мой алгоритм умеет такое делать. Алгебра за 11-й класс.

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


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

26 minutes ago, _sda said:

Не нужен мне "просто модуль комплексного числа", почитайте пожалуйста условие внимательней.

Для начала, перепишите свой первый пост на нормальном языке используемом в алгебре за 11-й класс. А то не понятно, "кто на ком стоял".. ))

 

Пока что, мне понятно лишь то, что есть два комплексных числа z1 и z2:

z1 = x1 + y1*i;

z2 = x2 + y2*i;

Что вам нужно с ними сделать мне пока не понятно.. 

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


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

2 минуты назад, blackfin сказал:

Для начала, перепишите свой первый пост на нормальном языке используемом в алгебре за 11-й класс. А то не понятно, "кто на ком стоял".. ))

 

Пока что, мне понятно лишь то, что есть два комплексных числа z1 и z2:

z1 = x1 + y1*i;

z2 = x2 + y2*i;

Что вам нужно с ними сделать мне пока не понятно.. 

Давайте попробуем. Нужно вычислить SQRT(z1 * z2). Разрядность шин x1,x2,y1,y2 равна 24 бита, если бы было меньше то этот вопрос скорее всего не появился бы .

Добавлю что в матлабе алгоритм работы всего этого математического модуля уже отлажен, работает отлично. Проблему вижу в реализации.

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


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

14 hours ago, _sda said:

Нужно вычислить SQRT(z1 * z2). Разрядность шин x1,x2,y1,y2 равна 24 бита, если бы было меньше то этот вопрос скорее всего не появился бы.

Так в чем проблема? Алгебра за 11-й класс:

SQRT(z1 * z2) = SQRT(z1) * SQRT(z2).

Оба корня справа будут иметь разрядность: 24/2 = 12 бит

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


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

5 минут назад, blackfin сказал:

Так в чем проблема? Алгебра за 11-ый класс:

SQRT(z1 * z2) = SQRT(z1) * SQRT(z2).

Оба корня справа будут иметь разрядность: 24/2 = 12 бит

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

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


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

5 minutes ago, _sda said:

... а как на ваш взгляд велика ли будет погрешность?

Странный вопрос.. Сколько бит оставите в вычисленных корнях, столько и будет.

Можете вычислять оба корня SQRT(z1) и SQRT(z2) с 24-х битной точностью в формате с фиксированной запятой: 12 целых + 12 дробных разрядов.

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


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

2 минуты назад, blackfin сказал:

Можете вычислять оба корня SQRT(z1) и SQRT(z2) с 24-х битной точностью в формате с фиксированной запятой: 12 целых + 12 дробных разрядов.

Ага, и когда я перемножу эти 24р * 24р опять получу свои 48 разрядов. Но правда, их в квадрат уже возводить не придётся. Похоже что вы как всегда правы, на 48 разрядов мне таки жизнь облегчили. Покумекаю в этом направлении ещё. Большое спасибо!

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


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

Может корень и не нужно вычислять, а достаточно просто фазу на 2 поделить?

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


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

3 часа назад, petrov сказал:

Может корень и не нужно вычислять, а достаточно просто фазу на 2 поделить?

Нет, корень нужен чтобы вернуться к отсчётам "напряжения", ведь после перемножения отсчёты имеют размерность мощности. Дело в том что после перемножения отсчеты произведения участвуют ещё в нескольких блоках и им размерность мощности никак не подходит. А фазу после извлечения да, конечно буду умножать на 2, мне важна фаза после комплексного умножителя.

 

А с вычислением корня похоже рано я расслабился. Для извлечения корня из комплексного числа нужно выполнить три извлечения корня из вещественного числа. Два из них можно выполнить параллельно, поэтому нужно последовательно выполнить два извлечения корня из вещественного числа. Одно извлечение корня из 48-битного числа займёт 48 тактов, два - 96 тактов. У меня просто нет столько времени, новые данные начнут приходить гораздо раньше... Длительность выхлопа из БПФ - 100 мкс и этот выхлоп идёт периодически с интервалом 300 мкс. Это тупиковая ситуация.

Коллеги, может есть ещё какие-то более шустрые методы перехода от "мощности" к "напряжению" для комплексных отсчётов?

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


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

11 minutes ago, _sda said:

Для извлечения корня из комплексного числа нужно выполнить три извлечения корня из вещественного числа.

Это ещё зачем? "Нормальные герои всегда идут в обход?" ;-) 

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


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

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

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

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

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

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

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

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

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

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