| 1 | = Analyzing the PJMEDIA Tone Generator Algorithms Performance = |

| 2 | |

| 3 | This article presents the performance analysis of various back-end algorithms of the tone generator that are implemented in PJMEDIA. We will measure the performance in both speed and accuracy terms. |

| 4 | |

| 5 | == The Algorithms == |

| 6 | |

| 7 | The tone generator (tonegen.c) supports several algorithms, and since version 1.0-rc3, the use of these algorithms is controlled by {{{PJMEDIA_TONEGEN_ALG}}} setting: |

| 8 | - {{{PJMEDIA_TONEGEN_SINE}}}: The good-old generation using math's sine(), floating point. This has very good precision but it's the slowest and requires floating point support and linking with the math library. |

| 9 | - {{{PJMEDIA_TONEGEN_FLOATING_POINT}}}: Floating point approximation of sine(). This has relatively good precision and much faster than plain sine(), but it requires floating-point support and linking with the math library. |

| 10 | - {{{PJMEDIA_TONEGEN_FIXED_POINT_CORDIC}}} (new in 1.0-rc3): Fixed point using sine signal generated by Cordic algorithm. This algorithm can be tuned to provide balance between precision and performance by tuning the {{{PJMEDIA_TONEGEN_FIXED_POINT_CORDIC_LOOP}}} setting, and may be suitable for platforms that lack floating-point support. |

| 11 | - {{{PJMEDIA_TONEGEN_FAST_FIXED_POINT}}}: Fast fixed point using some approximation to generate sine waves. The tone generated by this algorithm is not very precise, however the algorithm is very fast. |

| 12 | |

| 13 | == Accuracy == |

| 14 | |

| 15 | For the accuracy test, we setup the tone generator to generate digit A from [http://en.wikipedia.org/wiki/DTMF DTMF], with frequencies of 697 and 1209. We then analyzed the frequency using !CoolEdit (now becomes [http://www.adobe.com/special/products/audition/syntrillium.html Adobe Audition]). |

| 16 | |

| 17 | |