Sie sind auf Seite 1von 65

TMS320C6713 DSK

USER MANUAL













Cranes Software International Limited
(TI-Division)
#5, Airport Road, Domlur Layout, Bangalore 560 071.
Phone: 91-80-25352636/37/25353038/4532/25354496 Fax : 25356299
tisupport@cranessoftware.com



Cranes Software Int. Ltd. TI-DIVISION

2


Copyright 2008 Cranes Software International Limited. All rights reserved.
Cranes Software believes the information in this publication is accurate as of
its publication date. The information is subject to change without notice. THE
INFORMATION IN THIS PUBLICATION IS PROVIDED "AS IS." CRANES SOFTWARE MAKES NO
REPRESENTATIONS OR WARRANTIES OF ANY KIND WITH RESPECT TO THE INFORMATION IN
THIS PUBLICATION, AND SPECIFICALLY DISCLAIMS IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Use, copying, and distribution of any part in this publication requires an
applicable
Software license.



































Cranes Software Int. Ltd. TI-DIVISION

3



TABLE OF CONTENTS



1. INSTALLATION PROCEDURE. 4

2. DSK FEAUTURES. 8

3. INTRODUCTON TO CODE COMPOSER STUDIO13

4. EXPERIMENTS USING DSK

a. LINEAR CONVOLUTION OF TWO GIVEN SEQUENCES

b. CIRCULAR CONVOLUTION OF TWO GIVEN SEQUENCES

c. COMPPUTATAION OF N- POINT DFT OF A GIVEN SEQUANCE

d. REALIZATION OF FIR FILTER IN REALTIME.


e. AUDIO APPLICATION
a. PLOT A SPECTROGRAM


f. NOISE REMOVAL USING ADAPTIVE FILTERS.


g. IMPLUSE RESPONSE


h. MINI PROJECT








Cranes Software Int. Ltd. TI-DIVISION

4

INSTALLATION PROCEDURE

SYSTEM REQUIREMENTS


Minimum

Recommended
233MHz or Higher Pentium-
Compatible CPU
600MB of free hard disk space
128MB of RAM or more
SVGA (800 x 600 ) display
Internet Explorer (4.0 or later) or
Netscape Navigator (4.7 or later)
Local CD-ROM drive
500MHz or Higher Pentium
Compatible CPU

128MB RAM

16bit Color

Supported Operating Systems
Windows NT 4.0 Service Pack 4 or higher
Windows 2000 Service Pack 1
Windows Me
Windows XP


DSK HARDWARE INSTALLATION


Shut down and power off the PC
Connect the supplied USB port cable to the board
Connect the other end of the cable to the USB port of PC

Note: If you plan to install a Microphone, speaker, or
Signal generator/CRO these must be plugged in properly
before you connect power to the DSK

Plug the power cable into the board
Plug the other end of the power cable into a power outlet
The user LEDs should flash several times to indicate board is operational
When you connect your DSK through USB for the first time on a Windows loaded PC the
new hardware found wizard will come up. So, Install the drivers (The CCS CD contains
the require drivers for C6713 DSK).
Install the CCS software for C6713 DSK.




Cranes Software Int. Ltd. TI-DIVISION

5

DSK SOFTWARE INSTALLATION

You must install the hardware before you install the software on your system.

The requirements for the operating platform are;

Insert the installation CD into the CD-ROM drive

An install screen appears like below; if not, goes to the windows Explorer
and run setup.exe



















Cranes Software Int. Ltd. TI-DIVISION

6

Choose the option to install Code Composer Studio



If you already have C6000 CC Studio IDE installed on your PC,
do not install DSK software. CC Studio IDE full tools supports
the DSK platform

Respond to the dialog boxes as the installation program runs.
The Installation program automatically configures CC Studio IDE for operation with your
DSK and creates a 6713 DSK CCStudio_v3.1 IDE DSK icon on your desktop.




DIAGNOSTIC:-

Test the USB port by running DSK Port test from the start menu

Use StartProgramsTexas InstrumentsCode Composer StudioCode Composer Studio
C6713 DSK ToolsC6713 DSK Diagnostic Utilities

Cranes Software Int. Ltd. TI-DIVISION

7

(Available on desktop)
Select StartSelect 6713 DSK Diagnostic Utility
The Screen Look like as below. The below Screen will appear
Select Start Option
Utility Program will test the board
After testing Diagnostic Status you will get PASS




If the board still fails to detect

Cranes Software Int. Ltd. TI-DIVISION

8

TROUBLESHOOTING:-

1. If installing on Windows XP and your PC is connected to the internet through a firewall the
USB install may take up to 15 minutes if you let it complete normally. The work-around for
this issue is to simply disconnect your network cable during the USB hardware install.

2. Make sure all of the Configuration Switches (SW3) are set in the off position. This configures
the DSK for the factory default settings of little endian processor mode booting out of the on-
board Flash memory.

3. Some of the Help Files are links to Adobe Acrobat PDF files. If you intend to access these files
you must have Adobe Acrobat installed on your system.

4. If you want to verify a successful USB driver install, open your device manager by right
clicking on the My Computer icon on your desktop and selecting Properties --> HW -->
Device Manager. You should see a new class SD USB Based Debug Tools and one
Spectrum Digital TMS320C6713 DSK installed.

5. The BUSY LED above the USB connector comes on when power is applied to the DSK. Do not
launch Code Composer until the LED is off.

6. Go to CMOS setup Enable the USB Port Option
(The required Device drivers will load along with CCS Installation)

7 Message: Failed: USB device is NOT enumerated or plugged in.

Problem: Windows cannot find the DSK. Check power and USB Cable

8 Messages: Waiting for USB Enumeration.

Status: This is a status message which indicates that Code Composer Studio is waiting for
communication with the on-board JTAG emulator to be established. This should take less than 10
seconds. Do not hit the close button unless it is clear that something is wrong (the progress bar
runs forever).










Cranes Software Int. Ltd. TI-DIVISION

9

TMS320C6713 DSK BOARD FEATURES

Package Contents



The C6713 DSK builds on TI's industry-leading line of low cost, easy-to-use DSP Starter Kit
(DSK) development boards. The high-performance board features the TMS320C6713 floating-
point DSP. Capable of performing 1350 million floating-point operations per second (MFLOPS),
the C6713 DSP makes the C6713 DSK the most powerful DSK development board.

The DSK is USB port interfaced platform that allows to efficiently develop and test applications
for the C6713. The DSK consists of a C6713-based printed circuit board that will serve as a
hardware reference design for TIs customers products. With extensive host PC and target DSP
software support, including bundled TI tools, the DSK provides ease-of-use and capabilities that
are attractive to DSP engineers.

The following checklist details items that are shipped with the C6713 DSK.

TMS320C6713 DSK TMS320C6713 DSK development board

Other hardware External 5VDC power supply

IEEE 1284 compliant male-to-female cable

CD-ROM Code Composer Studio DSK tools

Technical reference manual

Cranes Software Int. Ltd. TI-DIVISION

10

The C6713 DSK has a TMS320C6713 DSP onboard that allows full-speed verification of code
with Code Composer Studio. The C6713 DSK provides:

A USB Interface
SDRAM and Flash ROM
An analog interface circuit for Data conversion (AIC)
An I/O port
Embedded JTAG emulation support

Connectors on the C6713 DSK provide DSP external memory interface (EMIF) and peripheral
signals that enable its functionality to be expanded with custom or third party daughter boards.

The DSK provides a C6713 hardware reference design that can assist you in the development of
your own C6713-based products. In addition to providing a reference for interfacing the DSP to
various types of memories and peripherals, the design also addresses power, clock, JTAG, and
parallel peripheral interfaces.

The C6713 DSK includes a stereo codec. This analog interface circuit (AIC) has the following
characteristics:

High-Performance Stereo Codec
90-dB SNR Multibit Sigma-Delta ADC (A-weighted at 48 kHz)
100-dB SNR Multibit Sigma-Delta DAC (A-weighted at 48 kHz)
1.42 V 3.6 V Core Digital Supply: Compatible With TI C54x DSP Core Voltages
2.7 V 3.6 V Buffer and Analog Supply: Compatible Both TI C54x DSP Buffer
Voltages
8-kHz 96-kHz Sampling-Frequency Support

Software Control Via TI McBSP-Compatible Multiprotocol Serial Port
I 2 C-Compatible and SPI-Compatible Serial-Port Protocols
Glueless Interface to TI McBSPs

Audio-Data Input/Output Via TI McBSP-Compatible Programmable Audio Interface
I 2 S-Compatible Interface Requiring Only One McBSP for both ADC and DAC
Standard I 2 S, MSB, or LSB Justified-Data Transfers
16/20/24/32-Bit Word Lengths

The TMS320C6713 DSP compose the floating-point DSP generation in the TMS320C6000
DSP platform. The C6713 device is based on the high-performance, advanced very-long-
instruction-word (VLIW) architecture developed by Texas Instruments (TI), making this DSP an
excellent choice for multichannel and multifunction applications. The 6713 DSK is a low-cost
standalone development platform that enables customers to evaluate and develop applications for
the TI C67XX DSP family. The DSK also serves as a hardware reference design for the
TMS320C6713 DSP. Schematics, logic equations and application notes are available to ease
hardware development and reduce time to market.

