2012-04-02 4 views
2

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?

+2

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. –

+0

@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. –

+0

Eine Dreieckswelle hat die gleichen Oberschwingungen wie eine Rechteckwelle, sie haben nur unterschiedliche Amplituden. –

Antwort

2

Sie können eine abgeschnittene Fourier-Serie für Sägezahnwellen verwenden, genau wie bei Dreieckswellen, außer dass Sie sowohl die geraden harmonischen Terme als auch die ungeraden harmonischen Terme in die Summation einbeziehen und jeweils einen Teiler der harmonischen Zahl verwenden Begriff anstelle des Quadrats von solchem.

Je mehr Begriffe Sie verwenden, desto mehr wird die Serienapproximation wie ein Sägezahn aussehen, aber je höher der Frequenzbereich, desto mehr.

Verwandte Themen