В этом примере показано, как использовать функцию Гертцеля для реализации алгоритма обнаружения DTMF на основе DFT.
Двухтональная многочастотная сигнализация (DTMF) является основой для управления речевой связью и широко используется во всем мире в современной телефонии для набора номеров и конфигурирования коммутаторов. Он также используется в таких системах, как голосовая почта, электронная почта и телефонная банкинг.
Сигнал DTMF состоит из суммы двух синусоид - или тонов - с частотами, взятыми из двух взаимоисключающих групп. Эти частоты были выбраны для предотвращения неправильного обнаружения каких-либо гармоник приемником в качестве некоторой другой частоты DTMF. Каждая пара тонов содержит одну частоту низкой группы (697 Гц, 770 Гц, 852 Гц, 941 Гц) и одну частоту высокой группы (1209 Гц, 1336 Гц, 1477 Гц) и представляет собой уникальный символ. Частоты, назначенные кнопкам телефонной панели, показаны ниже:

Создайте и постройте график сигнала DTMF для каждой кнопки на телефонной площадке. Каждый сигнал имеет частоту дискретизации 8 кГц и длительность 100 мс.
symbol = {'1','2','3','4','5','6','7','8','9','*','0','#'};
[tones, Fs, f, lfg, hfg] = helperDTMFToneGenerator(symbol, false);
helperDFTEstimationPlot1(tones, symbol, Fs, f);![Figure contains 12 axes. Axes 1 with title Symbol "1": [697,1209] contains an object of type line. Axes 2 with title Symbol "2": [697,1336] contains an object of type line. Axes 3 with title Symbol "3": [697,1477] contains an object of type line. Axes 4 with title Symbol "4": [770,1209] contains an object of type line. Axes 5 with title Symbol "5": [770,1336] contains an object of type line. Axes 6 with title Symbol "6": [770,1477] contains an object of type line. Axes 7 with title Symbol "7": [852,1209] contains an object of type line. Axes 8 with title Symbol "8": [852,1336] contains an object of type line. Axes 9 with title Symbol "9": [852,1477] contains an object of type line. Axes 10 with title Symbol "*": [941,1209] contains an object of type line. Axes 11 with title Symbol "0": [941,1336] contains an object of type line. Axes 12 with title Symbol "#": [941,1477] contains an object of type line.](../../examples/signal/win64/DFTEstimationExample_02.png)
Например, воспроизводите тональные сигналы, соответствующие номеру телефона 508-647-7000. "0" символ соответствует 11-му тону.
% To hear, uncomment these lines: % for i = [5 11 8 6 4 7 7 11 11 11] % p = audioplayer(tones(:,i),Fs,16); % play(p) % pause(0.5) % end
Минимальная продолжительность сигнала DTMF, определенная стандартом ITU, составляет 40 мс. Следовательно, существует не более 0,04 x 8000 = 320 выборок, доступных для оценки и обнаружения. Декодеру DTMF необходимо оценить частоты, содержащиеся в этих коротких сигналах.
Один общий подход к этой проблеме оценки заключается в вычислении выборок дискретного временного преобразования Фурье (DFT), близких к семи основным тонам. Для решения на основе ДПФ было показано, что использование 205 выборок в частотной области минимизирует ошибку между исходными частотами и точками, в которых оценивается ДПФ.
Nt = 205;
original_f = [lfg(:);hfg(:)] % Original frequenciesoriginal_f = 7×1
697
770
852
941
1209
1336
1477
k = round(original_f/Fs*Nt); % Indices of the DFT estim_f = round(k*Fs/Nt) % Frequencies at which the DFT is estimated
estim_f = 7×1
702
780
859
937
1210
1327
1483
Чтобы минимизировать ошибку между исходными частотами и точками, в которых оценивается DFT, мы усекаем тоны, сохраняя только 205 выборок или 25,6 мс для дальнейшей обработки.
tones = tones(1:205,:);
В этот момент мы можем использовать алгоритм быстрого преобразования Фурье (FFT) для вычисления DFT. Однако популярность алгоритма Гертцеля в этом контексте заключается в малом количестве точек, в которых оценивается DFT. В этом случае алгоритм Гертцеля более эффективен, чем алгоритм БПФ.
for toneChoice = 1:12 % Select tone tone = tones(:,toneChoice); % Estimate DFT using Goertzel ydft(:,toneChoice) = goertzel(tone,k+1); % Goertzel uses 1-based indexing end
Постройте график оценки величины DFT Гертцеля для каждого тона на сетке, соответствующей телефонной площадке.
helperDFTEstimationPlot2(ydft,symbol,f, estim_f);
![Figure contains 12 axes. Axes 1 with title Symbol "1": [697,1209] contains an object of type stem. Axes 2 with title Symbol "2": [697,1336] contains an object of type stem. Axes 3 with title Symbol "3": [697,1477] contains an object of type stem. Axes 4 with title Symbol "4": [770,1209] contains an object of type stem. Axes 5 with title Symbol "5": [770,1336] contains an object of type stem. Axes 6 with title Symbol "6": [770,1477] contains an object of type stem. Axes 7 with title Symbol "7": [852,1209] contains an object of type stem. Axes 8 with title Symbol "8": [852,1336] contains an object of type stem. Axes 9 with title Symbol "9": [852,1477] contains an object of type stem. Axes 10 with title Symbol "*": [941,1209] contains an object of type stem. Axes 11 with title Symbol "0": [941,1336] contains an object of type stem. Axes 12 with title Symbol "#": [941,1477] contains an object of type stem.](../../examples/signal/win64/DFTEstimationExample_03.png)
Обнаружение цифрового тона может быть достигнуто путем измерения энергии, присутствующей на семи частотах, оцененных выше. Каждый символ может быть разделен простым взятием составляющей максимальной энергии в нижней и верхней частотных группах.
В этом примере используются следующие вспомогательные функции.