Cranes Software Int. Ltd. TI-DIVISION

11

Operating at 225 MHz, the C6713 delivers up to 1350 million floating-point operations per second
(MFLOPS), 1800 million instructions per second (MIPS), and with dual fixed-/floating-point
multipliers up to 450 million multiply-accumulate operations per second (MMACS).The DSK uses
the 32-bit EMIF for the SDRAM (CE0) and daughter card expansion interface (CE2 and CE3).
The Flash is attached to CE1 of the EMIF in 8-bit mode.

An on-board AIC23 codec allows the DSP to transmit and receive analog signals. McBSP0 is used
for the codec control interface and McBSP1 is used for data. Analog audio I/O is done through
four 3.5mm audio jacks that correspond to microphone input, line input, line output and headphone
output. The codec can select the microphone or the line input as the active input. The analog
output is driven to both the line out (fixed gain) and headphone (adjustable gain) connectors.
McBSP1 can be re-routed to the expansion connectors in software.

A programmable logic device called a CPLD is used to implement glue logic that ties the board
components together. The CPLD has a register based user interface that lets the user configure the
board by reading and writing to the CPLD registers. The registers reside at the midpoint of CE1.

The DSK includes 4 LEDs and 4 DIP switches as a simple way to provide the user with interactive
feedback. Both are accessed by reading and writing to the CPLD registers.

An included 5V external power supply is used to power the board. On-board voltage regulators
provide the 1.26V DSP core voltage, 3.3V digital and 3.3V analog voltages. A voltage supervisor
monitors the internally generated voltage, and will hold the boards in reset until the supplies are
within operating specifications and the reset button is released. If desired, JP1 and JP2 can be used
as power test points for the core and I/O power supplies.

Code Composer communicates with the DSK through an embedded JTAG emulator with a USB
host interface. The DSK can also be used with an external emulator through the external JTAG
connector.

TMS320C6713 DSP Features
Highest-Performance Floating-Point Digital Signal Processor (DSP):
Eight 32-Bit Instructions/Cycle
32/64-Bit Data Word
300-, 225-, 200-MHz (GDP), and 225-, 200-, 167-MHz (PYP) Clock Rates
3.3-, 4.4-, 5-, 6-Instruction Cycle Times
2400/1800, 1800/1350, 1600/1200, and 1336/1000 MIPS /MFLOPS
Rich Peripheral Set, Optimized for Audio
Highly Optimized C/C++ Compiler
Extended Temperature Devices Available
Advanced Very Long Instruction Word (VLIW) TMS320C67x DSP Core
Eight Independent Functional Units:
Two ALUs (Fixed-Point)
Four ALUs (Floating- and Fixed-Point)
Two Multipliers (Floating- and Fixed-Point)
Load-Store Architecture With 32 32-Bit General-Purpose Registers
Cranes Software Int. Ltd. TI-DIVISION

12

Instruction Packing Reduces Code Size
All Instructions Conditional
Instruction Set Features
Native Instructions for IEEE 754
Single- and Double-Precision
Byte-Addressable (8-, 16-, 32-Bit Data)
8-Bit Overflow Protection
Saturation; Bit-Field Extract, Set, Clear; Bit-Counting; Normalization
L1/L2 Memory Architecture
4K-Byte L1P Program Cache (Direct-Mapped)
4K-Byte L1D Data Cache (2-Way)
256K-Byte L2 Memory Total: 64K-Byte L2 Unified Cache/Mapped RAM, and 192K-Byte
Additional L2 Mapped RAM
Device Configuration
Boot Mode: HPI, 8-, 16-, 32-Bit ROM Boot
Endianness: Little Endian/Big Endian
32-Bit External Memory Interface (EMIF)
Glueless Interface to SRAM, EPROM, Flash, SBSRAM, and SDRAM
512M-Byte Total Addressable External Memory Space
Enhanced Direct-Memory-Access (EDMA) Controller (16 Independent Channels)
16-Bit Host-Port Interface (HPI)
Two Multichannel Buffered Serial Ports (McBSPs)
Two Independent Clock Zones Each (1 TX and 1 RX)
Eight Serial Data Pins Per Port:
Individually Assignable to any of the Clock Zones
Each Clock Zone Includes:
Programmable Clock Generator
Programmable Frame Sync Generator
TDM Streams From 2-32 Time Slots
Support for Slot Size:
8, 12, 16, 20, 24, 28, 32 Bits
Data Formatter for Bit Manipulation
Wide Variety of I2S and Similar Bit Stream Formats
Integrated Digital Audio Interface Transmitter (DIT) Supports:
S/PDIF, IEC60958-1, AES-3, CP-430 Formats
Up to 16 transmit pins
Enhanced Channel Status/User Data
Extensive Error Checking and Recovery
Two Inter-Integrated Circuit Bus (I
2
C Bus) Multi-Master and Slave Interfaces
Two 32-Bit General-Purpose Timers
Dedicated GPIO Module With 16 pins (External Interrupt Capable)
Flexible Phase-Locked-Loop (PLL) Based Clock Generator Module
IEEE-1149.1 (JTAG ) Boundary-Scan-Compatible
Package Options:
Cranes Software Int. Ltd. TI-DIVISION

13

208-Pin Power PAD Plastic (Low-Profile) Quad Flat pack (PYP)
272-BGA Packages (GDP and ZDP)
0.13-m/6-Level Copper Metal Process
CMOS Technology
3.3-V I/Os, 1.2 -V Internal (GDP & PYP)
3.3-V I/Os, 1.4-V Internal (GDP)(300 MHz only)

TMS320C6713 DSK Overview Block Diagram

Cranes Software Int. Ltd. TI-DIVISION

14

INTRODUCTION TO CODE COMPOSER STUDIO

Code Composer is the DSP industry's first fully integrated development environment (IDE) with
DSP-specific functionality. With a familiar environment liked MS-based C++TM, Code Composer
lets you edit, build, debug, profile and manage projects from a single unified environment. Other
unique features include graphical signal analysis, injection/extraction of data signals via file I/O,
multi-processor debugging, automated testing and customization via a C-interpretive scripting
language and much more.

CODE COMPOSER FEATURES INCLUDE:

IDE
Debug IDE
Advanced watch windows
Integrated editor
File I/O, Probe Points, and graphical algorithm scope probes
Advanced graphical signal analysis
Interactive profiling
Automated testing and customization via scripting
Visual project management system
Compile in the background while editing and debugging
Multi-processor debugging
Help on the target DSP

Note:-
Launch the DSK help file by opening the following file using Windows Explorer.

C:\CCStudio_v3.1\docs\hlp\c6713dsk.hlp

Documents for Reference:
spru509 Code Composer Studio getting started guide.
spru189 TMS320C6000 CPU & Instruction set guide
spru190 TMS320C6000 Peripherals guide
slws106d Codec(TLV320AIC23) Data Manual.
spru402 Programmers Reference Guide.
sprs186j TMS320C6713 DSP

Soft Copy of datasheets are available at : C:\CCStudio_v3.1\docs\pdf.








Cranes Software Int. Ltd. TI-DIVISION

15

Starting Code Composer
To start Code Composer Studio, double click the 6713 DSK CCStudio_v3.1 icon on your desktop.



Start Code Composer Studio (ignore this if CCS is already running) by double-clicking on the
C6713 DSK icon on your desktop.

Use the Debug Connect menu option to open a debug connection to the DSK board



Cranes Software Int. Ltd. TI-DIVISION

16

LINEAR CONVOLUTION

Description:-
Linear Convolution Involves the following operations.
1. Folding
2. Multiplication
3. Addition
4. Shifting

These operations can be represented by a Mathematical Expression as follows:


x[ ]= Input signal Samples
h[ ]= Impulse response co-efficient.
y[ ]= Convolution output.
n = No. of Input samples
h = No. of Impulse response co-efficient.

Algorithm to implement C or Assembly program for Convolution:

Eg: x[n] = {1, 2, 3, 4}
h[k] = {1, 2, 3, 4}


Where: n=4, k=4. ;Values of n & k should be a multiple of 4.
If n & k are not multiples of 4, pad with zeros to make
multiples of 4
r= n+k-1 ; Size of output sequence.
= 4+4-1
= 7.


r= 0 1 2 3 4 5 6
n= 0 x[0]h[0] x[0]h[1] x[0]h[2] x[0]h[3]
1 x[1]h[0] x[1]h[1] x[1]h[2] x[1]h[3]
2 x[2]h[0] x[2]h[1] x[2]h[2] x[2]h[3]
3 x[3]h[0] x[3]h[1] x[3]h[2] x[3]h[3]


Output: y[r] = { 1, 4, 10, 20, 25, 24, 16}.


NOTE: At the end of input sequences pad n and k no. of zeros



C PROGRAM TO IMPLEMENT LINEAR CONVOLUTION
Cranes Software Int. Ltd. TI-DIVISION

17

conv.c:
/* prg to implement linear convolution */
#include<stdio.h>
#include<math.h>
int y[20];

