Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 24

DSP C5000

Chapter 17
DTMF generation and detection
Dual Tone Multiple Frequency

Copyrig
Learning Objectives

 DTMF signaling and tone generation.


 DTMF signal generation
 DTMF tone detection techniques and
the Goertzel algorithm.
 Implementation of the Goertzel
algorithm for tone detection on DSP

SIEE, Slide 2 Copyrig


Introduction
 Dual Tone Multi-Frequency (DTMF) is a widespread used signalling system: telephone services
use commonly key strokes for options selection
 DTMF is mainly used by touch-tone digital telephone sets which are an alternative to rotary
telephone sets.
 DTMF has now been extended to electronic mail and telephone banking systems
 It is easily implemented on a DSP as small part of the tasks.

SIEE, Slide 3 Copyrig


DTMF Signaling
 In a DTMF signaling system a unique combination of two normalized frequency tones
 Two types of signal processing are involved:
 Coding or generation.
 Decoding or detection.
 For coding, two sinusoidal sequences of finite duration are added in order to represent a digit.

SIEE, Slide 4 Copyrig


Dual tone Generation

A key stroke on
« 9 » will generate
2 added tones, one at
852Hz low frequency
and one at 1477Hz

The 2 tones are


Both audible.

SIEE, Slide 5 Copyrig


Tones Generation
 Dual tone generation can be done with 2
sinewave sources connected in parallel.
 Different method can be used for such
implementation:
 Polynomial approximation
 Look-up table
 Recursive oscillator
 DTMF signal must meet certain duration and
spacing requirements
 10 Digits are sent per second.
 Sampling is done via a codec at 8Khz
 Each tone duration must be >40msec and a
spacing of 50ms minimum between two digits is
SIEE, Slide 6
required Copyrig
2 and 9 digit signal sequence

SIEE, Slide 7 Copyrig


DTMF generation implementation
 Tone generation of a + + y(n)
DTMF is generally Z-1 Low
based on two freq
+
programmable, second
order digital sinusoidal Z-1
oscillators, one for the
low fl the other one for
the high fh tone. +
Z-1 High
 Two oscillators instead freq
+
of eight reduce the
code size. Z-1

 Coefficient and initial


conditions are set for
each particular
oscillation

SIEE, Slide 8 Copyrig


Digital oscillator parameters
 2 pole resonator
filter with 2 b0
H ( z) 
complexe poles on 1  a1 z 1  a2 z  2
the unit cercle
(unstable) b0  A sin(0 )
a1  2 cos(0 )
Output signal:
Y(n)= -a1y(n-1)-y(n-2) a2  1
Initial conditions:
Y(-1)=0
f0/fs
Y(-2)=-A sin()
f0 is the tone freq
fs is the sampling freq
SIEE, Slide 9 Copyrig
C55 sine generator code
 Frames of data stream of 120 samples (15msec) long
contain either DTMF tone samples or pause samples.
 The encoder is either in idle mode, not used to encode
digits or active and generates DTMF tones and pauses
 The sine equation is implemented in assembly language:
Mov a1/2, T1 ; coded in Q15
Mpym *AR1+,T1,AC0; ;AR1 y(n-1); AR1+1 y(n-2)
sub *AR1-<<#16,AC0,AC ;AC1= a1/2*y(n-1)-y(n-2)
Add AC0,AC1 ; AC1= a1*y(n-1)-y(n-2)
||delay *AR1 ;y(n-2)=y(n-1)
Mov rnd(hi(AC1)),*AR1 ;y(n-1)=y(n)
; output signal pointer is AR1

SIEE, Slide 10 Copyrig


Oscillator parameters at fs=8Khz

SIEE, Slide 11 Copyrig


DTMF Tone Detection
 Goertzel algorithm is the more efficient detection algorithm for a
single tone.
 To detect the level at a particular frequency the DFT is the most
suitable method:

m  N -1 j2km
-
X( k)  
m 0
x(m).e N

•The Goertzel algorithm is a recursive implementation


of the DFT ,
•16 samples of the DFT are computed for 16 tones
See DTMF.pdf file for a complete description

SIEE, Slide 12 Copyrig


Goertzel Algorithm Implementation
 To implement the Goertzel algorithm the
following equations are required:

If the length of the signal is N, the recursion for N - 1time is :


w k (n)  x(n)  2 cos(2f k / f s ) wk (n  1)  wk (n  2)
X (k )  wn ( N  1)  e  j 2f k / f s ) wk ( N  2) Complex formula
Magnitude squared is then :
2 2 2
X(k)  wn ( N  1)  2 cos(2f k / f s ) wk ( N  1).wk ( N  2)  wk ( N  2)

The only coefficient needed to compute output signal level is


Cos(2fk/fs)

SIEE, Slide 13 Copyrig


Goertzel Algorithm Implementation
Get N input samplex(n)

Compute recursive part:


Wk(n), n=0 to N-1
For 8 frequencies

Calculate X2(k) for 8 freq

Tests:
Magnitude
Harmonic
Total Energy

Output Digit

SIEE, Slide 14 Copyrig


Goertzel Algorithm Implementation
 The value of k determines the tone we are
trying to detect and is given by:

fk
k  N
fs
 Where: fk = frequency of the tone.
fs = sampling frequency.
N is set to 205.

 Then we can calculate coefficient


