DSP使用三角函数问题

问题

当浮点数很大时,作为三角函数的入参,计算出来的结果会让人大跌眼镜!

X64 Windows计算器计算的sin(110000),上面那个数值明显是不对的

分析

查看sinf函数原型,是通过查表法来实现的,也就说芯片内部不可能维护一个巨大的表格,入参很大会有误差

C++ 复制代码
//! \brief Single-Precision Floating-Point Sine (radians)
//! \param[in] X single precision floating point argument
//! \return the sine of a floating-point argument X (in radians) using table
//! look-up and Taylor series expansion between the look-up table entries.
//!
//! \note 
//! -# This is a standard C math function and requires "math.h" to be 
//! included
//! -# For COFF executables float and double are both single precision
//! 32-bit floating point types, therefore, the double and float variant of 
//! this function may be used interchangeably.
//!
//! <table>
//! <caption id="multi_row">Performance Data</caption>
//! <tr><th>Cycles <th> Comment 
//! <tr><td> 38 <td> Cycle count includes the call and return
//! </table>
//
float32_t sinf (float32_t X);

解决

需要将角度值限制在±2π范围内(理论上说这个范围内的精度是最好的)

Plain 复制代码
// 将角度归一化到[-2π, 2π]范围内
float normalize_angle(float angle)
{
    const float two_pi = 2.0f * PI;
    float normalized = fmodf(angle, two_pi);
    if(normalized < -PI) normalized += two_pi;
    if(normalized > PI) normalized -= two_pi;
    return normalized;
}

调试看归一化后的函数值

相关推荐
Sk Electronics4 小时前
(四)BUCK变换器的小信号模型验证——开环系统波特图与SIMPLIS仿真分析
dsp·电力电子技术·学术研究·dc-dc变换器
学习FPGA的电气小兴兴3 天前
基于FPGA的DDS信号发生器设计,生成频率可调的正弦波、三角波、锯齿波和方波
fpga开发·数字信号处理·fpga·vivado·dsp·dds·diy
Sk Electronics7 天前
(三)BUCK变换器的基本原理——状态空间平均法建模、传递函数
dsp·电源·电力电子技术·dc-dc变换器
Sk Electronics14 天前
(一)BUCK变换器的基本原理——模态分析、稳态分析、设计案例
dsp·电源·电力电子技术·学术研究·dc-dc变换器
Sk Electronics19 天前
DC-DC变换器教程计划
dsp·电力电子技术·dc-dc变换器
IOT那些事儿2 个月前
Code Composer Studio修改默认的工作空间
dsp·工作空间·ccs
轻微的风格艾丝凡2 个月前
两电平三相VSC整流模式从不控整流平滑切换至有源整流调试记录
算法·dsp·c2000
轻微的风格艾丝凡4 个月前
三相不平衡电流调试经验记录
算法·dsp
GateWorld5 个月前
FPGA内部模块详解之四 算力引擎——数字信号处理单元(DSP Slice)深度解析
fpga开发·dsp
北京青翼科技5 个月前
基于6U VPX架构-DSP FT-M6678实时信号处理平台-青翼全国产化嵌入式产品
信号处理·国产化·dsp·fpga开发板·6678·嵌入式平台