46
Program-5 Aim:- To generate sinusoidal signal using DSK-6713 processor. Coding:- /* DSP program generate the sine wave using lookup table */ /* and produces an output stream. Output data are sent to host files */ /* using RTDX channels. Interface CCstudio with VB and display */ /* the wave on VB graph screen */ / ************************************************************************** */ #include <std.h> #include <log.h> #include <rtdx.h> #include "rtdxsinecfg.h" #include "target.h" #define BUFSIZE 64 #define BUFFERLENGTH 64 #define MINVOLUME 1 Jai Kumar Soni

Program 5

Embed Size (px)

Citation preview

Page 1: Program 5

Program-5

Aim:- To generate sinusoidal signal using DSK-6713 processor.

Coding:-/* DSP program generate the sine wave using lookup table *//* and produces an output stream. Output data are sent to host files */ /* using RTDX channels. Interface CCstudio with VB and display *//* the wave on VB graph screen *//***************************************************************************/

#include <std.h>

#include <log.h>#include <rtdx.h>

#include "rtdxsinecfg.h"

#include "target.h"

#define BUFSIZE 64#define BUFFERLENGTH 64#define MINVOLUME 1

typedef Int sample; /* representation of a data sample from A2D */

/* Global declarations */sample inp_buffer[BUFSIZE];int out_buffer[BUFFERLENGTH];

Int volume=0;

/* RTDX channels */RTDX_CreateInputChannel(control_channel);RTDX_CreateInputChannel(A2D_channel);RTDX_CreateOutputChannel(D2A1_channel);

Jai Kumar Soni

Page 2: Program 5

