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;
}

调试看归一化后的函数值

相关推荐
南檐巷上学23 天前
基于FPGA的正弦信号发生器、滤波器的设计(DAC输出点数受限条件下的完整正弦波产生器)
fpga开发·数字信号处理·dsp·dds
南檐巷上学24 天前
基于MATLAB的麦克风音频效果测试
matlab·信号处理·数字信号处理·dsp·信号与系统·快速傅里叶变换·麦克风测试
ting_zh24 天前
使用ARM DSP库去音频直流偏置
stm32·dsp·fir·iir·直流偏置
啊阿狸不会拉杆1 个月前
《数字信号处理》第5章-数字滤波器的基本结构
python·算法·机器学习·matlab·信号处理·数字信号处理·dsp
啊阿狸不会拉杆1 个月前
《数字信号处理 》第 7 章-无限长单位冲激响应 (IIR) 数字滤波器设计方法
数据结构·算法·信号处理·数字信号处理·dsp
啊阿狸不会拉杆1 个月前
《数字信号处理》第6章:数字滤波器的基本概念及几种特殊滤波器
算法·matlab·信号处理·数字信号处理·dsp
啊阿狸不会拉杆1 个月前
《数字信号处理》第9章:序列的抽取与插值——多抽样率数字信号处理基础
算法·matlab·信号处理·数字信号处理·dsp
啊阿狸不会拉杆1 个月前
《数字信号处理》第10章-数字信号处理中的有限字长效应
算法·matlab·fpga开发·信号处理·数字信号处理·dsp
啊阿狸不会拉杆1 个月前
《数字信号处理》第8章:有限长单位冲激响应(FIR)数字滤波器设计方法
算法·matlab·深度优先·信号处理·数字信号处理·dsp
轻微的风格艾丝凡1 个月前
TI C2000 系列 MCU ELF 与 COFF 格式技术文档
dsp·c2000