You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对ADC采集的正弦波做数值积分?梯形法结果偏移如何解决?

问题原因分析

你遇到的积分整体向上偏移的问题,核心来自两个常见原因:

  • 原始采集信号自带直流偏置:大部分ADC为单极性输入,采集正弦波时会预先抬升1/2满量程的直流偏置(你提到的偏移1.0大概率就是这个预设偏置),直流分量做积分会得到随时间线性增长的项,最终表现为积分结果整体上漂。
  • 积分初始值设置不当:梯形积分是累积运算,初始点的积分值会作为基底叠加到后续所有结果上。

首个测量点的积分值确定方法

你现在用的梯形法迭代逻辑是「用当前采样点+前一个采样点计算区间积分,再累加上前一时刻的积分结果」,所以初始化需要遵循以下步骤:

  1. 拿到第一个采样点(记为y0)时,先不要调用积分函数,直接给结构体成员赋值:
    // 初始化阶段,采集到第一个点后执行
    calka->prevMeasurement = y0;
    // 初始积分值按需求设置:如果是从t=0开始从零积分,就设为0;如果要让积分后的余弦波以x轴为中心,可以设为 -A/ω (A是正弦波幅值,ω是角频率,对应正弦波t=0时的积分理论值)
    // 不知道正弦波精确参数的话,也可以采集第一个完整周期的积分结果,计算其平均值,再把初始prevOut设为该平均值的负数,即可快速对齐到x轴中心
    calka->prevOut = 0; 
    
  2. 从第二个采样点开始,再正常调用calka_oblicz函数计算即可,此时第一个有效区间的积分就是[0, T]区间的梯形积分结果,不会出现初始值错误。

偏移修正方案

  • 先消除原始信号直流偏置:提前采集足够多周期的正弦波,计算平均值作为直流偏移量dc_offset,每次采样后先执行calka->currMeasurement = 采样值 - dc_offset,再送入积分逻辑,即可避免直流分量积分导致的整体上漂。
  • 如果修正直流偏置后仍有固定偏移,可以直接调整初始化时的prevOut数值,把固定偏移量抵消即可。

内容的提问来源于stack exchange,提问作者przemektw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:15:04