将正弦波或三角波转换为锯齿波

时间:2015-11-09 19:50:51

标签: c++ math audio waveform wave

我试图在c ++中生成不同的波形。到目前为止,我管理了正弦波,三角波和方波,但我不知道如何产生锯齿波。

这就是我的正弦波的样子:

uint8_t sample = (amp * envelope * sin(2 * M_PI * phase)) + 128;

这是三角波:

double sinevalue = sin(2 * M_PI * phase);
uint8_t sample = (envelope * 2 * amp) / M_PI * asin(sinevalue) + 128;

如何将其转换为锯齿波?

1 个答案:

答案 0 :(得分:0)

您不能将正弦波转换为锯齿波。这是因为正弦波在时间上是对称的:如果你反转时间,那么除了一些可能的相移之外你会得到相同的波。对于swatooth wave,时间反转必须与符号反转相结合,唯一的时间反转版本在质量上会有所不同。

您需要一些其他信息,例如当前位置的斜率。或者您需要访问原始参数值,在这种情况下,公式将非常简单:

uint8_t sample = (amp * envelope * (phase - floor(phase));