main()
{ int m=6; /*Lenght of i/p samples sequence*/
int n=6; /*Lenght of impulse response Co-efficients */
int i=0,j;
int x[15]={1,2,3,4,5,6,0,0,0,0,0,0}; /*Input Signal Samples*/
int h[15]={1,2,3,4,5,6,0,0,0,0,0,0}; /*Impulse Response Co-efficients*/

for(i=0;i<m+n-1;i++)
{
y[i]=0;
for(j=0;j<=i;j++)

y[i]+=x[j]*h[i-j];
}
for(i=0;i<m+n-1;i++)
printf("%d\n",y[i]);
}


PROCEDURE:

Open Code Composer Studio, make sure the DSP kit is turned on.
Use the Debug Connect menu option to open a debug connection to the DSK board
Start a new project using Project-new pull down menu, save it in a
separate directory(C:\CCStudio_v3.1\myprojects) with name lconv.pjt.
Add the source files conv.c
to the project using Projectadd files to project pull down menu.
Add the linker command file hello.cmd .
(Path: C:\CCStudio_v3.1\tutorial\dsk6713\hello1\hello.cmd)
Add the run time support library file rts6700.lib
(Path: C:\CCStudio_v3.1\c6000\cgtools\lib\rts6700.lib)
Compile the program using the Project-compile pull down menu or by
clicking the shortcut icon on the left side of program window.
Build the program using the Project-Build pull down menu or by
clicking the shortcut icon on the left side of program window.
Load the program(lconv.out) in program memory of DSP chip using the
File-load program pull down menu.




To View output graphically
Cranes Software Int. Ltd. TI-DIVISION

18

Select view graph time and frequency.

Configure the graphical window as shown below




Cranes Software Int. Ltd. TI-DIVISION

19

CIRCULAR CONVOLUTION
Description:-
Steps for Cyclic Convolution
Steps for cyclic convolution are the same as the usual convolution, except all index calculations
are done "mod N" = "on the wheel"
Steps for Cyclic Convolution

Step1: Plot f[m] and h[m]



Subfigure 1.1 Subfigure 1.2
Step 2: "Spin" h[m] n times Anti Clock Wise (counter-clockwise) to get h[n-m]
(i.e. Simply rotate the sequence, h[n], clockwise by n steps)


Figure 2: Step 2
Step 3: Point wise multiply the f[m] wheel and the h[nm] wheel. Sum=y[n]
Step 4: Repeat for all 0nN1
Example 1: Convolve (n = 4)

Subfigure 3.1 Subfigure 3.2
Figure 3: Two discrete-time signals to be convolved.


h[m] =
Cranes Software Int. Ltd. TI-DIVISION

20


Figure 4
Multiply f[m] and sum to yield: y[0] =3
h[1m]

Figure 5
Multiply f[m] and sum to yield: y[1] =5
h[2m]

Figure 6
Multiply f[m] and sum to yield: y[2] =3
h[3m]

Figure 7
Multiply f[m] and sum to yield: y[3] =1
C Program to Implement Circular Convolution

#include<stdio.h>
#include<math.h>
int m,n,x[30],h[30],y[30],i,j,temp[30],k,x2[30],a[30];
void main()
{
printf(" enter the length of the first sequence\n");
scanf("%d",&m);
printf(" enter the length of the second sequence\n");
Cranes Software Int. Ltd. TI-DIVISION

21

scanf("%d",&n);
printf(" enter the first sequence\n");
for(i=0;i<m;i++)
scanf("%d",&x[i]);
printf(" enter the second sequence\n");
for(j=0;j<n;j++)
scanf("%d",&h[j]);
if(m-n!=0) /*If length of both sequences are not equal*/
{
if(m>n) /* Pad the smaller sequence with zero*/
{
for(i=n;i<m;i++)
h[i]=0;
n=m;
}
for(i=m;i<n;i++)
x[i]=0;
m=n;
}
y[0]=0;
a[0]=h[0];
for(j=1;j<n;j++) /*folding h(n) to h(-n)*/
a[j]=h[n-j];
/*Circular convolution*/
for(i=0;i<n;i++)
y[0]+=x[i]*a[i];
for(k=1;k<n;k++)
{
y[k]=0;
/*circular shift*/
for(j=1;j<n;j++)
x2[j]=a[j-1];
x2[0]=a[n-1];
for(i=0;i<n;i++)
{
a[i]=x2[i];
y[k]+=x[i]*x2[i];
}
}
/*displaying the result*/
printf(" the circular convolution is\n");
for(i=0;i<n;i++)
printf("%d \t",y[i]);

}


IN PUT:
Eg: x[4]={1, 2, 3,4}
Cranes Software Int. Ltd. TI-DIVISION

22

h[4]={1, 2, 3,4}
OUT PUT y[4]={26, 28, 26,20}

PROCEDURE:

Open Code Composer Studio; make sure the DSP kit is turned on.
Start a new project using Project-new pull down menu, save it in a
separate directory(C:\CCStudio_v3.1\myprojects) with name cir conv.pjt.
Add the source files Circular Convolution
to the project using Projectadd files to project pull down menu.
Add the linker command file hello.cmd.
(Path: C:\CCStudio_v3.1\tutorial\dsk6713\hello1\hello.cmd)
Add the run time support library file rts6700.lib
(Path: C:\CCStudio_v3.1\c6000\cgtools\lib\rts6700.lib)
Compile the program using the Project-compile pull down menu or by
clicking the shortcut icon on the left side of program window.
Build the program using the Project-Build pull down menu or by
clicking the shortcut icon on the left side of program window.
Load the program(lconv.out) in program memory of DSP chip using the
File-load program pull down menu.









Cranes Software Int. Ltd. TI-DIVISION

23

DFT
Introduction:

In mathematics, the discrete Fourier transform (DFT) is one of the specific forms of Fourier
analysis. As such, it transforms one function into another, which is called the frequency domain
representation, or simply the DFT, of the original function (which is often a function in the time
domain). But the DFT requires an input function that is discrete and whose non-zero values have a
limited (finite) duration. Such inputs are often created by sampling a continuous function, like a
person's voice. And unlike the discrete-time Fourier transform (DTFT), it only evaluates enough
frequency components to reconstruct the finite segment that was analyzed. Its inverse transform
cannot reproduce the entire time domain, unless the input happens to be periodic (forever).
Therefore it is often said that the DFT is a transform for Fourier analysis of finite-domain discrete-
time functions. The sinusoidal basis functions of the decomposition have the same properties.

C program for DFT

#include <stdio.h>
#include <math.h>
short x[8];
void dft(short *x, short k, int *out); //function prototype
#define N 8 //number of data values
float pi = 3.1416;
int sumRe,sumIm;
short x[N] = {1,2,3,4,5,6,7,8}; //1-cycle cosine
//short x[N]={0,602,974,974,602,0,-602,-974,-974,-602,
// 0,602,974,974,602,0,-602,-974,-974,-602};//2-cycles sine
int out[2] = {0,0};
int real[8],imag[8],k=0; //init Re and Im results
void dft(short *x, short k, int *out) //DFT function
{
int sumRe = 0, sumIm = 0; //init real/imag components
float cs = 0, sn = 0; //init cosine/sine components
int i = 0;
for (i = 0; i < N; i++) //for N-point DFT
{
cs = cos(2*pi*(k)*i/N); //real component
sn = sin(2*pi*(k)*i/N); //imaginary component
sumRe = sumRe + x[i]*cs; //sum of real components
sumIm = sumIm - x[i]*sn; //sum of imaginary components
}
out[0] = sumRe; //sum of real components
out[1] = sumIm;
real[k]= sumRe;
imag[k]= sumIm;
k++;
if(k>N)k=0;
Cranes Software Int. Ltd. TI-DIVISION

24

//printf("\n%d",sumRe);
//printf("\n%d",sumIm);
printf("\n%d",out[0]);
// printf("\n%d",out[1]); //sum of imaginary components
}
void main()
{
int j;
for (j = 0; j < N; j++)
{
dft(x,j,out); //call DFT function
}
}

PROCEDURE:

Open Code Composer Studio, make sure the DSP kit is turned on.
Use the Debug Connect menu option to open a debug connection to the DSK board
Start a new project using Project-new pull down menu, save it in a
separate directory(C:\CCStudio_v3.1\myprojects) with name dft.pjt.
Add the source files dft.c
to the project using Projectadd files to project pull down menu.
Add the linker command file hello.cmd .
(Path: C:\CCStudio_v3.1\tutorial\dsk6713\hello1\hello.cmd)
Add the run time support library file rts6700.lib
(Path: C:\CCStudio_v3.1\c6000\cgtools\lib\rts6700.lib)
Compile the program using the Project-compile pull down menu or by
clicking the shortcut icon on the left side of program window.
Build the program using the Project-Build pull down menu or by
clicking the shortcut icon on the left side of program window.
Load the program(dft.out) in program memory of DSP chip using the
File-load program pull down menu.
Cranes Software Int. Ltd. TI-DIVISION

25

Procedure for Real time Programs :

