Beruflich Dokumente
Kultur Dokumente
USER MANUAL
2
Cranes Software Int. Ltd. TI-DIVISION
TABLE OF CONTENTS
1. INSTALLATION PROCEDURE………………………………………. 4
2. DSK FEAUTURES……………………………………….……………… 8
e. AUDIO APPLICATION
a. PLOT A SPECTROGRAM
g. IMPLUSE RESPONSE
h. MINI PROJECT
3
Cranes Software Int. Ltd. TI-DIVISION
INSTALLATION PROCEDURE
SYSTEM REQUIREMENTS
Minimum Recommended
• 233MHz or Higher Pentium- • 500MHz or Higher Pentium –
Compatible CPU Compatible CPU
• 600MB of free hard disk space
• 128MB of RAM or more • 128MB RAM
• SVGA (800 x 600 ) display
• Internet Explorer (4.0 or later) or • 16bit Color
• Netscape Navigator (4.7 or later)
• Local CD-ROM drive
4
Cranes Software Int. Ltd. TI-DIVISION
An install screen appears like below; if not, goes to the windows Explorer
and run setup.exe
5
Cranes Software Int. Ltd. TI-DIVISION
DIAGNOSTIC:-
• Test the USB port by running DSK Port test from the start menu
6
Cranes Software Int. Ltd. TI-DIVISION
(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
7
Cranes Software Int. Ltd. TI-DIVISION
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.
Problem: Windows cannot find the DSK. Check power and USB Cable
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).
8
Cranes Software Int. Ltd. TI-DIVISION
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 TI’s 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.
9
Cranes Software Int. Ltd. TI-DIVISION
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:
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.
10
Cranes Software Int. Ltd. TI-DIVISION
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.
11
Cranes Software Int. Ltd. TI-DIVISION
12
Cranes Software Int. Ltd. TI-DIVISION
13
Cranes Software Int. Ltd. TI-DIVISION
• 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
14
Cranes Software Int. Ltd. TI-DIVISION
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
15
Cranes Software Int. Ltd. TI-DIVISION
LINEAR CONVOLUTION
Description:-
Linear Convolution Involves the following operations.
1. Folding
2. Multiplication
3. Addition
4. Shifting
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]
NOTE: At the end of input sequences pad ‘n’ and ‘k’ no. of zero’s
16
Cranes Software Int. Ltd. TI-DIVISION
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.
17
Cranes Software Int. Ltd. TI-DIVISION
18
Cranes Software Int. Ltd. TI-DIVISION
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
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[n−m] wheel. Sum=y[n]
Example 1: Convolve (n = 4)
• h[−m] =
19
Cranes Software Int. Ltd. TI-DIVISION
Figure 4
Multiply f[m] and sum to yield: y[0] =3
• h[1−m]
Figure 5
Multiply f[m] and sum to yield: y[1] =5
• h[2−m]
Figure 6
Multiply f[m] and sum to yield: y[2] =3
• h[3−m]
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");
20
Cranes Software Int. Ltd. TI-DIVISION
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}
21
Cranes Software Int. Ltd. TI-DIVISION
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.
22
Cranes Software Int. Ltd. TI-DIVISION
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.
#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;
23
Cranes Software Int. Ltd. TI-DIVISION
//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.
24
Cranes Software Int. Ltd. TI-DIVISION
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
25
Cranes Software Int. Ltd. TI-DIVISION
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
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
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.
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.
Run
18. Debug
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.
27
Cranes Software Int. Ltd. TI-DIVISION
III. Compute the desired Impulse Response h d (n) using particular Window
Eg: b_rect1=fir1 (order, Wc , 'high',boxcar(31));
IV. Convolve input sequence with truncated Impulse Response x (n)*h (n)
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 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,
28
Cranes Software Int. Ltd. TI-DIVISION
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').
order = 50;
cf=[500/4000,1000/4000,1500/4000]; cf--> contains set of cut-off frequencies[Wc ]
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,'};');
29
Cranes Software Int. Ltd. TI-DIVISION
fclose(fid);
winopen('FIR_highpass_rectangular.txt');
T.1 : Matlab generated Coefficients for FIR Low Pass Kaiser 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
IMPLEMENTATION OF AN FIR FILTER :
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,-
ALGORITHM TO IMPLEMENT :
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,-
We need to realize an advance FIR filter by implementing its difference equation as per the
0.0001,-0,0};
specifications. A direct form I implementation approach is taken. (The filter coefficients are taken
as ai as generated by the Matlab program.)
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};
T.2 :Matlab generated Coefficients for FIR Low Pass Rectangular filter
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,-
T.3 : Matlab generated Coefficients for FIR Low Pass Triangular filter
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};
30
Cranes Software Int. Ltd. TI-DIVISION
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};
31
Cranes Software Int. Ltd. TI-DIVISION
Start
Initialize Counter = 0
Initialize Output = 0 , i = 0
Output += coeff[N-i]*val[i]
Shift the input value by one
No
Is the loop
Cnt = order
32
Cranes Software Int. Ltd. TI-DIVISION
fir.c
#include "xyzcfg.h"
#include "dsk6713.h"
#include "dsk6713_aic23.h"
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;
DSK6713_AIC23_setFreq(hCodec, 1);
33
Cranes Software Int. Ltd. TI-DIVISION
while(1)
{ /* Read a sample to the left channel */
while (!DSK6713_AIC23_read(hCodec, &l_input));
l_output=(Int16)FIR_FILTER(&filter_Coeff ,l_input);
r_output=l_output;
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 :
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.
34
Cranes Software Int. Ltd. TI-DIVISION
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
35
Cranes Software Int. Ltd. TI-DIVISION
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
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
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.
36
Cranes Software Int. Ltd. TI-DIVISION
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.
Run
18. Debug
37
Cranes Software Int. Ltd. TI-DIVISION
38
Cranes Software Int. Ltd. TI-DIVISION
Audio Application
39
Cranes Software Int. Ltd. TI-DIVISION
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.
40
Cranes Software Int. Ltd. TI-DIVISION
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
41
Cranes Software Int. Ltd. TI-DIVISION
42
Cranes Software Int. Ltd. TI-DIVISION
{
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;
}
43
Cranes Software Int. Ltd. TI-DIVISION
clc;
if ~isenabled(cc.rtdx);
end
isenabled(cc.rtdx,'ochan');
N = round(M/2);
44
Cranes Software Int. Ltd. TI-DIVISION
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(gca,'XLim', [0 4.096]);
set(gca,'YLim', [0 4000]);
set(gca,'XLimMode','manual');
set(gca,'YLimMode','manual');
for i = 1:32768
w=double(w(1:N));
45
Cranes Software Int. Ltd. TI-DIVISION
column = mod(column, B) + 1;
end
NOTE: For this example works with CCS 2.2 and Matlab 6.5.
Procedure:
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
Path “C:\CCStudio\C6000\dsk6713\lib\dsk6713bsl.lib”
46
Cranes Software Int. Ltd. TI-DIVISION
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 .
47
Cranes Software Int. Ltd. TI-DIVISION
48
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
#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];
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;
DSK6713_AIC23_setFreq(hCodec, 1);
52
Cranes Software Int. Ltd. TI-DIVISION
while(1)
{
l_output=(short int)adaptive_filter(l_input,r_input);
r_output=l_output;
desired = l_input1;
noise = r_input1;
dplusn = desired + noise; //desired+noise
delay[0] = noise; //noise as input to adapt FIR
53
Cranes Software Int. Ltd. TI-DIVISION
//output=((short)dplusn);//output (desired+noise)
//overall output result
return(output);
}
PROCEDURE :
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).
Observe the waveform that appears on the CRO screen. Verify that the 3 KHz noise signal
is being cancelled gradually.
54
Cranes Software Int. Ltd. TI-DIVISION
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;
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]);
}
}
55
Cranes Software Int. Ltd. TI-DIVISION
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
56
Cranes Software Int. Ltd. TI-DIVISION
MINI PROJECT
(DISCRETE COSINE TRANSFORM)
57
Cranes Software Int. Ltd. TI-DIVISION
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:
N −1 N −1
2 ( 2 x + 1)uπ ( 2 y + 1)vπ
F (u , v ) = C (u )C (v )∑∑ f ( x, y ) cos[ ] cos[ ]
N y =0 x =0 2 N 2 N
2-D IDCT:
N −1 N −1
2 (2 x + 1)uπ (2 y + 1)vπ
f ( x, y ) =
N
∑∑ C (u )C (v) F (u, v) cos[
v = 0 u =0 2N
] cos[
2N
]
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.
58
Cranes Software Int. Ltd. TI-DIVISION
59
Cranes Software Int. Ltd. TI-DIVISION
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.
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
add files to project’ pull down menu.
‘Project
6. Copy the header files “scenary.h” and “dct.h” and paste it in your project folder.
8. Load the program in program memory of DSP chip using the ‘File-load program’ pull
down menu.
60
Cranes Software Int. Ltd. TI-DIVISION
Main.c:
#include <stdio.h>
#include <stdlib.h>
#include "dct.h"
#include "scenary.h" /* Header file containing input image as a 1D array */
void main()
{
int i,x;
61
Cranes Software Int. Ltd. TI-DIVISION
dct.c:
/*********************************************************************/
/* dct.c Function to perform a 8 point 2D DCT */
/* DCT is performed using direct matrix multiplication */
/*********************************************************************/
#include "dct.h"
void dct(void)
{
int i,j,x,y;
int value[8];
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);
}
}
idct.c:
/*********************************************************************/
/* idct.c performs a 8 point 2D Inverse DCT function */
/*********************************************************************/
#include "dct.h"
void idct(void)
{
63
Cranes Software Int. Ltd. TI-DIVISION
int i,j,x,y;
int value[8];
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);
}
}
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);
}
}
}
64
Cranes Software Int. Ltd. TI-DIVISION
MY_LNK_CMD.cmd:
-l imagecfg.cmd
SECTIONS
{
Image in:
Image out:
65