Matlab DTM Examples

Embed Size (px)

Citation preview

  • 8/10/2019 Matlab DTM Examples

    1/3

    Close Window

    Dual-Tone Multi-Frequency (DTMF) Signal Detection

    This example showcases the use of the Goertzel function as a part of a DFT-based DTMF detection algorithm.

    Dual-tone Multi-Frequency (DTMF) signaling is the basis for voice communications control and is widely used worldwide in modern telephony to dial numbers and configure switchboards. It is also

    used in systems such as in voice mail, electronic mail and telephone banking.

    Contents

    Generating DTMF Tones

    Playing DTMF Tones

    Estimating DTMF Tones with the Goertzel Algorithm

    Detecting DTMF Tones

    Generating DTMF Tones

    A DTMF signal consists of the sum of two sinusoids - or tones - with frequencies t aken from two mutually exclusive groups. These frequencies were chosen t o prevent any harmonics from being

    incorrectly detected by the receiver as some other DTMF frequency. Each pair of tones contains one frequency of the low group (697 Hz, 770 Hz, 852 Hz, 941 Hz) and one frequency of the high group

    (1209 Hz, 1336 Hz, 1477Hz) and represents a unique symbol. The frequencies allocated to the push-buttons of the telephone pad are shown below:

    1209 Hz 1336 Hz 1477 Hz

    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    | | |

    | | ABC | DEF |

    697 Hz | 1 | 2 | 3 | |_ _ _ _ __ _ _ _ __ _ _ _ _

    | | |

    | GHI | JKL | MNO |

    770 Hz | 4 | 5 | 6 |

    |_ _ _ _ __ _ _ _ __ _ _ _ _ | | |

    | PRS | TUV | WXY |

    852 Hz | 7 | 8 | 9 | |_ _ _ _ __ _ _ _ __ _ _ _ _

    | | |

    | | | |

    941 Hz | * | 0 | # |

    |_ _ _ _ __ _ _ _ __ _ _ _ _

    First, let's generate the twelve frequency pairs

    symbol = {'1','2','3','4','5','6','7','8','9','*','0','#'};

    lfg = [697 770 852 941]; % Low frequency group

    hfg = [1209 1336 1477]; % High frequency group

    f = [];

    forc=1:4,

    forr=1:3,

    f = [ f [lfg(c);hfg(r)] ];

    end

    end

    f'

    ans =

    697 1209

    697 1336 697 1477

    770 1209 770 1336

    770 1477

    852 1209

    852 1336

    852 1477

    941 1209

    941 1336

    941 1477

    Next, let's generate and visualize the DTMF tones

    Fs = 8000; % Sampling frequency 8 kHz

    N = 800; % Tones of 100 ms

    t = (0:N-1)/Fs; % 800 samples at Fs

    pit = 2*pi*t;

    tones = zeros(N,size(f,2));

    fortoneChoice=1:12,

    % Generate tone

    tones(:,toneChoice) = sum(sin(f(:,toneChoice)*pit))';

    % Plot tone subplot(4,3,toneChoice),plot(t*1e3,tones(:,toneChoice));

    title(['Symbol "', symbol{toneChoice},'": [',num2str(f(1,toneChoice)),',',num2str(f(2,toneChoice)),']'])

    set(gca, 'Xlim', [0 25]); ylabel('Amplitude');

    iftoneChoice>9, xlabel('Time (ms)'); endend

    set(gcf, 'Color', [1 1 1], 'Position', [1 1 1280 1024])

    annotation(gcf,'textbox', 'Position',[0.38 0.96 0.45 0.026],...

    'EdgeColor',[1 1 1],...

    'String', '\bf Time response of each tone of the telephone pad', ...

    'FitHeightToText','on');

    MathWorks - Examples - Dual-Tone Multi-Frequency (DTMF) Sign... http://www.mathworks.com/products/demos/signaltlbx/dtmf/dtmfdemo.html

    3 05/10/2014 19:23

  • 8/10/2019 Matlab DTM Examples

    2/3

    Playing DTMF Tones

    Let's play the tones of phone number 508 647 7000 for example. Notice that the "0" symbol corresponds to the 11th tone.

    fori=[5 11 8 6 4 7 7 11 11 11],

    p = audioplayer(tones(:,i),Fs);

    play(p)

    pause(0.5)

    end

    Estimating DTMF Tones with the Goertzel Algorithm

    The minimum duration of a DTMF signal defined by the ITU standard is 40 ms. Therefore, t here are at most 0.04 x 8000 = 320 samples available for estimation and detection. The DTMF decoder needs

    to estimate the frequencies contained in these short signals.

    One common approach to this estimation problem is to compute the Discrete-Time Fourier Transform (DFT) samples close to t he seven fundamental tones. For a DFT-based solution, it has been shown

    that using 205 samples in the frequency domain minimizes the error between t he original frequencies and the points at which the DFT is estimated.

    Nt = 205;

    original_f = [lfg(:);hfg(:)] % Original frequencies

    original_f =

    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 =

    702

    780

    859

    937

    1210

    1327

    1483

    To minimize the error be tween the original frequencies and the points at which the DFT is estimated, we truncate the tones, keeping only 205 samples or 25.6 ms for further processing.

    tones = tones(1:205,:);

    At this point we could use the Fast Fourier Transform (FFT) algorithm to calculate the DFT. However, the popularity of the Goertzel algorithm in this context lies in the small number of points at which

    the DFT is estimated. In this case, the Goertzel algorithm is more efficient than the FFT algorithm.

    Plot Goertzel's DFT magnitude estimate of each tone on a grid corresponding to the telephone pa d.

    figure,

    fortoneChoice=1:12,

    % Select tone

    MathWorks - Examples - Dual-Tone Multi-Frequency (DTMF) Sign... http://www.mathworks.com/products/demos/signaltlbx/dtmf/dtmfdemo.html

    3 05/10/2014 19:23

  • 8/10/2019 Matlab DTM Examples

    3/3

    tone=tones(:,toneChoice);

    % Estimate DFT using Goertzel

    ydft(:,toneChoice) = goertzel(tone,k+1); % Goertzel use 1-based indexing

    % Plot magnitude of the DFT

    subplot(4,3,toneChoice),stem(estim_f,abs(ydft(:,toneChoice)));

    title(['Symbol "', symbol{toneChoice},'": [',num2str(f(1,toneChoice)),',',num2str(f(2,toneChoice)),']'])

    set(gca, 'XTick', estim_f, 'XTickLabel', estim_f, 'Xlim', [650 1550]);

    ylabel('DFT Magnitude');

    iftoneChoice>9, xlabel('Frequency (Hz)'); end

    end

    set(gcf, 'Color', [1 1 1], 'Position', [1 1 1280 1024])

    annotation(gcf,'textbox', 'Position',[0.28 0.96 0.45 0.026],...

    'EdgeColor',[1 1 1],...

    'String', '\bf Estimation of the frequencies contained in each tone of the telephone pad using Goertzel', ...

    'FitHeightToText','on');

    Detecting DTMF Tones

    The digital tone detection can be achieved by measuring the energy present at the seven frequencies estimated above. Each symbol can be separated by simply taking the component of maximum

    energy in the lower and upper frequency groups.

    Copyright 1988-2004 The MathWorks, Inc.Published with MATLAB 7.0.4

    MathWorks - Examples - Dual-Tone Multi-Frequency (DTMF) Sign... http://www.mathworks.com/products/demos/signaltlbx/dtmf/dtmfdemo.html

    3 05/10/2014 19:23