1. Connect a Signal Generator/audio input to the LINE IN Socket or connect a microphone to the
MIC IN Socket.

Note:- To use microphone input change the analog audio path control register value
(Register no. 4) in Codec Configuration settings of the Source file (Codec.c) from 0x0011
to 0x0015.


2. Connect CRO/Desktop Speakers to the Socket Provided for LINE OUT or connect a
headphone to the Headphone out Socket.

3. Now Switch on the DSK and Bring Up Code Composer Studio on the PC.

4. Use the Debug Connect menu option to open a debug connection to the DSK board

5. Create a new project with name codec.pjt.

6. Open the File Menu new DSP/BIOS Configuration select
Cranes Software Int. Ltd. TI-DIVISION

26

dsk6713.cdb and save it as xyz.cdb






7. Add xyz.cdb to the current project.
Project Add files to project xyz.cdb

8. Automatically three files are added in the Generated file folder in project pane
xyzcfg.cmd Command and linking file
xyzcfg.s62 optimized assembly code for configuration
xyzcfg_c.c Chip support initialization

9. Open the File Menu new Source file
10. Type the code in editor window. Save the file in project folder. (Eg: Codec.c).

Important note: Save your source code with preferred language extension. For ASM
codes save the file as code(.asm) For C and C++ codes code (*.c,*.cpp) respectively.


11. Add the saved Codec.c file to the current project which has the main function and calls all
the other necessary routines.
Project Add files to Project Codec.c

12. Add the library file dsk6713bsl.lib to the current project
Path C:\CCStudio_v3.1\C6000\dsk6713\lib\dsk6713bsl.lib
Files of type Object and library files (*.o*, *.l*)
Cranes Software Int. Ltd. TI-DIVISION

27



13. Copy header files dsk6713.h and dsk6713_aic23.h from and paste it in current project
folder.
C:\CCStudio_v3.1\C6000\dsk6713\include.

14. Add the header file generated within xyzcfg_c.c to codec.c