/* * ======== main ======== */Void main(){ sample *input = inp_buffer; Uns size = BUFSIZE; int sin_table[8] = {0,707,1000,707,0,-707,-1000,-707}; int i=0,loop=0; TARGET_INITIALIZE(); /* Enable RTDX interrupt */ // LOG_printf(&trace,"\n Sine Wave Example Started");

/* enable volume control input channel */

RTDX_enableInput(&control_channel);

while (TRUE){ /* Read a new volume when the hosts send it */ if (!RTDX_channelBusy(&control_channel)) { RTDX_readNB(&control_channel, &volume, sizeof(volume)); }

while (!RTDX_isInputEnabled(&A2D_channel)){#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for input*/#endif }

/* * A2D: get digitized input (get signal from the host through RTDX). * If A2D_channel is enabled, read data from the host. */ RTDX_read(&A2D_channel, input, size*sizeof(sample));

/* * D2A: produce analog output (send signal to the host through RTDX). * If D2A_channel is enabled, write data to the host. */

out_buffer[i]= sin_table[loop];

Jai Kumar Soni

Page 3: Program 5

i++;if (i== BUFFERLENGTH)i=0;if (++loop >7) loop = 0;

RTDX_write(&D2A1_channel,out_buffer, size*sizeof(sample));

while(RTDX_writing) {#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for output */#endif }

}}

Output :-

Jai Kumar Soni

Page 4: Program 5

Program-6

Aim:- To generate square wave signal using DSK-6713 processor.

Coding:-/* DSP program generate the Square wave using lookup table *//* and produces an output stream. Output data are sent to host files */ /* using RTDX channels. Interface CCstudio with VB and display *//* the wave on VB graph screen through RTDX channel *//***************************************************************************/

#include <std.h>

#include "rtdxsqurecfg.h"#include "dsk6713_aic23.h"#include "dsk6713.h"#include <log.h>#include <rtdx.h>#include "target.h"

#define BUFSIZE 64#define BUFFERLENGTH 64#define table_size 8 //size of table=48

typedef Int sample; /* representation of a data sample from A2D */

/* Global declarations */sample inp_buffer[BUFSIZE];sample out_buffer[BUFFERLENGTH];

Int volume=0;

/* RTDX channels */RTDX_CreateInputChannel(control_channel);RTDX_CreateInputChannel(A2D_channel);RTDX_CreateOutputChannel(D2A1_channel);

Jai Kumar Soni

Page 5: Program 5

int data_table[table_size]; //data table arraysample *input = inp_buffer;Uns size = BUFSIZE; int i=0,j=0;

/* * ======== main ======== */Void main(){ TARGET_INITIALIZE(); /* Enable RTDX interrupt */ // LOG_printf(&trace,"\n Square Wave Example Started"); /* enable volume control input channel */ RTDX_enableInput(&control_channel);

while (TRUE) { /* Read a new volume when the hosts send it */ if (!RTDX_channelBusy(&control_channel)) { RTDX_readNB(&control_channel, &volume, sizeof(volume)); }

while (!RTDX_isInputEnabled(&A2D_channel)){#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for input*/#endif }

/* * A2D: get digitized input (get signal from the host through RTDX). * If A2D_channel is enabled, read data from the host. */ RTDX_read(&A2D_channel, input, size*sizeof(sample));

/* * D2A: produce analog output (send signal to the host through RTDX). * If D2A_channel is enabled, write data to the host. */

for(i=0; i<=table_size/2; i++) //set 1st half of buffer

Jai Kumar Soni

Page 6: Program 5

{data_table[i] = 0x7FFF; //with max value (2^15)-1}for(i=table_size/2;i<table_size;i++) //set 2nd half of buffer{data_table[i] = -0x8000; //with -(2^15)}i = 0;

for(i=0; i<table_size/2; i++){out_buffer[j] = data_table[i]; //output to bufferj++;if(j==BUFFERLENGTH) j=0;}for(i=table_size/2;i<table_size;i++){out_buffer[j] = data_table[i]; //output to bufferj++;if(j==BUFFERLENGTH) j=0;}i=0;

RTDX_write(&D2A1_channel,out_buffer, size*sizeof(sample));printf("hello");

while(RTDX_writing){#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for output */#endif }

}}

Jai Kumar Soni

Page 7: Program 5

Output :-

Jai Kumar Soni

Page 8: Program 5

Program-7

Aim:- To generate triangular wave signal using DSK-6713 processor.

Coding:-/* DSP program generate the Triangular wave using lookup table *//* and produces an output stream. Output data are sent to host files */ /* using RTDX channels. Interface CCstudio with VB and display *//* the wave on VB graph screen through RTDX channel *//***************************************************************************/

#include <std.h> #include"rtdxtrangcfg.h"#include "dsk6713_aic23.h"#include "dsk6713.h"#include <log.h>#include <rtdx.h>#include "target.h"

#define BUFSIZE 64#define BUFFERLENGTH 64

/* Length of sine wave table */#define TABLE_SIZE 24

typedef Int sample; /* representation of a data sample from A2D */

/* Global declarations */sample inp_buffer[BUFSIZE];

Int volume=0;// = MINVOLUME; /* the scaling factor for volume control */

Jai Kumar Soni

Page 9: Program 5

/* RTDX channels */RTDX_CreateInputChannel(control_channel);RTDX_CreateInputChannel(A2D_channel);RTDX_CreateOutputChannel(D2A1_channel);

int out_buffer[256]; int loop=0;int i=0;sample *input = inp_buffer;Uns size = BUFSIZE; int trang_table[TABLE_SIZE]= { 0, 2000, 4000, 6000, 8000, 10000, 12000, 10000, 8000, 6000, 4000, 2000, 0, -2000, -4000, -6000, -8000, -10000,-12000,-10000, -8000, -6000 ,-4000, -2000 };//table valuesint out_buffer[256]; //output buffer

void main(){

TARGET_INITIALIZE(); /* Enable RTDX interrupt */ //LOG_printf(&trace,"\n Trangularwave example started"); /* enable volume control input channel */ RTDX_enableInput(&control_channel);

while (TRUE) { /* Read a new volume when the hosts send it */ if (!RTDX_channelBusy(&control_channel)) { RTDX_readNB(&control_channel, &volume, sizeof(volume)); }

while (!RTDX_isInputEnabled(&A2D_channel)){#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for input*/#endif }

/* * A2D: get digitized input (get signal from the host through RTDX). * If A2D_channel is enabled, read data from the host. */ RTDX_read(&A2D_channel, input, size*sizeof(sample));

Jai Kumar Soni

Page 10: Program 5

/* * D2A: produce analog output (send signal to the host through RTDX). * If D2A_channel is enabled, write data to the host. */

out_buffer[i] = trang_table[loop]; //output to bufferi++; if(i==BUFFERLENGTH) i=0; //if @ bottom reinit countif (++loop > 23) loop = 0;

RTDX_write(&D2A1_channel,out_buffer, size*sizeof(sample));printf("hello");

while(RTDX_writing) {#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for output */#endif }}}

Output :-

Jai Kumar Soni

Page 11: Program 5

Program-8

Aim:- To perform linear convolution using DSK-6713 processor.

Coding:-#include<stdio.h>#include "linearcfg.h"#include "dsk6713.h"#include "dsk6713_aic23.h"#include "rtdx.h" #include "target.h"

#define BUFSIZE 7

/* Codec configuration settings */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 0x0001, // 8 DSK6713_AIC23_SAMPLERATE Sample rate control 0x0001 // 9 DSK6713_AIC23_DIGACT Digital interface activation}; Uint32 fs = DSK6713_AIC23_FREQ_32KHZ; //set sampling rate

Int volume =1; /* the scaling factor for volume control */

/* RTDX channels */

RTDX_CreateInputChannel(control_channel); RTDX_CreateInputChannel(A2D_channel); RTDX_CreateOutputChannel(D2A1_channel); RTDX_CreateOutputChannel(D2A2_channel);

Jai Kumar Soni

Page 12: Program 5

typedef Int sample; /* representation of a data sample from A2D */

int m=4; /*Lenght of i/p samples sequence*/int n=4; /*Lenght of impulse response Co-efficients */

int x[7]={1,2,3,4,0,0,0}; /*Input Signal Samples*/int h[7]={1,2,3,4,0,0,0};

sample inp_buffer[7];

int out_buffer[10];

sample *input = inp_buffer; int *output = out_buffer; Uns size = BUFSIZE; int i=0,j;

void main(){

DSK6713_AIC23_CodecHandle hCodec; //Int16 msec;

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

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

DSK6713_AIC23_setFreq( hCodec, fs);

TARGET_INITIALIZE(); /* Enable RTDX interrupt */ // LOG_printf(&trace,"hostio example started"); /* enable volume control input channel */ RTDX_enableInput(&control_channel);

while (TRUE) { /* Read a new volume when the hosts send it */ if (!RTDX_channelBusy(&control_channel)) { RTDX_readNB(&control_channel, &volume, sizeof(volume)); }

while (!RTDX_isInputEnabled(&A2D_channel)){#if RTDX_POLLING_IMPLEMENTATION

Jai Kumar Soni

Page 13: Program 5

RTDX_Poll(); /* poll comm channel for input*/#endif }

/* * A2D: get digitized input (get signal from the host through RTDX). * If A2D_channel is enabled, read data from the host. */ RTDX_read(&A2D_channel,input, size*sizeof(sample));

/* * Vector Scale: Scale the input signal by the volume factor to * produce the output signal*/

while(size--) {

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

out_buffer[i]+=x[j]*h[i-j];}

// for(i=0;i<m+n-1;i++)

// printf("%d\n",out_buffer[i]);

}

size = BUFSIZE; input = inp_buffer; output = out_buffer;

/* * D2A: produce analog output (send signal to the host through RTDX). * If D2A_channel is enabled, write data to the host. */

RTDX_write(&D2A1_channel,out_buffer, size*sizeof(sample)); while(RTDX_writing){

#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for output */#endif

Jai Kumar Soni

Page 14: Program 5

}}}

Output :-

Jai Kumar Soni

Page 15: Program 5

Program-9

Aim:- To design an FIR filter using DSK-6713 processor.

Coding:-*Purpose ; This program explains FIR Filter. input is internally generated noise.The band pass filter we designed is of the order 41.*************************************************************************************************/

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

#include "bp41.h"

#include "noise_gen.h" #include "rtdx.h"#include "target.h" #include <math.h>#define BUFSIZE 41#define MINVOLUME 1 //delay samples short fb; //feedback variableshift_reg sreg;short prn(void) ;

/* Codec configuration settings */DSK6713_AIC23_Config config = { \ 0x0017, /* 0 DSK6713_AIC23_LEFTINVOL Left line input channel volume */ \ 0x0017, /* 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume */\ 0x01f9, /* 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone volume */ \ 0x01f9, /* 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume */ \ 0x0012, /* 4 DSK6713_AIC23_ANAPATH Analog audio path control */ \ 0x0001, /* 5 DSK6713_AIC23_DIGPATH Digital audio path control */ \ 0x0002, /* 6 DSK6713_AIC23_POWERDOWN Power down control */ \ 0x0043, /* 7 DSK6713_AIC23_DIGIF Digital audio interface format */ \

Jai Kumar Soni

Page 16: Program 5

0x0023, /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control */ \ 0x0001 /* 9 DSK6713_AIC23_DIGACT Digital interface activation */ };

typedef Int sample; /* representation of a data sample from A2D */

/* Global declarations */sample inp_buffer[BUFSIZE];int out_buffer[BUFSIZE];short buffercount = 0; //init buffer countconst short bufferlength =1024; Int volume =1; /* the scaling factor for volume control */ /* RTDX channels */

RTDX_CreateInputChannel(control_channel); RTDX_CreateInputChannel(A2D_channel); RTDX_CreateOutputChannel(D2A_channel); RTDX_CreateOutputChannel(D2A1_channel);RTDX_CreateOutputChannel(D2A2_channel);

int *input = inp_buffer; int *output =out_buffer; Uns size = BUFSIZE; int i; int yn=0; //initialize filter's output short yn_buffer[1024];

main() {

int dly[N]; DSK6713_AIC23_CodecHandle hCodec;

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

TARGET_INITIALIZE(); /* Enable RTDX interrupt */ /* Start the codec */ hCodec = DSK6713_AIC23_openCodec(0, &config); /*set codec sampling frequency*/ DSK6713_AIC23_setFreq(hCodec,1);

Jai Kumar Soni

Page 17: Program 5

/* enable volume control input channel */ RTDX_enableInput(&control_channel);

while (TRUE) { /* Read a new volume when the hosts send it */ if (!RTDX_channelBusy(&control_channel)) { RTDX_readNB(&control_channel, &volume, sizeof(volume)); }

while (!RTDX_isInputEnabled(&A2D_channel)){#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for input*/#endif }

RTDX_read(&A2D_channel,input, size*sizeof(sample));

dly[0] = prn(); //input noise sequence yn = 0; //initialize filter's outputfor (i = 0; i< N; i++) yn+=(h[i]*dly[i])>>15; //y(n)+=h(i)*x(n-i)

for (i = N-1; i > 0; i--) //start @ bottom of buffer dly[i] = dly[i-1]; //data move to update delays

while (!DSK6713_AIC23_write(hCodec, ((short)yn))); //output filter

yn_buffer[buffercount] = yn; //filter's output into bufferbuffercount++; //increment buffer countif(buffercount==bufferlength) //if buffer count = size buffercount = 0; //reinitialize buffer count

sreg.regval = 0xFFFF; //shift register to nominal values

fb = 1; //initial feedback value

/* * D2A: produce analog output (send signal to the host through RTDX). * If D2A_channel is enabled, write data to the host. */

RTDX_write(&D2A1_channel,dly, size*sizeof(sample)); while(RTDX_writing){

#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for output */#endif

Jai Kumar Soni

Page 18: Program 5

}

RTDX_write(&D2A2_channel,yn_buffer, size*sizeof(sample));

while(RTDX_writing){#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for output */#endif }}}

short prn(void) //pseudorandom noise generation { short prnseq; //for pseudorandom sequence if(sreg.bt.b0) //sequence {1,-1}

prnseq = -16000; //scaled negative noise level else

prnseq = 16000; //scaled positive noise level fb =(sreg.bt.b0)^(sreg.bt.b1); //XOR bits 0,1 fb ^=(sreg.bt.b11)^(sreg.bt.b13); //with bits 11,13 ->fb sreg.regval<<=1; //shift register 1 bit to left sreg.bt.b0 = fb; //close feedback path return prnseq;

} //return sequence

Jai Kumar Soni

Page 19: Program 5

Output :-

Jai Kumar Soni

Page 20: Program 5

Program-10

Aim:- To design an IIR filter using DSK-6713 processor.

Coding:-

#include "iirfiltercfg.h"#include "dsk6713.h"#include "dsk6713_aic23.h"#include <rtdx.h>#include "target.h"#define BUFSIZE 31 #define MINVOLUME 1typedef Int sample;

signed int filter_Coeff[] = { // 0.388513,-0.777027,0.388513,1.000000,-1.118450,0.645091 // 12730,-12730,12730,2767,-18324,21137 /*HP 2500 */ //312,312,312,32767,-27943,24367 /*LP 800 */ //1455,1455,1455,32767,-23140,21735 /*LP 1000 */ 9268,-9268,9268,32767,-7395,18367 /*HP 4000*/ // 7215,-7215,7215,32767,5039,6171, /*HP 5000*/} ;

Uint32 inp_buffer[BUFSIZE];Uint32 out_buffer[BUFSIZE];Int volume = MINVOLUME;

RTDX_CreateInputChannel(control_channel);RTDX_CreateInputChannel(A2D_channel); RTDX_CreateOutputChannel(D2A1_channel); RTDX_CreateOutputChannel(D2A2_channel);/* Codec configuration settings */DSK6713_AIC23_Config config = { \

Jai Kumar Soni

Page 21: Program 5

0x001b, /* 0 DSK6713_AIC23_LEFTINVOL Left line input channel volume */ \ 0x001b, /* 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(){DSK6713_AIC23_CodecHandle hCodec;Uint32 l_input, r_input, l_output;Uint32 *input = inp_buffer;Uint32 *output = out_buffer;Uns size = BUFSIZE;

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

TARGET_INITIALIZE(); RTDX_enableInput(&control_channel); RTDX_enableInput(&A2D_channel); RTDX_enableOutput(&D2A1_channel); RTDX_enableOutput(&D2A2_channel); /* Start the codec */ hCodec = DSK6713_AIC23_openCodec(0, &config); DSK6713_AIC23_setFreq(hCodec, 3);

while(1){

for(j=0;j<BUFSIZE;j++) { /* Read a sample to the left channel */

while (!DSK6713_AIC23_read(hCodec, &l_input));

Jai Kumar Soni

Page 22: Program 5

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

l_output=IIR_FILTER(&filter_Coeff ,l_input); //r_output=l_output;

out_buffer[j]=l_output;

} RTDX_read(&A2D_channel, input, size*sizeof(sample)); if (!RTDX_channelBusy(&control_channel)) { RTDX_readNB(&control_channel, &volume, sizeof(volume)); }

while (!RTDX_isInputEnabled(&A2D_channel)){#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for input*/

#endif } j=0; while(size--){ *output++ = out_buffer[j++]; } size = BUFSIZE; input = inp_buffer; output = out_buffer; /* D2A: produce analog output (send signal to the host through RTDX). * If D2A_channel is enabled, write data to the host. */ /* for(m=0;m<50000;m++)

{ RTDX_write(&D2A_channel, l_input, size*sizeof(sample));}*/

for(m=0;m<50000;m++){

RTDX_write(&D2A2_channel, filter_Coeff, size*sizeof(sample));}for(m=0;m<50000;m++)

Jai Kumar Soni

Page 23: Program 5

{RTDX_write(&D2A1_channel,out_buffer , size*sizeof(sample));

} while(RTDX_writing){#if RTDX_POLLING_IMPLEMENTATION RTDX_Poll(); /* poll comm channel for output */#endif

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

signed int IIR_FILTER(signed int * h, signed int x1){

static signed int x[6] = { 0, 0, 0, 0, 0, 0 }; /* x(n), x(n-1), x(n-2). Must be static */ static signed int y[6] = { 0, 0, 0, 0, 0, 0 }; /* y(n), y(n-1), y(n-2). Must be static */ int temp=0;

temp = (short int)x1; /* Copy input to temp */

x[0] = (signed int) temp; /* Copy input to x[stages][0] */ temp = ( (int)h[0] * x[0]) ; /* B0 * x(n) */ temp += ( (int)h[1] * x[1]); /* B1/2 * x(n-1) */

temp += ( (int)h[1] * x[1]); /* B1/2 * x(n-1) */ temp += ( (int)h[2] * x[2]); /* B2 * x(n-2) */ temp -= ( (int)h[4] * y[1]); /* A1/2 * y(n-1) */ temp -= ( (int)h[4] * y[1]); /* A1/2 * y(n-1) */ temp -= ( (int)h[5] * y[2]); /* A2 * y(n-2) */ /* Divide temp by coefficients[A0] */ temp >>= 15;

if ( temp > 32767 ) { temp = 32767; } else if ( temp < -32767) { temp = -32767; } y[0] = temp ;

Jai Kumar Soni

Page 24: Program 5

/* Shuffle values along one place for next time */ y[2] = y[1]; /* y(n-2) = y(n-1) */ y[1] = y[0]; /* y(n-1) = y(n) */ x[2] = x[1]; /* x(n-2) = x(n-1) */ x[1] = x[0]; /* x(n-1) = x(n) */

/* temp is used as input next time through */ return (temp<<2); }

Output :-

Jai Kumar Soni

Page 25: Program 5

Jai Kumar Soni

Page 26: Program 5

Jai Kumar Soni

Page 27: Program 5

Jai Kumar Soni

Page 28: Program 5

Jai Kumar Soni

Page 29: Program 5

Jai Kumar Soni

Page 30: Program 5

Jai Kumar Soni

Page 31: Program 5

Jai Kumar Soni

Page 32: Program 5

Jai Kumar Soni

Page 33: Program 5

Jai Kumar Soni

Page 34: Program 5

Jai Kumar Soni

Page 35: Program 5

Jai Kumar Soni

Page 36: Program 5

Jai Kumar Soni