我正在写一个c函数来生成梯形波。有谁知道产生梯形波的数学方程吗?与y=A*sin(B* x )非常相似的想法是为不同的x值生成一个正弦波。
发布于 2014-06-15 06:29:22
有一个方程式可以用来代替限制。
a/pi(arcsin(sin((pi/m)x+l))+arccos(cos((pi/m)x+l)))-a/2+ca是amplitudem是periodl是水平transitionc是垂直过渡另外,这是一个直接的三角函数,尽管它可能更长,更复杂。
发布于 2012-06-16 20:24:42
发送梯形波的单个脉冲的方式包括使用海维赛德阶跃函数http://en.wikipedia.org/wiki/Heaviside_step_function
如果你想用“纯数学”的方式来表示这类函数,可以使用它。只需“一块一块”地构建你的函数,将第一块乘以当x=你的脉搏开始时“激活”的heaviside。对于下一个片段,首先减去最后一个函数,然后添加新的数学函数,将其乘以适当的heaviside函数,依此类推。它应该是这样结束的(如果你不明白,可以看看维基百科的文章):
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。
https://stackoverflow.com/questions/11041498
复制相似问题