Note:- Double click on xyzcfg_c.c. Copy the first line header (eg.#include xyzcfg.h) and
paste that in source file (eg.codec.c).

15. Compile the program using the Project-compile pull down menu or by
Clicking the shortcut icon on the left side of program window.

16. Build the program using the Project-Build pull down menu or by clicking the shortcut icon
on the left side of program window.

17. Load the program (Codec. Out) in program memory of DSP chip using the
File-load program pull down menu.

18. Debug Run

19. You can notice the input signal of 500 Hz. appearing on the CRO verifying the codec
configuration.
20. You can also pass an audio input and hear the output signal through the speakers.
21. You can also vary the sampling frequency using the DSK6713_AIC23_setFreq Function in
the codec.c file and repeat the above steps.

5.0 Conclusion:
The codec TLV320AIC23 successfully configured using the board support library
and verified.



Cranes Software Int. Ltd. TI-DIVISION

28

Finite Impulse Response Filter(FIR)

DESIGNING AN FIR FILTER :
Following are the steps to design linear phase FIR filters Using Windowing Method.

I. Clearly specify the filter specifications.
Eg: Order = 30;
Sampling Rate = 8000 samples/sec
Cut off Freq. = 400 Hz.

II. Compute the cut-off frequency W
c

Eg: Wc

= 2*pie* f
c
/ F
s

= 2*pie* 400/8000
= 0.1*pie

III. Compute the desired Impulse Response h
d
(n) using particular Window
Eg: b_rect1=fir1 (order, W
c
, 'high',boxcar(31));

IV. Convolve input sequence with truncated Impulse Response x (n)*h (n)

USING MATLAB TO DETERMINE FILTER COEFFICIENTS:
Using FIR1 Function on Matlab

B = FIR1(N,Wn) designs an N'th order lowpass FIR digital filter
and returns the filter coefficients in length N+1 vector B.

The cut-off frequency Wn must be between 0 < Wn < 1.0, with 1.0
corresponding to half the sample rate. The filter B is real and
has linear phase, i.e., even symmetric coefficients obeying B(k) =
B(N+2-k), k = 1,2,...,N+1.

If Wn is a two-element vector, Wn = [W1 W2], FIR1 returns an
order N bandpass filter with passband W1 < W < W2.
B = FIR1(N,Wn,'high') designs a highpass filter.
B = FIR1(N,Wn,'stop') is a bandstop filter if Wn = [W1 W2].

If Wn is a multi-element vector,
Wn = [W1 W2 W3 W4 W5 ... WN],
FIR1 returns an order N multiband filter with bands
0 < W < W1, W1 < W < W2, ..., WN < W < 1.
B = FIR1(N,Wn,'DC-1') makes the first band a passband.
B = FIR1(N,Wn,'DC-0') makes the first band a stopband.

For filters with a passband near Fs/2, e.g., highpass and bandstop filters, N must be even.

By default FIR1 uses a Hamming window. Other available windows, including Boxcar,
Hanning, Bartlett, Blackman, Kaiser and Chebwin can be specified with an optional trailing
argument. For example,
Cranes Software Int. Ltd. TI-DIVISION

29

B = FIR1(N,Wn,kaiser(N+1,4)) uses a Kaiser window with beta=4.
B = FIR1(N,Wn,'high',chebwin(N+1,R)) uses a Chebyshev window.

By default, the filter is scaled so the center of the first pass band has magnitude exactly one after
windowing. Use a trailing 'noscale' argument to prevent this scaling,
e.g. B = FIR1(N,Wn,'noscale'),
B = FIR1(N,Wn,'high','noscale'), B = FIR1(N,Wn,wind,'noscale').

Matlab Program to generate FIR Filter-Low Pass Coefficients using FIR1

% FIR Low pass filters using rectangular, triangular and kaiser windows
% sampling rate 8000

order = 50;
cf=[500/4000,1000/4000,1500/4000]; cf--> contains set of cut-off frequencies[W
c
]

% cutoff frequency 500
b_rect1=fir1(order,cf(1),boxcar(51)); %Rectangular
b_tri1=fir1(order,cf(1),bartlett(51)); %Triangular
b_kai1=fir1(order,cf(1),kaiser(51,8)); %Kaisar [Where 8-->Beta Co-efficient]

% cutoff frequency - 1000
b_rect2=fir1(order,cf(2),boxcar(51));
b_tri2=fir1(order,cf(2),bartlett(51));
b_kai2=fir1(order,cf(2),kaiser(31,8));

% cutoff frequency - 1500
b_rect3=fir1(order,cf(3),boxcar(51));
b_tri3=fir1(order,cf(3),bartlett(51));
b_kai3=fir1(order,cf(3),kaiser(51,8));

fid=fopen('FIR_lowpass_rectangular.txt','wt');
fprintf(fid,'\t\t\t\t\t\t%s\n','Cutoff -400Hz');
fprintf(fid,'\nfloat b_rect1[31]={');
fprintf(fid,'%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,\n',b_rect1);
fseek(fid,-1,0);
fprintf(fid,'};');
fprintf(fid,'\n\n\n\n');
fprintf(fid,'\t\t\t\t\t\t%s\n','Cutoff -800Hz');


fprintf(fid,'\nfloat b_rect2[31]={');
fprintf(fid,'%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,\n',b_rect2);
fseek(fid,-1,0);
fprintf(fid,'};');
fprintf(fid,'\n\n\n\n');
fprintf(fid,'\t\t\t\t\t\t%s\n','Cutoff -1200Hz');
fprintf(fid,'\nfloat b_rect3[31]={');
fprintf(fid,'%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,\n',b_rect3);
fseek(fid,-1,0);
fprintf(fid,'};');

Cranes Software Int. Ltd. TI-DIVISION

30

fclose(fid);
winopen('FIR_highpass_rectangular.txt');

T.1 : Matlab generated Coefficients for FIR Low Pass Kaiser filter:








IMPLEMENTATION OF AN FIR FILTER :

ALGORITHM TO IMPLEMENT :

We need to realize an advance FIR filter by implementing its difference equation as per the
specifications. A direct form I implementation approach is taken. (The filter coefficients are taken
as a
i
as generated by the Matlab program.)






T.2 :Matlab generated Coefficients for FIR Low Pass Rectangular filter


















T.3 : Matlab generated Coefficients for FIR Low Pass Triangular filter



Cutoff -500Hz
float b_kai1[51]={-0,0,0.0001,0.0002,0.0005,0.0008,0.0012,0.0013,0.001,-0,-0.0018,-0.0045,
-0.0076,-0.0106,-0.0125,-0.0121,-
0.0082,0,0.0129,0.0302,0.0506,0.0723,0.0929,0.1099,0.1211,0.125,0.1211,0.1099,0.0929,0.0723,
0.0506,0.0302,0.0129,0,-0.0082,-0.0121,-0.0125,-0.0106,-0.0076,-0.0045,-0.0018,-
0,0.001,0.0013,0.0012,0.0008,0.0005,0.0002,0.0001,0,-0};

Cutoff -1000Hz
float b_kai2[51]={- 0,-0,-0.0001,-0.0003,-0.0004,0,0.0009,0.0019,0.0018,-0,-0.0034,-0.0064,-
0.0059,0,0.0096,0.0171,0.0152,-0,-0.0238,-0.0426,-
0.0387,0,0.0711,0.1554,0.2237,0.25,0.2237,0.1554,0.0711,0,-0.0387,-0.0426,-0.0238,-
0,0.0152,0.0171,0.0096,0,-0.0059,-0.0064,-0.0034,-0,0.0018,0.0019,0.0009,0,-0.0004,-0.0003,-
0.0001,-0,0};

Cutoff -1500Hz
float b_kai3[51]={ 0,0.0001,0.0002,0.0001,-0.0003,-0.0008,-0.001,0,0.002,0.0035,0.0024,-
0.0022,-0.0078,-0.0092,-0.0023,0.011,0.0214,0.0173,-0.0059,-0.0369,-0.0514,-
0.0247,0.0503,0.153,0.2424,0.2778,0.2424,0.153,0.0503,-0.0247,-0.0514,-0.0369,-
0.0059,0.0173,0.0214,0.011,-0.0023,-0.0092,-0.0078,-0.0022,0.0024,0.0035,0.002,0,-0.001,-
0.0008,-0.0003,0.0001,0.0002,0.0001,0};
Cutoff -500Hz
float b_rect1[51]={-0.0046,0,0.005,0.0097,0.0133,0.0151,0.0147,0.0118,0.0068,-0,-0.0077,-
0.0152,-0.0214,-0.0251,-0.0253,-0.0213,-
0.0128,0,0.0165,0.0355,0.0557,0.0754,0.0929,0.1066,0.1154,0.1184,0.1154,0.1066,0.0929,0.0754
,0.0557,0.0355,0.0165,0,-0.0128,-0.0213,-0.0253,-0.0251,-0.0214,-0.0152,-0.0077,-
0,0.0068,0.0118,0.0147,0.0151,0.0133,0.0097,0.005,0,-0.0046};

Cutoff -1000Hz
float b_rect2[51]={-0.0091,-0,-0.0099,-0.0147,-0.0109,0,0.012,0.0179,0.0134,-0,-0.0152,-
0.0231,-0.0176,0,0.0207,0.0323,0.0254,-0,-0.0326,-0.0538,-
0.0456,0,0.0761,0.1614,0.2282,0.2535,0.2282,0.1614,0.0761,0,-0.0456,-0.0538,-0.0326,-
0,0.0254,0.0323,0.0207,0,-0.0176,-0.0231,-0.0152,-0,0.0134,0.0179,0.012,0,-0.0109,-0.0147,-
0.0099,-0,0.0091};

Cutoff -1500Hz
float b_rect2[51]={- 0.0021,0.0112,0.0126,0.0048,-0.0074,-0.0152,-
0.0125,0,0.0139,0.019,0.0103,-0.0076,-0.0224,-0.0223,-0.0049,0.0199,0.0344,0.0249,-0.0077,-
0.0447,-0.0582,-0.0265,0.0516,0.1524,0.237,0.27,0.237,0.1524,0.0516,-0.0265,-0.0582,-0.0447,-
0.0077,0.0249,0.0344,0.0199,-0.0049,-0.0223,-0.0224,-0.0076,0.0103,0.019,0.0139,0,-0.0125,-
0.0152,-0.0074,0.0048,0.0126,0.0112,0.0021};
Cranes Software Int. Ltd. TI-DIVISION

31




















Cutoff -500Hz
float b_tri1[51]={ [0,0,0.0005,0.0013,0.0024,0.0034,0.004,0.0037,0.0024,-0,-0.0035,-0.0075,-
0.0116,-0.0147,-0.016,-0.0144,-
0.0092,0,0.0134,0.0304,0.0502,0.0713,0.092,0.1105,0.1248,0.1334,0.1248,0.1105,0.092,0.071
3,0.0502,0.0304,0.0134,0,-0.0092,-0.0144,-0.016,-0.0147,-0.0116,-0.0075,-0.0035,-
0,0.0024,0.0037,0.004,0.0034,0.0024,0.0013,0.0005,0,0;]};

Cutoff -1000Hz
float b_tri2[51]={ 0,-0,-0.0008,-0.0018,-0.0018,0,0.0029,0.0051,0.0044,-0,-0.0062,-0.0103,-
0.0086,0,0.0118,0.0197,0.0165,-0,-0.0239,-0.0416,-
0.0372,0,0.0682,0.1512,0.2232,0.2582,0.2232,0.1512,0.0682,0,-0.0372,-0.0416,-0.0239,-
0,0.0165,0.0197,0.0118,0,-0.0086,-0.0103,-0.0062,-0,0.0044,0.0051,0.0029,0,-0.0018,-0.0018,-
0.0008,-0,0};

Cutoff -1500Hz
float b_tri3[51]={ 0,0.0005,0.0011,0.0006,-0.0012,-0.0032,-0.0032,0,0.0047,0.0073,0.0044,-
0.0035,-0.0114,-0.0123,-0.0029,0.0126,0.0233,0.0179,-0.0058,-0.0359,-0.0492,-
0.0235,0.048,0.1483,0.2407,0.2857,0.2407,0.1483,0.048,-0.0235,-0.0492,-0.0359,-
0.0058,0.0179,0.0233,0.0126,-0.0029,-0.0123,-0.0114,-0.0035,0.0044,0.0073,0.0047,0,-
0.0032,-0.0032,-0.0012,0.0006,0.0011,0.0005,0};
Cranes Software Int. Ltd. TI-DIVISION

32

FLOWCHART FOR FIR:



























No




Yes














Initialize Counter = 0
Initialize Output = 0 , i = 0
Output += coeff[N-i]*val[i]
Shift the input value by one
Initialize the DSP Board.

Take a new input in data
from the analog in of codec in
data
Is the loop
Cnt = order
Output += coeff[0]*data
Put the data in val array.
Write the value Output to
Analog output of the codec
Poll the ready bit, when
asserted proceed.
Start
Cranes Software Int. Ltd. TI-DIVISION

33

C PROGRAM TO IMPLEMENT FIR FILTER:

fir.c

#include "xyzcfg.h"

#include "dsk6713.h"
#include "dsk6713_aic23.h"

float filter_Coeff[] ={0.000000,-0.001591,-0.002423,0.000000,0.005728,
0.011139,0.010502,-0.000000,-0.018003,-0.033416,-0.031505,0.000000,
0.063010,0.144802,0.220534,0.262448,0.220534,0.144802,0.063010,0.000000,
-0.031505,-0.033416,-0.018003,-0.000000,0.010502,0.011139,0.005728,
0.000000,-0.002423,-0.001591,0.000000 };

static short in_buffer[100];

DSK6713_AIC23_Config config = {\
0x0017, /* 0 DSK6713_AIC23_LEFTINVOL Leftline input channel volume */\
0x0017, /* 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume*/\
0x00d8, /* 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone volume */\
0x00d8, /* 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume */\
0x0011, /* 4 DSK6713_AIC23_ANAPATH Analog audio path control */\
0x0000, /* 5 DSK6713_AIC23_DIGPATH Digital audio path control */\
0x0000, /* 6 DSK6713_AIC23_POWERDOWN Power down control */\
0x0043, /* 7 DSK6713_AIC23_DIGIF Digital audio interface format */\
0x0081, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control */\
0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */ \
};

/*
* main() - Main code routine, initializes BSL and generates tone
*/

void main()
{
DSK6713_AIC23_CodecHandle hCodec;

Uint32 l_input, r_input,l_output, r_output;

/* Initialize the board support library, must be called first */
DSK6713_init();

/* Start the codec */
hCodec = DSK6713_AIC23_openCodec(0, &config);

DSK6713_AIC23_setFreq(hCodec, 1);

Cranes Software Int. Ltd. TI-DIVISION

34

while(1)
{ /* Read a sample to the left channel */
while (!DSK6713_AIC23_read(hCodec, &l_input));

/* Read a sample to the right channel */
while (!DSK6713_AIC23_read(hCodec, &r_input));

l_output=(Int16)FIR_FILTER(&filter_Coeff ,l_input);
r_output=l_output;

/* Send a sample to the left channel */
while (!DSK6713_AIC23_write(hCodec, l_output));

/* Send a sample to the right channel */
while (!DSK6713_AIC23_write(hCodec, r_output));
}

/* Close the codec */
DSK6713_AIC23_closeCodec(hCodec);
}

signed int FIR_FILTER(float * h, signed int x)
{
int i=0;
signed long output=0;

in_buffer[0] = x; /* new input at buffer[0] */

for(i=51;i>0;i--)
in_buffer[i] = in_buffer[i-1]; /* shuffle the buffer */

for(i=0;i<51;i++)
output = output + h[i] * in_buffer[i];

return(output);

}

HOW TO PROCEED :


1. Connect a Signal Generator/audio input to the LINE IN Socket or connect a microphone to
the MIC IN Socket.

Note:- To use microphone input change the analog audio path control register value
(Register no. 4) in Codec Configuration settings of the Source file (Fir.c) from 0x0011 to
0x0015.
Cranes Software Int. Ltd. TI-DIVISION

35



2. Connect CRO/Desktop Speakers to the Socket Provided for LINE OUT or connect a
headphone to the Headphone out Socket.

3. Now Switch on the DSK and Bring Up Code Composer Studio on the PC.

4. Use the Debug Connect menu option to open a debug connection to the DSK board

5. Create a new project with name Fir.pjt.

6. Open the File Menu new DSP/BIOS Configuration select
dsk6713.cdb and save it as xyz.cdb




Cranes Software Int. Ltd. TI-DIVISION

36



7. Add xyz.cdb to the current project.
Project Add files to project xyz.cdb

8. Automatically three files are added in the Generated file folder in project pane
xyzcfg.cmd Command and linking file
xyzcfg.s62 optimized assembly code for configuration
xyzcfg_c.c Chip support initialization

9. Open the File Menu new Source file
10. Type the code in editor window. Save the file in project folder. (Eg: Codec.c).

Important note: Save your source code with preferred language extension. For ASM
codes save the file as code(.asm) For C and C++ codes code (*.c,*.cpp) respectively.


11. Add the saved Fir.c file to the current project which has the main function and calls all
the other necessary routines.
Project Add files to Project Codec.c

12. Add the library file dsk6713bsl.lib to the current project

Path C:\CCStudio_v3.1\C6000\dsk6713\lib\dsk6713bsl.lib

13. Copy header files dsk6713.h and dsk6713_aic23.h from and paste it in current project
folder.
C:\CCStudio_v3.1\C6000\dsk6713\include.

Cranes Software Int. Ltd. TI-DIVISION

37

14. Add the header file generated within xyzcfg_c.c to Fir.c

Note:- Double click on xyzcfg_c.c Copy the first line header (eg.xyzcfg.h) and paste that in
source file (eg.Fir.c).

15. Compile the program using the Project-compile pull down menu or by
Clicking the shortcut icon on the left side of program window.

16. Build the program using the Project-Build pull down menu or by clicking the shortcut
icon on the left side of program window.

17. Load the program (Codec.out) in program memory of DSP chip using the
File-load program pull down menu.

18. Debug Run





MATLAB GENERATED FREQUENCY RESPONSE

High Pass FIR filter(Fc= 800Hz).




Low Pass FIR filter (Fc=1000Hz)
Cranes Software Int. Ltd. TI-DIVISION

38


Cranes Software Int. Ltd. TI-DIVISION

39

Audio Application











Cranes Software Int. Ltd. TI-DIVISION

40

Spectrogram with RTDX using MATLAB

This version of project makes use of RTDX with MATLAB for transferring data from the
DSK to the PC host. This section introduces configuration file(.CDB) file and RTDX with
MATLAB.

This project uses source program spectrogram_rtdx_mtl.c that runs on the DSK which
computes 256 point FFT and enables an RTDX output channel to write/send the resulting
FFT data to the PC running MATLAB for finding the spectrogram. A total of N/2 (128
points )are sent. The (.CDB) configuration file is used to set interrupt INT11. From this
configuration file select Input/Output RTDX. Right click on properties and change the
RTDX buffer size to 8200. Within CCS, select tools RTDX Configure to set the host
buffer size to 2048(from 1024).

An input signal is read in blocks of 256 samples. Each block of data is then multiplied with a
hamming window of length 256 points. The FFT of the windowed data is calculated and
squared. Half of the resulting FFT of each block of 256 points is then transferred to the PC
running MATLAB to find the specrtrogram.



























Cranes Software Int. Ltd. TI-DIVISION

41

Spectrogram_rtdx_mtl.c Time-Frequency analysis of signals Using RTDX-MATLAB

#include "dsk6713_aic23.h" //codec-DSK support file
Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //set sampling rate
#include <rtdx.h> //RTDX support
file
#include <math.h>
#include "hamming.cof" //Hamming window coefficients
#define PTS 256 //# of points for FFT
#define PI 3.14159265358979
typedef struct {float real,imag;} COMPLEX;
void FFT(COMPLEX *Y, int n); //FFT prototype
float iobuffer[PTS],iobuffer1[PTS],a[PTS]; //input and
output buffer
float x1[PTS]; //intermediate buffer
short i; //general purpose index
variable
int j, k,l, curr_block = 0; //index variables
short buffercount = 0; //number of new samples in iobuffer
short flag = 0; //set to 1 by ISR when iobuffer full
COMPLEX w[PTS]; //twiddle constants stored in w
COMPLEX samples[PTS]; //primary working buffer
RTDX_CreateOutputChannel(ochan); //create output channel C6x-
>PC

main()
{
for (i = 0 ; i<PTS ; i++) //set up twiddle constants in w
{
w[i].real = cos(2*PI*i/512.0); //Re component of twiddle constants
w[i].imag =-sin(2*PI*i/512.0); //Im component of twiddle constants
}
comm_intr(); //init DSK, codec, McBSP

while(!RTDX_isOutputEnabled(&ochan)) //wait for PC to enable RTDX
puts("\n\n Waiting . . . "); //while waiting
for(l=0;l<256;l++)
a[l]=cos(2*3.14*1500*l/8000);
for(k=0;k<5000;k++) //infinite loop
{
while (flag == 0) ; //wait until iobuffer is full
flag = 0; //reset flag
for (i = 0 ; i < PTS ; i++) //swap buffers
{ iobuffer1[i]=iobuffer[i]+a[i];
samples[i].real=h[i]*iobuffer1[i]; //multiply by Hamming window coeffs
iobuffer1[i] = x1[i]; //process frame to iobuffer
}
for (i = 0 ; i < PTS ; i++)
Cranes Software Int. Ltd. TI-DIVISION

42

samples[i].imag = 0.0; //imag components = 0
FFT(samples,PTS); //call C-coded FFT function
for (i = 0 ; i < PTS ; i++) //compute square of FFT magnitude
{
x1[i] = (samples[i].real*samples[i].real
+ samples[i].imag*samples[i].imag)/16; //FFT data scaling
}
RTDX_write(&ochan, x1, sizeof(x1)/2); //send 128 samples to PC
} //end of infinite loop
} //end of main

interrupt void c_int11() //ISR
{
output_sample((short)(iobuffer[buffercount])); //out from iobuffer
iobuffer[buffercount++]=(short)(input_sample()); //input to iobuffer
if (buffercount >= PTS) //if iobuffer full
{
buffercount = 0;
//reinit buffercount
flag = 1;
//reset flag
}
}


FFT.c C callable FFT function in C

#define PTS 256 //# of points for FFT
typedef struct {float real,imag;} COMPLEX;
extern COMPLEX w[PTS]; //twiddle constants stored in w

void FFT(COMPLEX *Y, int N) //input sample array, # of points
{
COMPLEX temp1,temp2; //temporary storage variables
int i,j,k; //loop counter variables
int upper_leg, lower_leg; //index of upper/lower butterfly leg
int leg_diff; //difference between upper/lower leg
int num_stages = 0; //number of FFT stages (iterations)
int index, step; //index/step through twiddle constant
i = 1; //log(base2) of N points= # of stages
do
{
num_stages +=1;
i = i*2;
}while (i!=N);
leg_diff = N/2; //difference between upper&lower legs
step = 512/N; //step between values in twiddle.h
for (i = 0;i < num_stages; i++) //for N-point FFT
Cranes Software Int. Ltd. TI-DIVISION

43

{
index = 0;
for (j = 0; j < leg_diff; j++)
{
for (upper_leg = j; upper_leg < N; upper_leg += (2*leg_diff))
{
lower_leg = upper_leg+leg_diff;
temp1.real = (Y[upper_leg]).real + (Y[lower_leg]).real;
temp1.imag = (Y[upper_leg]).imag + (Y[lower_leg]).imag;
temp2.real = (Y[upper_leg]).real - (Y[lower_leg]).real;
temp2.imag = (Y[upper_leg]).imag - (Y[lower_leg]).imag;
(Y[lower_leg]).real = temp2.real*(w[index]).real
-temp2.imag*(w[index]).imag;
(Y[lower_leg]).imag = temp2.real*(w[index]).imag
+temp2.imag*(w[index]).real;
(Y[upper_leg]).real = temp1.real;
(Y[upper_leg]).imag = temp1.imag;
}
index += step;
}
leg_diff = leg_diff/2;
step *= 2;
}
j = 0;
for (i = 1; i < (N-1); i++) //bit reversal for resequencing data
{
k = N/2;
while (k <= j)
{
j = j - k;
k = k/2;
}
j = j + k;
if (i<j)
{
temp1.real = (Y[j]).real;
temp1.imag = (Y[j]).imag;
(Y[j]).real = (Y[i]).real;
(Y[j]).imag = (Y[i]).imag;
(Y[i]).real = temp1.real;
(Y[i]).imag = temp1.imag;
}
}
return;
}



Cranes Software Int. Ltd. TI-DIVISION

44



Spectrogram_RTDX.m For spectrogram plot using RTDX with MATLAB

clc;

ccsboardinfo %board info

cc=ccsdsp('boardnum',0); %set up CCS object

reset(cc); %reset board

visible(cc,1); %for CCS window

enable(cc.rtdx); %enable RTDX

if ~isenabled(cc.rtdx);

error('RTDX is not enabled')

end

cc.rtdx.set('timeout',50); %set 50sec timeout for RTDX

open(cc,'spectrogram1.pjt'); %open CCS project

load(cc,'./debug/spectrogram1.out'); %load executable file

run(cc); %run program

configure(cc.rtdx,2048,1); %configure one RTDX channel

open(cc.rtdx,'ochan','r'); %open output channel

pause(3) %wait for RTDX channel to open



enable(cc.rtdx,'ochan'); %enable channel from DSK

isenabled(cc.rtdx,'ochan');



M = 256; %window size

N = round(M/2);

Cranes Software Int. Ltd. TI-DIVISION

45

B = 128; %No. of blocks (128)

fs = 8000; %sampling rate

t=(1:B)*(M/fs); %spectrogram axes generation

f=((0:(M-1)/2)/(M-1))*fs;



set(gcf,'DoubleBuffer','on');

y = ones(N,B);

column = 1;



set(gca,'NextPlot','add');

axes_handle = get(gcf,'CurrentAxes');

set(get(axes_handle,'XLabel'),'String','Time (s)');

set(get(axes_handle,'YLabel'),'String','Frequency (Hz)');

set(get(axes_handle,'Title'),'String','\fontname{times}\bf Real-Time Spectrogram');



set(gca,'XLim', [0 4.096]);

set(gca,'YLim', [0 4000]);

set(gca,'XLimMode','manual');

set(gca,'YLimMode','manual');



for i = 1:32768

w=readmsg(cc.rtdx,'ochan','single'); %read FFT data from DSK

w=double(w(1:N));

y(:, column) = w';

Cranes Software Int. Ltd. TI-DIVISION

46

imagesc(t,f,dB(y)); %plot spectrogram

column = mod(column, B) + 1;

end


halt(cc); %halt processor

close(cc.rtdx,'ochan'); %close channel

clear cc %clear object


NOTE: For this example works with CCS 2.2 and Matlab 6.5.


Procedure:

22. Create a new project with name spectrogram.pjt.

23. Open spectrogram.cdb from given CD and save it in your new
project folder.

24. Copy the following files from the CD to your new project folder
1) c6713dskinit . c
2) FFT.c
3) spectrogram_rtdx_mtl.c
4) c6713dskinit . h
5) hamming.cof
6) spectrogram_RTDX.m

