泰勒级数实现正弦波

本文介绍了一种使用泰勒级数展开进行正弦计算的方法,并通过优化减少计算时间。此外,还提供了一个利用递推公式计算正弦值的例子,适用于嵌入式系统的实时信号处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

float temp = 0;
float temp1 = 0;
float temp_out;
float temp_out_sin;
float temp_out_sin1;
s16 SIN_Taile(s16 position)
{
s16 out = 0;
Taylor_D = Taylor_1/Taylor_8_9;
Taylor_Time1 = GetSysTime_us();
temp = (position*Base_180_PI/32768);//必须转化为弧度计算,这段代码在主频64MHZ下,执行时间为39us
temp1 = temp * temp;
temp_out = 1 - (temp1)/(72);
temp_out = 1 - temp_out *((temp1)/(42));
temp_out = 1 - temp_out *((temp1)/(20));
temp_out = 1 - temp_out *((temp1)/(6));
temp_out_sin = temp_out*temp;
Taylor_Time2 = GetSysTime_us();
Taylor_Time3 = Taylor_Time2 - Taylor_Time1;
/*********************************************************/
//注意一下几点:会影响到程序执行时间的
/*
1)类型强制转换,会导致时间增加;
2)一个表达式中如果括号很多的话,也会导致时间增加,不如分开多写几个表达式实现
3)程序中浮点型的乘除占用时间比32767或者2的倍数的乘除多很多
*/
return (temp_out_sin);
}










//参考   http://blog.youkuaiyun.com/yingxuexuan/article/details/6829744
//sin(nx) = 2*cos(x)*sin( (n-1)x ) - sin( (n-2)x )
//注意初始值,sin((n-1)x),a1 = 2*cos(x),a2 = -1;x = 2*pi*Frep/Fsample
s16 y[3] = {0,514,0}; // y(n), y(n-1), y(n-2) 
s16 a1 = 32752; 
s16 a2 = -16384; //Q14格式
s16 singen(void)

y[0]=((long)a1*(long)y[1]+(long)a2*(long)y[2])>>14; 
y[2]=y[1]; 
y[1]=y[0]; 
return y[0]; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值