Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: извлечение корня из суммы квадратов sqrt( I^2 + Q^2)
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
beaRTS
сколько ни лазил по форуму, видел кучу ссылок по поводу извлечения корня из целых чисел. Обсуждать fixed-point и не хочется, т.к. у Техасцев есть на этот случай библиотека IQMath (работаю сейчас с камнями TI).
я же задался целью написать немного по-своему извлечение корня из sqrt( I^2 + Q^2) (это в цифровом детекторе понадобится) для случая float-point.

по поводу идейки - писал здесь

Собранная статистика в приложении.
сравнивал работу написанной функции с функцией из <cmath> и в нее передавал уже заранее вычисленное выражение I^2+Q^2. в свою же функцию передаю I и Q. (все значения типа float)
интересует все ли норм? приемлемо ли я проверяю работу?
Посчитана относительная и абсолютная ошибка. Скажите ее порядок хотя бы правдоподобен ? Вот в этом сообщении писалось о моем случае и ошибка там 0,007 % . У меня максимальная ошибка 0.000766161 %.

в общем, что скажете? что, может, стоит выложить, обнародовать - говорите, сделаю.
Serg76
А теперь объясните, зачем создавать аналогичную тему, а не продолжить в той же самой, на которую ссылаетесь?
beaRTS
Цитата(Serg76 @ Dec 22 2012, 21:16) *
А теперь объясните, зачем создавать аналогичную тему, а не продолжить в той же самой, на которую ссылаетесь?

чтоб ту не захламлять.. т.к. в той теме обсуждаются вопросы целочисленных данных. а я со своими вещественными - ни к селу ни к городу. да и создаю то я не тупо sqrt( X), а sqrt( I, Q), т.е. людям, которым интересно применение корня в цифровых детекторах сэкономят уйму времени, найдя сразу мою тему, чем читая многочисленные темы, где обсуждаются целые числа и ровно нуль по поводу floating-point.

P.S. я то, видя что Вы пишете, надеялся что вы скажете что-то дельное....
Serg76
Цитата(beaRTS @ Dec 22 2012, 21:24) *
чтоб ту не захламлять.. т.к. в той теме обсуждаются вопросы целочисленных данных. а я со своими вещественными - ни к селу ни к городу. да и создаю то я не тупо sqrt( X), а sqrt( I, Q), т.е. людям, которым интересно применение корня в цифровых детекторах сэкономят уйму времени, найдя сразу мою тему, чем читая многочисленные темы, где обсуждаются целые числа и ровно нуль по поводу floating-point.

P.S. я то, видя что Вы пишете, надеялся что вы скажете что-то дельное....

ну понято в общем, захламили вы этот форум порядочно. я тоже сидел и надеялся, когда же вы все-таки напишете что-то по делу и перестаните прыгать по форуму, оставляя в большей массе своей бесполезные комментарии, не несущие никакой смысловой нагрузки. bb-offtopic.gif
TSerg
Непонятно, что Вас смущает.
Если Вас устраивает точность и время - зачем "толочь воду в ступе"?
beaRTS
Цитата(Serg76 @ Dec 22 2012, 20:33) *
ну понято в общем, захламили вы этот форум порядочно.

вы не объективны. Есть люди на форуме, которые были мне благодарны за помощь и я рад что помог кому-то.... И с чего я захламил? Почитайте темы на форуме, в которых вы, опытные, устраиваете холивары, путаете мозги молодежи и по-большому юлите, но не отвечаете на вопросы. (например темы С++ против Си и т.д.)
Не нравится - не читайте, обходите стороной.

я считаю моя тема имеет узкую специализацию - поэтому новая тема - все вопрос закрыт!

Цитата(TSerg @ Dec 22 2012, 20:33) *
Непонятно, что Вас смущает.
Если Вас устраивает точность и время - зачем "толочь воду в ступе"?

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

я молодой и поэтому у меня возникают вопросы не только в начале разработки чего-либо, но, и как в примере, и после: по поводу правильности своей логики, идеи, счета, порядка полученных результатов, неучтенных моментов и их влияния на остальную часть системы (а опыта мало, поэтому на многие вопросы нет у меня ответов)... а на работе у нас спросить почти не у кого: т.к. часть классных инженеров разбежалась, т.к. Москва скупила и разваливает предприятие, а другую часть тупо в командировки стали засылать.... на форуме единственная возможность получить квалифицированную помощь. а вы обсирать молодежь, тянущуюся к знаниям, принялись...