25. Add spectrogram.cdb, c6713dskinit.c and spectrogram_rtdx_mtl.c to the
current project.

26. Add the library file dsk6713bsl.lib to the current project

Path C:\CCStudio\C6000\dsk6713\lib\dsk6713bsl.lib

5. Set the following compiler options.
Select Project Build options.
Select the following for compiler option with Basic ( for category):
(1) c671x{mv6710} (for target version)
(2) Full symbolic debug (for Generate Debug info)
(3) Speed most critical(for Opt Speed vs. Size)
(4) None (for Opt Level and Program Level Opt)

Select The Preprocessor Category and Type for Define Symbols{d}:
Cranes Software Int. Ltd. TI-DIVISION

47

CHIP_6713, and from Feedback category, select for Interlisting:
OPT / C and ASM{-s}

6 Build project.

7. Close CCS

8. Open MATLAB 6.5 and Run spectrogram_RTDX.m . within MATLAB ,CCS will
enable RTDX and will load and run the COFF(.out) executable file. Then
MATLAB will plot the spectrogram of an input signal .





Cranes Software Int. Ltd. TI-DIVISION

48

Noise removal using Adaptive Filters











Cranes Software Int. Ltd. TI-DIVISION

49










Cranes Software Int. Ltd. TI-DIVISION

