【发布时间】:2016-02-10 13:39:37
【问题描述】:
我正在尝试在 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;
如何将其转换为锯齿波?
【问题讨论】:
-
你为什么要计算一个正弦值然后取它的反正弦值?没有明显的原因,这似乎在计算上是奢侈的。
-
我的意思是,你可以像这样计算锯齿波(直接从维基百科):y(x) = - (2 * amp)/pi * arctan(cot(x*pi/period))
-
@Logicrat
arcsin(sin(x))给x模2Pi在[-Pi/2,Pi/2]中。所以这是有原因的,但你是对的,它试图做的计算太多了。 -
搜索傅里叶级数和变换,从数学上讲这应该有助于mathworld.wolfram.com/SawtoothWave.html 和mathworld.wolfram.com/FourierSeriesSawtoothWave.html
-
为什么不在整数上使用
y=Amplitude*(t%Tperiod)这样简单的东西,或者在浮点数上使用a=a/b; a=a-floor(a)而不是a=a%b???或使用预先计算的表......为什么要转换正弦波?或者这应该是应该处理正弦波信号并将其转换为锯齿的滤波器?
标签: c++ math audio waveform wave