давайте закроем этот холивар. я я постарался объяснить.
и теперь предпочтительно писать по делу!
TSerg
>а вы обсирать молодежь, тянущуюся к знаниям, принялись...

Где Вы такое нашли в моих ответах?
Насколько помню, я Вам давал технический материалsm.gif

Что же касается поиска наилучшего решения, то есть известная поговорка, да не одна:
"Лучшее - враг хорошего", "Если работает - не трогай" и т.д.

Ну и заниматься вместе с вами числовыми изысканиями вряд кто будет.
Есть конкретный вопрос - задавайте максимально лаконично.
Результат приводите в наиболее общем виде, а не выкатывайте простыни логов.
И т.д.

P.S.
То, что Вы молоды - это не избавляет от необходимости чтения талмудов, а не лазания по форумам.
Так, что берите в руки книжки и вперед.
Например, Благовещенский, "Вычисление элементарных функций на ЭВМ"

Или не менее занимательные изыски по вычислению обратного корня от Silicon Graphics:
http://www.codemaestro.com/reviews/9
Serg76
Цитата(beaRTS @ Dec 23 2012, 09:39) *
вы не объективны. Есть люди на форуме, которые были мне благодарны за помощь и я рад что помог кому-то.... И с чего я захламил? Почитайте темы на форуме, в которых вы, опытные, устраиваете холивары, путаете мозги молодежи и по-большому юлите, но не отвечаете на вопросы. (например темы С++ против Си и т.д.)
Не нравится - не читайте, обходите стороной.

я считаю моя тема имеет узкую специализацию - поэтому новая тема - все вопрос закрыт!

ну что же, попробую еще раз объяснить.
во-первых, прежде, чем создавать посты, а тем более новые темы, неплохо было бы разведать, что по этому вопросу уже обсуждалось, для чего элементарно научиться пользоваться поиском (это рекомендация администрации форума), коим вы пользоваться не умеете или, я подозреваю, просто игнорируете. потому, что все основные "проблемы", которые вы здесь подымали, элементарно находятся через поиск.

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

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

думаю этого хватит пока.

P.S. Да, и судя по вашему жизненному девизу: "Об уме человека вернее судить по его вопросам, нежели по его ответам", пока это не про ВАС.
AndrewN
QUOTE (beaRTS @ Dec 23 2012, 09:39) *
и теперь предпочтительно писать по делу!
Вы провели большую и никому не нужную работу по доказательсту в сотый раз очевидного факта крайней неэффективности линейного метода вычисления квадратного корня по сравнению с методом Ньютона-Рафсона.

Неэффективность по числу итераций (для одинарной точности) 40/2 = 20, поскольку метод Н-Р сходится за две итерации из первого приближения известного с точностью 8 двоичных знаков (результат инструкции EISQRTF32).

На каждой итерации линейного метода использутся деление, которое представляет собой вызов подпрограммы, использующей метод Н-Р для нахождения частного. Таким образом, линейный метод неэффективен и внутри отдельной итерации. Метод Н-Р не использует делений в итерациях.

Вследствие хорошей аппаратной реализации основных трёх арифметических операций, точность метода Н-Р лучше по сравнению с линейным методом, где дополнительная погрешность вносится программно организованной операцией деления.

По-прежнему не решён вопрос о переполнении/обнулении промежуточного результата - хотя это нельзя вам поставить в вину. Имеется ввиду, что при определённых условиях сумма квадратов может переполнится или обнулится, хотя корень из неё представим ненулевым числом в диапазоне чисел с плавающей точкой. С этой же проблемой тесно связано численное обнуление одного из квадратов слагаемых, в результате дающее корень равный большему модулю из (A,B), в то время как корень из их суммы квадратов представим числом с плавающей точкой.

Резюме - "Всё украдено до нас", "незачем изобретать велосипед", используйте библиотечную подпрограмму.
Serhiy_UA
Цитата(beaRTS @ Dec 22 2012, 18:40) *
...извлечение корня из sqrt( I^2 + Q^2)...

Я бы для этого случая использовал CORDIC (алгоритм Волдера), где I и Q квадратуры...
Да и FPGA, если нужна предельная скорость. Результаты моделирования для одноактного устройства на FPGA дали на все 70 нс, это для 16 разрядного результата ...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.