. В алгоритме Гертцеля необходимо только два коэффициента для каждой частоты: один реальный и один комплексный . Этот алгоритм рекурсивный и описывается следующим выражением:
Вычислять все выходные отcчеты Y[0..n] нет никакой необходимости, нам нужен только отсчет Y[N-1], так как именно он отражает k-ю составляющую спектра входной последовательности.
Y[N-1] величина комплексная. Но для целей декодирования тонального набора фазовая информация не нужна, нам необходим модуль. Путем несложных преобразований, выражение для вычисления модуля Y можно свести к следующему виду:
Таким образом, для вычисления отклика на одной частоте нам нужен один реальный коэффициент. Для целей декодирования вполне можно оперировать квадратом амплитуды гармоники.
Фильтр работающий по алгоритму Гертцеля содержит две ячейки, где накапливаются промежуточные значения N раз при приходе N входных отсчетов. После накопления вычисляется квадрат модуля, ячейки обнуляются и процесс повторяется. Частота появления выходных отсчетов - один отсчет на N входных.
Частоты используемые в DTMF гармонически не связаны (по крайней мере в спектре телефонного канала). Поэтому k-я частота не будет точно отражать стандартные частоты DTMF. Другими словами, мы не можем настроить точно фильтр на нужную нам частоту, если для целей фильтрации применяем алгоритм Гертцеля. Выбором соответствующего N мы можем минимизировать данную ошибку. В материалах Analog Devices предлагается следующее решение:
Основные частоты N = 205 (25mc при частоте дискретизации 8кГц) |
|||
Частота |
k |
Абсолютная ошибка |
Коэффициент Mk |
697 |
18 |
0.139 |
1.703275 |
770 |
20 |
0.269 |
1.635859 |
852 |
22 |
0.167 |
1.562297 |
941 |
24 |
0.113 |
1.482867 |
1209 |
31 |
0.019 |
1.163138 |
1336 |
34 |
0.235 |
1.008835 |
1477 |
38 |
0.152 |
0.790074 |
1633 |
42 |
0.154 |
0.559454 |
Вторые гармоники N=201 |
|||
1394 |
35 |
0.024 |
0.917716 |
1540 |
39 |
0.308 |
0.688934 |
1704 |
43 |
0.187 |
0.449394 |
1882 |
47 |
0.285 |
0.202838 |
2418 |
61 |
0.248 |
-0.659504 |
2672 |
67 |
0.134 |
-1.000000 |
2954 |
74 |
0.219 |
-1.352140 |
3266 |
82 |
0.058 |
-1.674783 |
По моему мнению, здесь господа из Analog Devices перемудрили. Если при расчете коэффициентов М задаваться не целыми частотами, то проблема отпадает сама собой. При этом правда оценка мощности частоты может получится смещенной, но это смещение на уровне единиц процентов на нижней частоте.
Еще про алгоритмы декодирования DTMF можно посмотреть ЗДЕСЬ
А вот материалы фирмы Texas Instruments по этому же поводу
Пример программы на С. Взята откуда то с интернета, даже не помню, поэтому ничего про нее сказать не могу. Привожу ее на всякий случай. Посмотреть