Shaunak De
В этой статье объясняется, как реализовать 1D FFT - Как реализовать алгоритм БПФ[^]
Для простоты я бы посоветовал вам сначала попробовать с помощью DFT. Обработка может быть медленной, но ее гораздо проще реализовать. Эта страница содержит как описание, так и список кодов как БПФ, так и ДПФ: http://paulbourke.net/miscellaneous/dft/[^]
Самый простой метод обнаружения пиков-это поиск значений выше среднего для всех выборок и поиск изменений наклона. Скопировав его из другого пост:
Between any two points in your data, (x(0),y(0)) and (x(n),y(n)), add up y(i+1)-y(i) for 0 <= i < n and call this T ("travel") and set R ("rise") to y(n)- y(0) + k for suitably small k. T/R > 1 indicates a peak. This works OK if large travel due to noise is unlikely or if noise distributes symmetrically around a base curve shape. For your application, accept the earliest peak with a score above a given threshold, or analyze the curve of travel per rise values for more interesting properties.
----
Для простоты я бы рекомендовал использовать готовую библиотеку, а не пытаться написать весь алгоритм целиком. Я бы предпочел C# C++.
Попробовать это:
http://www.tapiex.com/ToneDecoder.Net.htm[
^]
Он может легко декодировать DTMF из аудиофайла или потока, что, как я предполагаю, вам и нужно.
У них есть несколько файлов справки здесь:
http://www.tapiex.com/TDNet_Help/[
^]
Из их руководства:
PhoneToneDecoder decode variant of tone signals such as DTMF, Caller-ID, TTY, SAME etc.
There are three ways to feed the audio data to this component.
From the file (.wav, .mp3, .raw etc).
Stream data capture by WaveEx control
Stream data feed by manually via WaveStreamInput method.
-----
То, что вы также можете сделать, это записать WAV-файл, а затем декодировать его. Я имел хороший успех, используя
Наудио библиотека с более ранним C#. Библиотека также имеет функции для вычисления БПФ.
Рассмотрим эту серию учебников:
http://www.youtube.com/watch?v=6XvWRzWzgNI[
^]
Вы также можете попробовать это:
http://msdn.microsoft.com/en-us/library/ff827802.aspx[
^]