50















Cranes Software Int. Ltd. TI-DIVISION

51























Cranes Software Int. Ltd. TI-DIVISION

52

C PROGRAM TO IMPLEMENT NOISE CANCELLATION :

#include "xyzcfg.h"

#include "dsk6713.h"
#include "dsk6713_aic23.h"
#define beta 1E-12 //rate of convergence
#define N 30
short int adaptive_filter(short int ,short int );
float delay[N];
float w[N];


//union{unsigned int uint; short channel[2];} AIC23_data;

DSK6713_AIC23_Config config = {\
0x0017, /* 0 DSK6713_AIC23_LEFTINVOL Left line input channel volume */ \
0x0017, /* 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume */\
0x00d8, /* 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone volume */ \
0x00d8, /* 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume */ \
0x0011, /* 4 DSK6713_AIC23_ANAPATH Analog audio path control */ \
0x0000, /* 5 DSK6713_AIC23_DIGPATH Digital audio path control */ \
0x0000, /* 6 DSK6713_AIC23_POWERDOWN Power down control */ \
0x0043, /* 7 DSK6713_AIC23_DIGIF Digital audio interface format */ \
0x0081, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control */ \
0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */ \
};


/*
* main() - Main code routine, initializes BSL and generates tone
*/

void main()
{
DSK6713_AIC23_CodecHandle hCodec;

int l_input, r_input;
int l_output, r_output, T;

/* Initialize the board support library, must be called first */
DSK6713_init();

/* Start the codec */
hCodec = DSK6713_AIC23_openCodec(0, &config);

DSK6713_AIC23_setFreq(hCodec, 1);

Cranes Software Int. Ltd. TI-DIVISION

53

for (T = 0; T < 30; T++)
{
w[T] = 0; //init buffer for weights
delay[T] = 0; //init buffer for delay samples
}


while(1)
{

/* Read a sample to the left channel */
while (!DSK6713_AIC23_read(hCodec,&l_input));

/* Read a sample to the right channel */
while (!DSK6713_AIC23_read(hCodec, &r_input));

l_output=(short int)adaptive_filter(l_input,r_input);
r_output=l_output;

/* Send a sample to the left channel */
while (!DSK6713_AIC23_write(hCodec, l_output));

/* Send a sample to the right channel */
while (!DSK6713_AIC23_write(hCodec, r_output));
}


/* Close the codec */
DSK6713_AIC23_closeCodec(hCodec);
}


short int adaptive_filter(short l_input1,short r_input1) //ISR
{
short i,output,T;
float yn=0, E=0, dplusn=0, desired=0, noise=0;

desired = l_input1;
noise = r_input1;
dplusn = desired + noise; //desired+noise
delay[0] = noise; //noise as input to adapt FIR

for (i = 0; i < N; i++) //to calculate out of adapt FIR
yn += (w[i] * delay[i]); //output of adaptive filter
E = (desired + noise) - yn; //"error" signal=(d+n)-yn
for (i = N-1; i >= 0; i--) //to update weights and delays
{
w[i] = w[i] + beta*E*delay[i]; //update weights
Cranes Software Int. Ltd. TI-DIVISION

54

delay[i] = delay[i-1]; //update delay samples
}


output=((short)E); //error signal as overall output

//output=((short)dplusn);//output (desired+noise)
//overall output result
return(output);
}


PROCEDURE :

Switch on the DSP board.

Open the Code Composer Studio.

Create a new project
Project New (File Name. pjt , Eg: noisecancellation.pjt)

Initialize on board codec.

Note: Kindly refer the Topic Configuration of 6713 Codec using BSL

Add the above C source file to the current project (remove codec.c source file from the
project if you have already added).

Desired Signal 400 Hz
Noise 3.0 KHz
Input a desired sinusoidal signal into the Left channel and Noise signal of 3KHz into the
Right channel

Build the project.

Load the generated object file(*.out) on to Target board.

Run the program.

Observe the waveform that appears on the CRO screen. Verify that the 3 KHz noise signal
is being cancelled gradually.







Cranes Software Int. Ltd. TI-DIVISION

55

IMPULSE RESPONSE


C Program to Implement Impulse response:

#include <stdio.h>

#define Order 2
#define Len 10

float y[Len]={0,0,0},sum;

main()
{
int j,k;

float a[Order+1]={0.1311, 0.2622, 0.1311};
float b[Order+1]={1, -0.7478, 0.2722};

for(j=0;j<Len;j++)
{
sum=0;
for(k=1;k<=Order;k++)
{
if((j-k)>=0)
sum=sum+(b[k]*y[j-k]);
}
if(j<=Order)
{
y[j]=a[j]-sum;
}
else
{
y[j]=-sum;
}
printf("Respose[%d] = %f\n",j,y[j]);

}
}














Cranes Software Int. Ltd. TI-DIVISION

56

PROCEDURE:

Open Code Composer Studio, make sure the DSP kit is turned on.
Use the Debug Connect menu option to open a debug connection to the DSK board
Start a new project using Project-new pull down menu, save it in a
separate directory(C:\CCStudio_v3.1\myprojects) with name Impulse_response.pjt.
Add the source files impulse_res.c
to the project using Projectadd files to project pull down menu.
Add the linker command file hello.cmd .
(Path: C:\CCStudio_v3.1\tutorial\dsk6713\hello1\hello.cmd)
Add the run time support library file rts6700.lib
(Path: C:\CCStudio_v3.1\c6000\cgtools\lib\rts6700.lib)
Compile the program using the Project-compile pull down menu or by
clicking the shortcut icon on the left side of program window.
Build the program using the Project-Build pull down menu or by
clicking the shortcut icon on the left side of program window.
Load the program(Impulse_response.out) in program memory of DSP chip using the
File-load program pull down menu.
Execute the program. Debug run


