C - ряд преобразования Фурье для пилообразной волны - PullRequest
2 голосов
/ 02 апреля 2012

Я строю синтезатор для iOS, используя Audio Unit, в основном построенный вокруг this .

Я уже поддерживаю простой конверт ASR, а также синусоиды, треугольники и прямоугольные волны.

Синусы просто,

 sin(theta) * amplitude

Квадраты

 sgn(sin(theta)) * amplitude

Теперь треугольники используют FFT без петель, как показано ниже:

((8 / pow(M_PI,2)) * (sin(theta) - sin(3*theta)/9 + sin(5*theta)/25)) * amplitude

Но я не могу понять пилообразные волны, Я попытался 2*(theta - floor(theta) - 0.5), но он получился с искажением и искажением (не от отсечения). Теперь я должен построить его с помощью ряда преобразований Фурье, но я не могу понять, как реализовать это в C.

Кто-нибудь может помочь?

1 Ответ

2 голосов
/ 02 апреля 2012

Вы можете использовать усеченный ряд Фурье для пилообразных волн точно так же, как вы это делали для треугольных волн, за исключением включения в сумме четных гармонических терминов, а также нечетных гармонических терминов и использования делителя, равного номеру гармоники каждого члена вместо квадрата такого.

Чем больше терминов вы используете, тем больше последовательное приближение будет выглядеть как пилообразная, но тем более высокочастотное содержимое будет содержать.

...