将正弦波或三角波转换成锯齿波 我试图在C++中生成不同的波形。到目前为止,我处理了正弦波、三角波和方波,但我没有想到如何产生锯齿波

将正弦波或三角波转换成锯齿波 我试图在C++中生成不同的波形。到目前为止,我处理了正弦波、三角波和方波,但我没有想到如何产生锯齿波,c++,math,audio,waveform,wave,C++,Math,Audio,Waveform,Wave,这就是我的正弦波的样子: 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; 如何将其转换为锯齿波?无法将正弦波逐采样转换为锯齿波。这是因为正弦波在时间上是对称的:如果你倒转时间,

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

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;

如何将其转换为锯齿波?

无法将正弦波逐采样转换为锯齿波。这是因为正弦波在时间上是对称的:如果你倒转时间,那么除了一些可能的相移,你得到的是相同的波。对于swatooth波,时间反转必须与符号反转相结合,唯一的时间反转版本看起来会有质的不同

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


为什么要计算一个正弦值,然后取它的弧长?这在计算上似乎过于奢侈,没有明显的原因。我的意思是,你可以直接从维基百科上计算出这样的锯齿波:yx=-2*amp/pi*arctancotx*pi/period@Logicratarcsinsinx给出的x模2Pi为[-Pi/2,Pi/2]。这是有原因的,但你是对的,对于它试图做的事情来说,计算太多了。搜索傅里叶级数和变换,从数学上来说,这应该有帮助,为什么不在整数上使用一些简单的东西,比如y=Amplificate*t%t周期,或者使用a=a/b;a=a-floora而不是浮动上的a=a%b???或者使用预计算表。。。为什么要变换正弦波?或者这应该是处理正弦波信号并将其转换为锯齿波的滤波器?
uint8_t sample = (amp * envelope * (phase - floor(phase));