реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> atan, ищется реализация
TigerSHARC
сообщение Nov 7 2012, 10:28
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Ищу реализацию функции арктангенса для целых чисел(int16). В идеале хочется получить таблицу констант и одну функцию.
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 7 2012, 14:03
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Делал таблично, с точностью 1 градус. 90 ячеек из таблицы Брадиса со значениями тангенса, поиск ближайшего в таблице методом дихотомии (7-8 итераций). Адрес ячейки и есть арктангенс.
Процессоры 51, AVR (не-DSP).
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Nov 7 2012, 19:03
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(V_G @ Nov 7 2012, 18:03) *
Делал таблично, с точностью 1 градус. 90 ячеек из таблицы Брадиса со значениями тангенса, поиск ближайшего в таблице методом дихотомии (7-8 итераций). Адрес ячейки и есть арктангенс.
Процессоры 51, AVR (не-DSP).


не поделитесь реализацией? если конечно вы не на асме писали...


(продублировался топик)

Сообщение отредактировал TigerSHARC - Nov 7 2012, 19:06
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 7 2012, 22:52
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



На асме, на асме...
А в чем проблема - алгоритм поска в таблице значений монотонной функции предельно простой.
Становитесь в центр таблицы, если значение из таблицы меньше аргумента арктангенса - прыгаете вверх на четверть длины, нет - вниз. Дальше аналогично - на 1/8 длины и т.д.
Go to the top of the page
 
+Quote Post
fontp
сообщение Nov 8 2012, 07:35
Сообщение #5


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (V_G @ Nov 8 2012, 01:52) *
На асме, на асме...
А в чем проблема - алгоритм поска в таблице значений монотонной функции предельно простой.
Становитесь в центр таблицы, если значение из таблицы меньше аргумента арктангенса - прыгаете вверх на четверть длины, нет - вниз. Дальше аналогично - на 1/8 длины и т.д.



Бинарный поиск по обратной таблице. Тоже хороший алгоритм уравновешивания, без деления. На последнем шаге можно ещё повысить точность линейной интерполяцией. Эта процедура сильно напоминает векторное квантование в кодерах. Понятно, что таким способом можно обратить любую функцию двух переменных, монотонно зависящих только от y/х

QUOTE (TigerSHARC @ Nov 7 2012, 22:03) *
не поделитесь реализацией? если конечно вы не на асме писали...


можете посмотреть реализацию на C atng2(int x, int y), между других табличных функций
http://zalil.ru/33938780
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Nov 8 2012, 18:48
Сообщение #6





Guests






CORDIC-реализация ( алгоритм Волдера ), как вариант.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Nov 9 2012, 06:16
Сообщение #7





Guests






Для сетки 16р этот вариант избыточен, но тем не менее:

arctg(x) ~ x * P(z);
z = x^2;
x =(0,1);
Lg(err) < 6

P(z) = A0 + A1*z + A2*z^2 + A3*z^3 + A4*z^4 + A5*z^5 + A6*z^6; ( оптимизировать по схеме Горнера )

Go to the top of the page
 
+Quote Post
jumble
сообщение Nov 12 2012, 16:31
Сообщение #8





Группа: Новичок
Сообщений: 6
Регистрация: 10-04-10
Пользователь №: 56 543



Арктангенс от по известной действительной и мнимой части. Возвращает результат от -pi до pi. Вычисления на основе CORDIC алгоритма.
Прикрепленный файл  iatan2.txt ( 1.29 килобайт ) Кол-во скачиваний: 212

Необходимо поменять расширенеие с .txt на .с. А то мне почему то не разрешено загружать файлы *.с wacko.gif
Go to the top of the page
 
+Quote Post
fontp
сообщение Nov 13 2012, 11:13
Сообщение #9


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (jumble @ Nov 12 2012, 19:31) *
Арктангенс от по известной действительной и мнимой части. Возвращает результат от -pi до pi. Вычисления на основе CORDIC алгоритма.
Прикрепленный файл  iatan2.txt ( 1.29 килобайт ) Кол-во скачиваний: 212

Необходимо поменять расширенеие с .txt на .с. А то мне почему то не разрешено загружать файлы *.с wacko.gif



Я сравнил результаты Вашей реализации CORDIC со своею отладочной
http://electronix.ru/forum/index.php?showtopic=107649
Благо там всё есть, чтобы измерить точность, а именно очень хороший генератор случайных чисел. Среднеквадратичная ошибка оказалась у Вас завышена в 1.7 по энергии, стандартное отклонение 0.01 градуса вместо 0.0076 на случайных данных. Потеря точности нашлась сразу - у Вас не округлена таблица арктангенсов, вместо того что есть, должно бы быть
int imath_atan_table [] =
{
0x00002000, 0x000012E4, 0x000009FB, 0x00000511,
0x0000028B, 0x00000146, 0x000000A3, 0x00000051,
0x00000029, 0x00000014, 0x0000000A, 0x00000005,
0x00000003, 0x00000001, 0x00000001, 0x00000000
};

Мелочь, но всё таки, зачем терять точность, если можно не терять и это ничего не стоит.
Максимальная ошибка тоже побольше вблизи точки [0,0], но это понятно, поскольку входные аргументы short, а не int

Ну а вообще так, годится ))
Go to the top of the page
 
+Quote Post
jumble
сообщение Nov 15 2012, 20:10
Сообщение #10





Группа: Новичок
Сообщений: 6
Регистрация: 10-04-10
Пользователь №: 56 543



Да, действительно значения арктангенса не округлял. Спасибо Вам fontp за ценный совет. Учту.
Go to the top of the page
 
+Quote Post
rx9cim
сообщение Nov 28 2012, 20:16
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 2-07-12
Пользователь №: 72 593



Неплохая апроксимация описана у Лайонса. Вот пример:
float arctg (int I, int Q)
{
/*функция вычисляет арктангенс Q/I*/
volatile float var1, var2, rez;
var1=(float)(I*Q);
var2=(float)(I*I+(float)(0.28125*Q*Q));
rez=(float)(Pi/2)-(float)(var1/var2);
return rez;
}
Go to the top of the page
 
+Quote Post
beaRTS
сообщение Dec 5 2012, 18:10
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111



Цитата(TigerSHARC @ Nov 7 2012, 13:28) *
Ищу реализацию функции арктангенса для целых чисел(int16). В идеале хочется получить таблицу констант и одну функцию.

гляньте здесь


--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01551 секунд с 7
ELECTRONIX ©2004-2016