exponenta event banner

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

В этом примере показано, как использовать функцию Гертцеля для реализации алгоритма обнаружения 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. "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

Чтобы минимизировать ошибку между исходными частотами и точками, в которых оценивается 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.

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

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

Приложение

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

См. также