On-line: гостей 0. Всего: 0 [подробнее..]
Правила: заголовок темы должен кратко и понятно отражать ее суть, нельзя писать латиницей или заглавными буквами. Сообщение, ник, аватар не должны выделяться своими размерами или стилем написания от остальных, быть читабельными, написаны литературно и достаточно грамотно.



АвторСообщение
администратор




Сообщение: 11
Зарегистрирован: 13.06.07
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.08.07 07:39. Заголовок: Вычисление арктангенса.


Понятно, чт проще всего для расчета арктангенса использовать готовую функцию в библиотке math.h,
но она работает с данными типа флоат, следовательно занимает много места и времени для расчета.
Вобщем, пришлось сделать свою.
Суть идеи по формуле расчитывается приблизительное значение угла, а потом по модулю этого значения. выбирается из таблицы поправочное значение. Погрешность такого вычисления составляет один градус, что вполне достаточно. Даный метод успешно реализован и работает в моем приборе.
__flash signed char AtanMod[]=

{
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 0, 1, 1, 1, 2, 2, 2, 2, 3,

//10,11,12,13,14,15,16,17,18,19,
3, 3, 3, 3, 4, 4, 4, 4, 4, 4,

//20,21,22,23,24,25,26,27,28,29,
4, 4, 4, 4, 4, 4, 4, 4, 4, 3,

//30,31,32,33,34,35,36,37,38,39,
3, 3, 3, 3, 3, 2, 2, 2, 2, 2,

//40,41,42,43,44,45,46,47,48,49,
1, 1, 1, 1, 0, 0, 0,-1,-1,-1,

//50,51,52,53,54,55,56,57,58,59,
-1,-1,-2,-2,-2,-3,-3,-3,-3,-3,

//60,61,62,63,64,65,66,67,68,69,
-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,

//70,71,72,73,74,75,76,77,78,79,
-4,-4,-4,-4,-4,-4,-4,-4,-3,-3,

//80,81,82,83,84,85,86,87,88,89,90
-3,-3,-2,-2,-2,-2,-1,-1,-1,-1,0
};
//-------------------------------------------------
signed char Atan( int Xsd, int Ysd)
{
signed char Temp;
if((Xsd==0)&&(Ysd==0))
return 0;
if(Xsd<0)
{
Xsd=-Xsd;
Temp =(90*Xsd)/(Xsd+Ysd);
Temp-=AtanMod[Temp];
Temp=-Temp;
}
else
{
Temp =(90*Xsd)/(Xsd+Ysd);
Temp-= AtanMod[Temp];
}

return Temp;
}

Вызов функции: Atan (X,Y);
где X и Y по модулю не должны быть больше 255.


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 2 [только новые]





Сообщение: 1
Зарегистрирован: 18.03.08
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.03.08 09:38. Заголовок: Вычисление арктангенса


Привет M@rs, вот ещё формула

atan2(y,x) ~= 32*(x*y)/(32*x*x + 9*y*y)
Работает в секторе [-pi/4 ; pi/4] ошибка порядка 0.5%

M@rs, зачем брать поправочное значение, бери сразу сам угол с учетом поправки.
Я просто вычисляю 256*Y/X и беру из таблицы угол и косинус арктангенса для вычисления гипотенузы (амплитуды сигнала)


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Сообщение: 61
Зарегистрирован: 13.06.07
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.03.08 09:48. Заголовок: Спасибо за информаци..


Спасибо за информацию. Надо будет попробовать.


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 18
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет