Оценка ДПФ с помощью алгоритма Гертцеля

В этом примере показано, как использовать функцию Goertzel для реализации алгоритма обнаружения DTMF на основе DFT.

Двухтоновая многочастотная (DTMF) сигнализация является базисом для управления голосовой связью и широко используется во всем мире в современной телефонии для набора номеров и конфигурирования распределительных плат. Он также используется в таких системах, как голосовая почта, электронная почта и телефонный банкинг.

Генерация тональных сигналов 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.

Игра тональных сигналов DTMF

Для примера воспроизведите тональные сигналы, соответствующие 508-647-7000 номера телефона. The "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 с помощью алгоритма Гертцеля

Минимальная длительность сигнала DTMF, заданная стандартом ITU, составляет 40 мс. Поэтому для оценки и обнаружения доступны не более 0,04 x 8000 = 320 выборок. Декодер DTMF должен оценить частоты, содержащиеся в этих коротких сигналах.

Одним из распространенных подходов к этой задаче оценки является вычисление выборок Преобразования Фурье в дискретном времени (DFT), близких к семи основным тонам. Для решения, основанного на ДПФ, было показано, что использование 205 выборок в частотный диапазон минимизирует ошибку между исходными частотами и точками, в которых оценивается ДПФ.

Nt = 205;
original_f = [lfg(:);hfg(:)]  % Original frequencies
original_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

Чтобы минимизировать ошибку между исходными частотами и точками, в которых оценивается ДПФ, мы обрезаем тональные сигналы, сохраняя только 205 выборок или 25,6 мс для дальнейшей обработки.

tones = tones(1:205,:);

На данной точке мы могли бы использовать алгоритм быстрого преобразования Фурье (FFT), чтобы вычислить ДПФ. Однако популярность алгоритма Гертцеля в этом контексте заключается в небольшом числе точек, в которых оценивается ДПФ. В этом случае алгоритм Гертцеля более эффективен, чем алгоритм БПФ.

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

Постройте оценку величины ДПФ Гертцеля для каждого тонального сигнала в сетке, соответствующей телефонной площадке.

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.

Обнаружение тональных сигналов DTMF

Обнаружение цифрового тонального сигнала может быть достигнуто путем измерения энергии, присутствующей на семи частотах, оцененных выше. Каждый символ может быть разделен простым взятием компонента максимальной энергии в нижней и верхней группах частот.

Приложение

В этом примере используются следующие вспомогательные функции.

См. также