Я пытаюсь создать различные формы волны в 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;
Как я могу преобразовать его в пилообразные волны?
Почему вы вычисление синуса значения, а затем принимать ArcSin этого? Это кажется расчетно экстравагантным без видимых причин. – Logicrat
Я имею в виду, вы можете вычислить пилообразную волну вроде этого (прямо с википедии): y (x) = - (2 * amp)/pi * arctan (cot (x * pi/period)) – mrfred
@Logicrat 'arcsin (sin (x)) 'дает' x' modulo '2Pi' находиться в' [-Pi/2, Pi/2] '. Поэтому есть причина, но вы правы, что слишком много вычислений для того, что она пытается сделать. – Teepeemm