首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >梯形波方程的方程

梯形波方程的方程
EN

Stack Overflow用户
提问于 2012-06-15 05:18:28
回答 2查看 5.2K关注 0票数 4

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

EN

回答 2

Stack Overflow用户

发布于 2014-06-15 06:29:22

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

代码语言:javascript
复制
a/pi(arcsin(sin((pi/m)x+l))+arccos(cos((pi/m)x+l)))-a/2+c

  • a是amplitude
  • m是period
  • l是水平transition
  • c是垂直过渡

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

票数 4
EN

Stack Overflow用户

发布于 2012-06-16 20:24:42

发送梯形波的单个脉冲的方式包括使用海维赛德阶跃函数http://en.wikipedia.org/wiki/Heaviside_step_function

如果你想用“纯数学”的方式来表示这类函数,可以使用它。只需“一块一块”地构建你的函数,将第一块乘以当x=你的脉搏开始时“激活”的heaviside。对于下一个片段,首先减去最后一个函数,然后添加新的数学函数,将其乘以适当的heaviside函数,依此类推。它应该是这样结束的(如果你不明白,可以看看维基百科的文章):

代码语言:javascript
复制
H(n) := (x >= n)?1:0;
y := H(0)*(x) + H(1)*(-x + 1) + H(2)*(-(-x + 1) + (3-x));

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

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11041498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档