Ich baue einen iOS-Synthesizer mit Audio Unit, der im Wesentlichen um this herum gebaut wurde.C - Fourier-Transform-Serie für eine Sägezahnwelle
Ich unterstütze bereits eine einfache ASR-Hüllkurve und Sinus-, Dreieck- und Rechteckwellen.
Sinus sind einfach,
sin(theta) * amplitude
Quadrate sind
sgn(sin(theta)) * amplitude
Jetzt Dreiecke verwenden ein nicht-geschleift FFT, wie folgt:
((8/pow(M_PI,2)) * (sin(theta) - sin(3*theta)/9 + sin(5*theta)/25)) * amplitude
Aber ich kann nicht herausfinden, die Sägezahnwellen, Ich habe versucht 2*(theta - floor(theta) - 0.5)
, aber es kam Aliasing und verzerrt (nicht vom Ausschnitt). ich jetzt sollte ich es mit einer Fourier-Transform-Serie bauen, aber ich kann nicht herausfinden, wie man es in C implementieren.
Irgendwelche Hilfe jemand?
Warum verwenden Sie eine Fourier-Serie? Wie auch immer, die Fourier-Reihe für einen Sägezahn ist gegeben bei Wikipedia: http://en.wikipedia.org/wiki/Fourier_series#Example_1:_a_simple_Fourier_series. –
@OliCharlesworth, da die Standardfunktion zu viele Oberschwingungen hat und sie beginnt, zu alimentieren und zu verzerren. Ich habe es gesehen, aber ich kann nicht verstehen, wie ich es umsetzen soll. –
Eine Dreieckswelle hat die gleichen Oberschwingungen wie eine Rechteckwelle, sie haben nur unterschiedliche Amplituden. –