2cos(2**k/N).
SIEE, Slide 15 Copyrig
Goertzel Algorithm Implementation
N = 205 Frequency k Coefficient Coefficient
(decimal) (Q15)
fs = 8kHz
697 18 1.703275 0x6D02*
770 20 1.635585 0x68AD*
852 22 1.562297 0x63FC*
941 24 1.482867 0x5EE7*
1209 31 1.163138 0x4A70*
1336 34 1.008835 0x4090*
1477 38 0.790074 0x6521
1633 42 0.559454 0x479C
* The decimal values are divided by 2 to be
represented in Q15 format (a1/2<1).
SIEE, Slide 16 Copyrig
Goertzel Algorithm Implementation

wn = x(n) - wn-2 + a1*wn-1; 0n<N-1


= sum1 + prod1

Where: a1= 2cos(2k/N) and N=205


This gives 205 MACs+ 205 ADD

The last computation gives the energy of the tone


and is done with:
2 SQRS and one multiplication

|Yk(N) |2 = Q2(N) + Q2(N-1) - a1*Q(N)*Q(N-1)

SIEE, Slide 17 Copyrig


Goertzel Algorithm Implementation
void Goertzel (void)
{
static short delay;
‘C’ code
static short delay_1 = 0;
static short delay_2 = 0;
static int N = 0;
static int Goertzel_Value = 0;
int I, prod1, prod2, prod3, sum, R_in, output;
short input;
short coef_1 = 0x4A70; // For detecting 1209 Hz
R_in = mcbsp0_read(); // Read the signal in
input = (short) R_in;
input = input >> 4; // Scale down input to prevent overflow
prod1 = (delay_1*coef_1)>>14;
delay = input + (short)prod1 - delay_2;
delay_2 = delay_1;
delay_1 = delay;
N++;
if (N==206)
{
prod1 = (delay_1 * delay_1);
prod2 = (delay_2 * delay_2);
prod3 = (delay_1 * coef_1)>>14;
prod3 = prod3 * delay_2;
Goertzel_Value = (prod1 + prod2 - prod3) >> 15;
Goertzel_Value <<= 4; // Scale up value for sensitivity
N = 0;
delay_1 = delay_2 = 0;
}
output = (((short) R_in) * ((short)Goertzel_Value)) >> 15;
mcbsp0_write(output& 0xfffffffe); // Send the signal out
return;
SIEE, Slide 18
} Copyrig
C54 assembly programme
Goertzel tone detection routine
;Assume input signal x(n) is read through an I/O port at address 100h
;Output level Y(k)2 is sent to a port at address 1001h
;Scratch RAM reservation
.bss wn,2 ;w(n-1) andw(n-2)
.bss xn,1 ; input signal xn
.bss Y,1 ; tone Energy
.bss alpha,1 ;coefficient storage
; Constant initialisation
alphap .word 0x68ADh ; a2/2 coefficient value at fs=8khz
; (prog memory)
N .set 205 ;value of N

;DSP modes initialisation


SSBX FRCT ;Product shift for Q15 format
SSBX SXM ;Sign extension during shift
RSXB OVA ; no overflowmode for A and B
RSXB OVB

SIEE, Slide 19 Copyrig


C54 assembly programme

;Data pointers Initialisation


LD #wn,AR2 ; AR2 is pointing w(n-1)
LD #xn,AR1
LD #Y,AR4
LD #alpha,AR3
MVPD #alphap,*AR3 ;Move alpha value to data
RAM
RPTZ #1 ;Accumulator A=0
STL A,*AR2+ , w(0) and w(-1) are set to 0
MAR *AR2- ; AR2 is pointing w(n-2)

SIEE, Slide 20 Copyrig


Algorithm Core

STM #N-1,BRC ; repeat block number


RPTB loop-1
PORTR 100h,*AR1
LD *AR1,16,A ; AccH=x(n)
SUB *AR2,16,A ;A=x(n)-w(n-2)
MAC *AR2,*AR3,A ;A=x(n)-w(n-2)+alphaw(n-1)
MAC *AR2,*AR3,A ;A=x(n)-w(n-2)+2alphaw(n-1)
delay *AR2 ;w(n-2)=w(n-1) tap delay
STH A,*AR2+ ;w(n-1)=w(n) tap delay
Loop ;end of loop

SIEE, Slide 21 Copyrig


Energy calculation

LD *AR2,16,A ;A=w(N-1)
MPYA *AR2- ;T=w(N-1) B=w(N-1)^2
MPY *AR2,A ;A=w(N)*w(N-1)
LD *AR3,T ;T=alphap
MPYA A ;A=alphap*w(N)*w(N-1)
SUB A,1,B ; substract with a left shift to ;obtain 2alphap
; B=w(N-1)^2-2alphap*w(N)*w(N-1)
LD *AR2,T ;T=w(N)
MAC *AR2,B ;B=w(N-1)^2-2alphap*w(N)*w(N-1)+w(N)^2
STH *AR4 ;save to Y
PORTW *AR4,101h ;copy output level

SIEE, Slide 22 Copyrig


Universal Multifrequency
Tone Generator and detector (UMTG)
 This software module developed by
SPIRIT Corp. for the TMS320C54x and
TMS320C55X platform
 It can be used into embedded devices for
generating various telephone services used
in intelligent network systems
 Or as a simple tone generator for custom
applications
 It is fully compliant with TMS Algorithm
standard rules
See SPRU 639 and SPRU 638 AN
SIEE, Slide 23 Copyrig
Follow on Activities
 Application 7 for the TMS320C5416 DSK
 Uses a microphone to pick up the sounds generated
by a touch phone. The buttons pressed are identified
using the Goerztel algorithm and their values
displayed on Stdout. The frequency response of each
Goertzel filter is given using Matlab.

SIEE, Slide 24 Copyrig

You might also like