Result: The result is displayed on the Debug window.
Cranes Software Int. Ltd. TI-DIVISION

57
















MINI PROJECT
(DISCRETE COSINE TRANSFORM)























Cranes Software Int. Ltd. TI-DIVISION

58

The Discrete Cosine Transform
Introduction:-
The discrete cosine transform (DCT) helps separate the image into parts (or spectral sub-bands) of
differing importance (with respect to the image's visual quality). The DCT is similar to the discrete
Fourier transform: it transforms a signal or image from the spatial domain to the frequency
domain. With an input image, A, the coefficients for the output "image," B, are:


The input image is N2 pixels wide by N1 pixels high; A(i,j) is the intensity of the pixel in row i
and column j; B(k1,k2) is the DCT coefficient in row k1 and column k2 of the DCT matrix. All
DCT multiplications are real. This lowers the number of required multiplications, as compared to
the discrete Fourier transform. The DCT input is an 8 by 8 array of integers. This array contains
each pixel's gray scale level; 8 bit pixels have levels from 0 to 255. The output array of DCT
coefficients contains integers; these can range from -1024 to 1023. For most images, much of the
signal energy lies at low frequencies; these appear in the upper left corner of the DCT. The lower
right values represent higher frequencies, and are often small - small enough to be neglected with
little visible distortion.
IMPLEMENTATION OF DCT

DCT-based codecs use a two-dimensional version of the transform.

The 2-D DCT and its inverse (IDCT) of an N x N block are shown below:

2-D DCT:


2-D IDCT:


One of the properties of the 2-D DCT is that it is separable meaning that it can be separated
into a pair of 1-D DCTs. To obtain the 2-D DCT of a block a 1-D DCT is first performed
on the rows of the block then a 1-D DCT is performed on the columns of the resulting
block.
The same applies to the IDCT.
This process is illustrated below.

=
+ +
=
1
0
1
0
]
2
) 1 2 (
cos[ ]
2
) 1 2 (
cos[ ) , ( ) ( ) (
2
) , (
N
y
N
x
N
v y
N
u x
y x f v C u C
N
v u F

=
+ +
=
1
0
1
0
]
2
) 1 2 (
cos[ ]
2
) 1 2 (
cos[ ) , ( ) ( ) (
2
) , (
N
v
N
u
N
v y
N
u x
v u F v C u C
N
y x f

Cranes Software Int. Ltd. TI-DIVISION

59





Precalculate the DCT coefficients and scale them


Cranes Software Int. Ltd. TI-DIVISION

60

Note that the values in the decimal format does not include the factor [Sqrt(2/n)=>sqrt(2/8)=>1/2].
The reason for this is that dividing the coefficients by 2 before converting to Q12 may result in
some loss in precision. More precision can be obtained by ignoring this division and then
multiplying by 211 (instead of 212) to convert to Q12. The reason for using Q12 instead of Q15 (as
one would expect) is as follows. Referring to Equation [3], we notice that the DCT calculation
involves a summation of N terms. Looking at the DCT coefficients in Figure 1, we observe that the
terms entering in the summation may be close to 1. Thus, such summation may cause overflows.
To avoid this, each term must be scaled down by 1/N. For N=8, this can be achieved by working in
Q12 format instead of Q15 format.


HOW TO PROCEED:

1. Open Code Composer Studio, make sure the DSP kit is turned on.

2. Start a new project using Project-new pull down menu, save it in a
separate directory(c:\ti\myprojects) with name image.pjt.

3. From the File Menu new DSP/BIOS Configuration select dsk6713.cdb and
save it as image1.cdb and add it to the project.

4. Add the source files main.c ,dct.c and idct.c in the project using
Project add files to project pull down menu.

5. Add the linker command file MY_LNK_CMD.cmd to your project

6. Copy the header files scenary.h and dct.h and paste it in your project folder.

7. Compile the program using the Project-compile pull down menu or by
clicking the shortcut icon on the left side of program window.

8. Load the program in program memory of DSP chip using the File-load program pull
down menu.

9. Run the program and observe output using image utility.













Cranes Software Int. Ltd. TI-DIVISION

61

Main.c:
#include <stdio.h>
#include <stdlib.h>
#include "dct.h"
#include "scenary.h" /* Header file containing input image as a 1D array */

#pragma DATA_SECTION (image_in,"ext_sdram")
#pragma DATA_SECTION (image_out,"ext_sdram")

/* 1D array to hold output image */
unsigned char image_out[IMAGE_SIZE];

/* 1D array to hold the current block */
short block[BLOCK_SIZE];

/* Q12 DCT coefficients (actual coefficient x 2^12 ) */
const short coe[8][8]=
{
4096, 4096, 4096, 4096, 4096, 4096, 4096, 4096,
5681, 4816, 3218, 1130, -1130, -3218, -4816, -5681,
5352, 2217, -2217, -5352, -5352, -2217, 2217, 5352,
4816, -1130, -5681, -3218, 3218, 5681, 1130, -4816,
4096, -4096, -4096, 4096, 4096, -4096, -4096, 4096,
3218, -5681, 1130, 4816, -4816, -1130, 5681, -3218,
2217, -5352, 5352, -2217, -2217, 5352, -5352, 2217,
1130, -3218, 4816, -5681, 5681, -4816, 3218, -1130
};

extern void dct(void);
extern void idct(void);


void main()
{
int i,x;

/* Perform block by block processing */
for(i=0;i<IMAGE_SIZE;i+=BLOCK_SIZE)
{
/* Get the block from the input image */
for(x=0;x<BLOCK_SIZE;++x)
{
block[x] = (short) image_in[i+x];
}

/* Perform DCT on this block */
dct();

Cranes Software Int. Ltd. TI-DIVISION

62

/* Perform IDCT on this block */
idct();

/* Store block to output image */
for(x=0;x<BLOCK_SIZE;++x)
{
if(block[x]<0)
{
image_out[i+x]=(unsigned char) (-block[x]); /* Quick fix for errors
occuring due to negative a values occuring after IDCT! */
}
else
{
image_out[i+x]=(unsigned char) block[x];
}
}
}

//for (;;); /* Wait */
}



dct.c:

/*********************************************************************/
/* dct.c Function to perform a 8 point 2D DCT */
/* DCT is performed using direct matrix multiplication */
/*********************************************************************/

#include "dct.h"

extern unsigned char image_in[IMAGE_SIZE];
extern unsigned char image_out[IMAGE_SIZE];
extern short block[BLOCK_SIZE];
extern const short coe[8][8];


void dct(void)
{
int i,j,x,y;
int value[8];

/* Perform 1D DCT on the columns */
for(j=0;j<8;j++)
{
for(y=0;y<8;++y)
{
value[y]=0;
Cranes Software Int. Ltd. TI-DIVISION

63


for(x=0;x<8;++x)
{
value[y] += (int)(coe[y][x]*block[j+(x*8)]);

}
}

for(y=0;y<8;++y)
{
block[j+(y*8)] = (short)(value[y]>>12);
}
}

/* Perform 1D DCT on the resulting rows */
for(i=0;i<64;i+=8)
{
for(y=0;y<8;++y)
{
value[y] = 0;
for(x=0;x<8;++x)
{
value[y] += (int)(coe[y][x]*block[i+x]);
}
}
for(y=0;y<8;++y)
{
block[i+y] = (short)(value[y]>>15);
}
}
}


idct.c:

/*********************************************************************/
/* idct.c performs a 8 point 2D Inverse DCT function */
/*********************************************************************/

#include "dct.h"

extern unsigned char image_in[IMAGE_SIZE];
extern unsigned char image_out[IMAGE_SIZE];
extern short block[BLOCK_SIZE];
extern const short coe[8][8];


void idct(void)
{
Cranes Software Int. Ltd. TI-DIVISION

64

int i,j,x,y;
int value[8];

/* Perform 1D IDCT on the columns */
for(j=0;j<8;j++)
{
for(y=0;y<8;++y)
{
value[y] = 0;

for(x=0;x<8;++x)
{
value[y] += (int)(coe[x][y]*block[j+(x*8)]);
}
}

for(y=0;y<8;++y)
{
block[j+(y*8)] = (short)(value[y]>>12);
}
}

/* Perform 1D IDCT on the resulting rows */
for(i=0;i<64;i+=8)
{
for(y=0;y<8;++y)
{
value[y] = 0;

for(x=0;x<8;++x)
{
value[y] += (int)(coe[x][y]*block[i+x]);
}
}

for(y=0;y<8;++y)
{
block[i+y] = (short)(value[y]>>15);
}
}
}







Cranes Software Int. Ltd. TI-DIVISION

65

MY_LNK_CMD.cmd:

-l imagecfg.cmd


SECTIONS
{

mydata > SDRAM
mycode > SDRAM
ext_sdram > SDRAM
}



Image in:




Image out:

Das könnte Ihnen auch gefallen