Académique Documents
Professionnel Documents
Culture Documents
This application report explains how a sine wave can be generated using a TMS320C54x
digital signal processor (DSP).
The sine wave has found its usage in various applications, including factory testing for
connectivity. One method of sine-wave generation is based on a positive feedback system that
employs the principle of oscillation. Oscillation can only be achieved if the system satisfies the
Bakhausen Criterion. Following the principles of an analog oscillator, a digital oscillator is
implemented using a special two-pole bandpass filter. For more information on this subject, refer
to Digital Signal Processing: Principles, Algorithms, and Applications by John Proakis and
Dimitris Manolakis [1]. The filter and the final difference equation are shown in Figure 1 and
Equation (1), respectively.
b0
d(n)
y(n)
z1
a1
z1
a2
2pf 0
.
fs
fs is the sampling frequency, f0 is the desired oscillating frequency, and A is the amplitude of the
sinusoidal wave.
The advantage of this digital oscillator is that it does not consume much memory space and
MIPS. However, it may cause instability because positive feedback is employed.
TMS320C54x is a trademark of Texas Instruments.
Other trademarks are the property of their respective owners.
1
SPRA819
Another approach of generating a sine wave is based on a look-up table. Starting with an analog
sine wave expression and taking its samples at a fixed regular interval at the rate n:
x(t) + sin(2pFt ) q),
(2)
where n + 0, 1, 2, AAA , f + FF s
(3)
Time
Ts
Ts
Ts
Ts
Ts
Ts
Ts
Ts
SPRA819
The basic idea is to keep track of the starting and present phases of the waveform so that a
continuous-phase sine wave can be obtained. By knowing or remembering the previous phase
that has been output, the next amplitude to be output is then calculated. The next phase (that
corresponds to the next amplitude) is incremented according to the desired output frequency.
With this calculated new phase, the amplitude can be read off the look-up table and output to the
CODEC.
Assume that the starting phase of the output signal to be stored in data memory is Init_Phase.
The phase step of the desired frequency is stored in Phase_Step. The magnitude of the phase
step is calculated using Equation (4).
Phase_Step +
Desired frequency
Sampling frequency
(4)
2p + 2pf
Therefore, if the desired frequency is 10 kHz with a sampling frequency of 44.1 kHz, the phase
step is:
Phase_Step + 10000
44100
Normalized by p
/4
1/4
2000
/2
1/2
4000
3/4
3/4
6000
8000
3/4
3/4
A000
Since the look-up table is based on cosine values, the normalized phase has to be further
subtracted by /2 (4000h) in order to generate the sine wave. However, if the cosine wave is
desired, this subtraction is not necessary. Next, this phase value is used to read the correct
amplitude from the look-up table. The values of cos(0), cos(/2), and cos() are mapped to the
memory addresses of the look-up table COSOFF, (COSOFF + 128), and (COSOFF + 256),
respectively. For example, if the starting phase of the signal is 119.53 degrees, then the
location in the cosine table is calculated as follows:
Location in cosine table = 119.53/(0.703125) = 170
SPRA819
Therefore, the corresponding cosine value can be read from (COSFF+170) because the value of
cos(119.53) is equal to that of cos(119.53). This is why the cosine table is used instead of the
sine table. Hence, the starting phase, when normalized to the size of the look-up table, is:
Init_Phase = (170/256) = A600h (Q15 format)
The normalized starting phase ranges from 1 to 1, which correspond to 180 degrees and
180 degrees, respectively.
If the desired output frequency is 10 kHz, then the phase step (in Q15 format), 2f, with a
sampling frequency of 44.1 kHz is:
Phase_Step + 2
Assuming that the amplitude corresponding to the starting phase has been output. The next
phase angle, 2fn, for n = 1, is calculated as follows:
Present output phase (Current_Phase) =
Init_Phase + Phase_Step
A600h + 3A0Ch
E00Ch
Init_Phase =
Current_phase
E00Ch 4000h
A00Ch
A negative value implies that a negative offset from the cosine table is needed to obtain this sine
value. As explained previously, reading the value from the cosine table using the absolute value
gives the same result. The absolute value of the phase angle is computed as follows:
Absolute Phase Angle = ABS[Sine_Phase] = ABS[A00Ch] = 5FF4h
The offset from the cosine table address is thus generated from the above calculation. By
adding this offset to the start of the COSINE table, the next amplitude sample can be obtained.
Using the above absolute phase angle, the offset is 5FF4h/80h = BFh = 191 (decimal). The
amplitude at location 158 of the cosine look-up table is the next output.
COSOFF + (5FF4h/80h) = COSOFF + BFh
The value at look-up table is:
Cos(191/256)*) = 0.698
This value is passed to the DSP CODEC for output. The amplitude to be output is rounded off to
the nearest integer so that the pointer can point to a memory location in the look-up table. The
advantage is that continuous phase signal is maintained.
SPRA819
References
1. Dimitris G. Manolakis and John G. Proakis, Digital Signal Processing: Principles, Algorithms,
and Applications, 3rd ed., Prentice Hall, New Jersey, 1996.
2. DTMF Tone Generation and Detection: An Implementation Using the TMS320C54x application
report (SPRA096)
3. Implementation of an FSK Modem Using the TMS320C17 application report (SPRA080)
SPRA819
Appendix A
Cosine Table
************************************************************************
*
Sinewave generator:
*
* Table Size : 256.000000
*
************************************************************************
.sect COSINE
COSOFF:
.word 06ccbh
.word 06cc9h
.word 06cc3h
.word 06cb9h
.word 06caah
.word 06c97h
.word 06c80h
.word 06c65h
.word 06c45h
.word 06c22h
.word 06bfah
.word 06bceh
.word 06b9eh
.word 06b6ah
.word 06b31h
.word 06af5h
.word 06ab4h
.word 06a70h
.word 06a27h
.word 069dah
.word 06989h
.word 06934h
.word 068dbh
.word 0687dh
.word 0681ch
.word 067b7h
.word 0674eh
.word 066e1h
.word 0666fh
SPRA819
.word 065fah
.word 06581h
.word 06504h
.word 06483h
.word 063ffh
.word 06376h
.word 062eah
.word 06259h
.word 061c5h
.word 0612eh
.word 06092h
.word 05ff3h
.word 05f50h
.word 05ea9h
.word 05dffh
.word 05d51h
.word 05c9fh
.word 05beah
.word 05b32h
.word 05a76h
.word 059b6h
.word 058f3h
.word 0582ch
.word 05762h
.word 05695h
.word 055c4h
.word 054f1h
.word 05419h
.word 0533fh
.word 05261h
.word 05180h
.word 0509ch
.word 04fb5h
.word 04ecbh
.word 04ddeh
.word 04ceeh
.word 04bfbh
.word 04b05h
.word 04a0ch
.word 04910h
SPRA819
.word 04811h
.word 04710h
.word 0460bh
.word 04505h
.word 043fbh
.word 042efh
.word 041e0h
.word 040cfh
.word 03fbbh
.word 03ea5h
.word 03d8ch
.word 03c71h
.word 03b54h
.word 03a34h
.word 03912h
.word 037eeh
.word 036c8h
.word 035a0h
.word 03475h
.word 03349h
.word 0321ah
.word 030eah
.word 02fb8h
.word 02e84h
.word 02d4eh
.word 02c16h
.word 02addh
.word 029a2h
.word 02865h
.word 02727h
.word 025e8h
.word 024a7h
.word 02364h
.word 02220h
.word 020dbh
.word 01f94h
.word 01e4dh
.word 01d04h
.word 01bbah
.word 01a6fh
SPRA819
.word 01923h
.word 017d6h
.word 01688h
.word 01539h
.word 013eah
.word 01299h
.word 01148h
.word 0ff6h
.word 0ea4h
.word 0d51h
.word 0bfdh
.word 0aa9h
.word 0955h
.word 0800h
.word 06abh
.word 0556h
.word 0401h
.word 02abh
.word 0155h
.word 00h
.word 0feabh
.word 0fd55h
.word 0fbffh
.word 0faaah
.word 0f955h
.word 0f800h
.word 0f6abh
.word 0f557h
.word 0f403h
.word 0f2afh
.word 0f15ch
.word 0f00ah
.word 0eeb8h
.word 0ed67h
.word 0ec16h
.word 0eac7h
.word 0e978h
.word 0e82ah
.word 0e6ddh
.word 0e591h
SPRA819
10
.word 0e446h
.word 0e2fch
.word 0e1b3h
.word 0e06ch
.word 0df25h
.word 0dde0h
.word 0dc9ch
.word 0db59h
.word 0da18h
.word 0d8d9h
.word 0d79bh
.word 0d65eh
.word 0d523h
.word 0d3eah
.word 0d2b2h
.word 0d17ch
.word 0d048h
.word 0cf16h
.word 0cde6h
.word 0ccb7h
.word 0cb8bh
.word 0ca60h
.word 0c938h
.word 0c812h
.word 0c6eeh
.word 0c5cch
.word 0c4ach
.word 0c38fh
.word 0c274h
.word 0c15bh
.word 0c045h
.word 0bf31h
.word 0be20h
.word 0bd11h
.word 0bc05h
.word 0bafbh
.word 0b9f5h
.word 0b8f0h
.word 0b7efh
.word 0b6f0h
SPRA819
.word 0b5f4h
.word 0b4fbh
.word 0b405h
.word 0b312h
.word 0b222h
.word 0b135h
.word 0b04bh
.word 0af64h
.word 0ae80h
.word 0ad9fh
.word 0acc1h
.word 0abe7h
.word 0ab0fh
.word 0aa3ch
.word 0a96bh
.word 0a89eh
.word 0a7d4h
.word 0a70dh
.word 0a64ah
.word 0a58ah
.word 0a4ceh
.word 0a416h
.word 0a361h
.word 0a2afh
.word 0a201h
.word 0a157h
.word 0a0b0h
.word 0a00dh
.word 09f6eh
.word 09ed2h
.word 09e3bh
.word 09da7h
.word 09d16h
.word 09c8ah
.word 09c01h
.word 09b7dh
.word 09afch
.word 09a7fh
.word 09a06h
.word 09991h
11
SPRA819
12
.word 0991fh
.word 098b2h
.word 09849h
.word 097e4h
.word 09783h
.word 09725h
.word 096cch
.word 09677h
.word 09626h
.word 095d9h
.word 09590h
.word 0954ch
.word 0950bh
.word 094cfh
.word 09496h
.word 09462h
.word 09432h
.word 09406h
.word 093deh
.word 093bbh
.word 0939bh
.word 09380h
.word 09369h
.word 09356h
.word 09347h
.word 0933dh
.word 09337h
.word 09335h
SPRA819
Appendix B
Software Listing
***************************************************
*
SineWave Generator
***************************************************
***********************************************************
*
freq
= Desired Frequency
Fs
*********************************************************
FREQ1000
.set
1486
FREQ1750
.set
2600
FREQ2000
.set
2972
FREQ3000
.set
4458
FRAME_SIZE
.set 64
.mmregs
.include cos256_tbl.inc
.global COSINE_BUFFER
.global FREQ_BUFFER
STK
.bss
TEMP,1
.bss
FREQ_BUFFER,128
.bss
COSINE_BUFFER,257
.bss
_FREQ_STEP,1
.bss
_INIT_PHASE,1
.def
FREQ
.usect
STACK,100
.mmregs
.sect
FREQ:
CODE
SSBX
OVM
SSBX
SXM
SSBX
FRCT
NOP
NOP
STM
#STK+100H,SP
STM
#001EH,PMST
ST
#FREQ1000,*(_FREQ_STEP)
ST
#0,*(_INIT_PHASE)
STM
#FREQ_BUFFER,AR3
13
SPRA819
LOOP:
CALL
COPY_COS_TBL
CALL
GEN_FREQ
LOOP
;**********************************************
;
;**********************************************
GEN_FREQ:
STM
#FRAME_SIZE1,BRC
RPTB
sine11
LD
*(_FREQ_STEP),A
ADD
*(_INIT_PHASE),A
;A=PRESENT PHASE
STL
A,*(_INIT_PHASE)
SUB
#4000H,A
ABS
STL
A,*(TEMP)
;
;
LD
*(TEMP),9,A
STH
A,*(TEMP)
LD
*(TEMP),A
ABS
ADD
#COSINE_BUFFER,A
STLM
A,AR2
nop
nop
LD
*AR2,A
STL
A,*AR3+
;
;
sine1:
NOP
RET
COPY_COS_TBL:
STM
#COSINE_BUFFER,AR2
RPT
#2571
MVPD
#COSOFF,*AR2+
RET
14
IMPORTANT NOTICE
Texas Instruments Incorporated and its subsidiaries (TI) reserve the right to make corrections, modifications,
enhancements, improvements, and other changes to its products and services at any time and to discontinue
any product or service without notice. Customers should obtain the latest relevant information before placing
orders and should verify that such information is current and complete. All products are sold subject to TIs terms
and conditions of sale supplied at the time of order acknowledgment.
TI warrants performance of its hardware products to the specifications applicable at the time of sale in
accordance with TIs standard warranty. Testing and other quality control techniques are used to the extent TI
deems necessary to support this warranty. Except where mandated by government requirements, testing of all
parameters of each product is not necessarily performed.
TI assumes no liability for applications assistance or customer product design. Customers are responsible for
their products and applications using TI components. To minimize the risks associated with customer products
and applications, customers should provide adequate design and operating safeguards.
TI does not warrant or represent that any license, either express or implied, is granted under any TI patent right,
copyright, mask work right, or other TI intellectual property right relating to any combination, machine, or process
in which TI products or services are used. Information published by TI regarding third-party products or services
does not constitute a license from TI to use such products or services or a warranty or endorsement thereof.
Use of such information may require a license from a third party under the patents or other intellectual property
of the third party, or a license from TI under the patents or other intellectual property of TI.
Reproduction of information in TI data books or data sheets is permissible only if reproduction is without
alteration and is accompanied by all associated warranties, conditions, limitations, and notices. Reproduction
of this information with alteration is an unfair and deceptive business practice. TI is not responsible or liable for
such altered documentation.
Resale of TI products or services with statements different from or beyond the parameters stated by TI for that
product or service voids all express and any implied warranties for the associated TI product or service and
is an unfair and deceptive business practice. TI is not responsible or liable for any such statements.
Following are URLs where you can obtain information on other Texas Instruments products and application
solutions:
Products
Applications
Amplifiers
amplifier.ti.com
Audio
www.ti.com/audio
Data Converters
dataconverter.ti.com
Automotive
www.ti.com/automotive
DSP
dsp.ti.com
Broadband
www.ti.com/broadband
Interface
interface.ti.com
Digital Control
www.ti.com/digitalcontrol
Logic
logic.ti.com
Military
www.ti.com/military
Power Mgmt
power.ti.com
Optical Networking
www.ti.com/opticalnetwork
Microcontrollers
microcontroller.ti.com
Security
www.ti.com/security
Telephony
www.ti.com/telephony
www.ti.com/video
Wireless
www.ti.com/wireless
Mailing Address:
Texas Instruments
Post Office Box 655303 Dallas, Texas 75265
Copyright 2004, Texas Instruments Incorporated