【问题标题】:Equation for trapezoidal wave equation梯形波动方程的方程
【发布时间】:2014-06-15 06:56:20
【问题描述】:

我正在编写一个 c 函数来生成梯形波。有谁知道产生梯形波的数学方程?与 y=A*sin(B*x) 非常相似的想法为不同的 x 值生成正弦波。

【问题讨论】:

  • 我已经看到通过剪裁三角波来完成此操作。
  • 梯形波的数学公式是f(x) = 0, if (0 < x < t1); a*(x-t1), if (t1 < x < t2); a*(t2-t1), if (t2 < x < t3); -b * (x-t3), if (t3 < x < p); f(x-p), if (p < x);

标签: c math graph waveform


【解决方案1】:

您可以使用一个方程式来代替限制。

a/pi(arcsin(sin((pi/m)x+l))+arccos(cos((pi/m)x+l)))-a/2+c
  • a 是幅度
  • m是句号
  • l 是水平过渡
  • c 是垂直过渡

此外,这是一个直接的三角函数,尽管它可能更长,而且更复杂一些。

【讨论】:

    【解决方案2】:

    发送单脉冲梯形波的方法包括使用 Heaviside Step Function http://en.wikipedia.org/wiki/Heaviside_step_function

    如果您想要用“纯”数学方式来表示这种函数,请使用它。只需“一块一块地”构建你的函数,将第一块乘以当 x = 脉冲开始时“激活”的重质。对于下一部分,首先减去最后一个函数,然后添加新的数学函数,将其乘以适当的重函数等。它应该以这样的方式结束(如果您不明白,请查看维基百科文章):

    H(n) := (x >= n)?1:0;
    y := H(0)*(x) + H(1)*(-x + 1) + H(2)*(-(-x + 1) + (3-x));
    

    但是,为了代码的简单性和效率,让我们使用 if 语句。考虑一个具有恒定单位速度的 45 度梯形波。

    float trapezoidalWave(float x, float t) {
    
        float y;
    
        if ( x <= t + 1 ) {
            // 45 degree ascending line
            y = x - t;
        } else if ( x <= t + 2) {
            // horizontal line
            y = 1;
        } else if (x <= t + 3) {
            // 45 degree descending line
            y = t + 3 - x;
        } else {
            y = 0;
        }
    
        return y;        
    
    }
    

    如果您想要一个“长波”而不仅仅是一个脉冲,请使用模块 (%),如果您不需要时间变量,只需将其替换为 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 2011-09-03
      • 1970-01-01
      • 2021-08-21
      • 2010-12-23
      • 1970-01-01
      • 2016-03-20
      相关资源
      最近更新 更多