arctan查表法_关于DSP的一些反正切查表算法的编写

关于

DSP

的一些反正切查表算法的编写

一直在拿

TMS20F28335

做电机控制,

也从早前的简单寄存器

IO

口配置时代过渡到了真

正的算法时代

,

很不适应,起初去查各种书籍

,

网上搜索各种网站,发现书本上讲的很多都是

快速傅里叶啊啥的

,

找不到很原始的像啥低通滤波器

,

正弦

,

正切这些函数的编写。

起初写程序发现,

C2000

的库里支持啥正弦函数,浮点预算,反正弦函数,开根运算等

算法,好兴奋。用了才知道,太慢了,根本没法用在工程上。

关于三角函数的编写,其实都是利用查表发,查表法大家应该都懂。这个就不再赘述,

怎样去查一个正弦表呢?这里做一个基本的介绍。

首先

,你可以自己写一个查表数组,也可以在程序初始化生成一个。

Eg

void

SinCOS_TAB(

void

)

{

unsigned

char

i;

float

Theta;

for

(i=0;i

#define

TAB_Max           180

{

Theta = i * Step_Angle;   // Step_Angle=1.74532925E-02

Sin_tab[i] =sin(Theta);  //

生成正弦表数组,利用了库里现成的

SIN

函数

Cos_tab[i] =cos(Theta);  //

生成余弦表数组

}

}

为啥我的数组里面只有

180

个元素呢?一:我的精度要求不高,我是一度一个步进角的,

如果你要更高的精度,

你可以选择容量更大的数组。

二:

我不想因为庞大的浮点数组占据太大的

存储空间,所以我利用了奇函数,偶函数的原理

再次

,就进入正题写查表程序,就我们初中数学所知,正弦函数是奇函数,

余弦函数是偶函

数,所以我只用了

360

角度中的一半。

下面为正弦查表程序:

/*Refer to the truth that DSP use some SinCos operation will use six or

more command

* periods , So I look up the pre_generate SINCOS_TAB to speed up the

Execution speed*/

float

SinF(

float

single)

{

int

i=(

int

)(single*180/pi);

float

value=0;

if

(i<0)

value = -Sin_tab[i];

else

value = Sin_tab[i];

return

value;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值