Вы находитесь на странице: 1из 31

UNIVERSITY OF KARACHI DEPARTMENT OF APPLIED PHYSICS

DIGITAL SIGNAL PROCESSING (#612)


LAB REPORT MADE BY: SAAD AHMED & AHSAN SIRAJ GROUP # 05 SUBMITTED TO: SIR ABID HUSSAIN

DIGITAL SIGNAL PROCESSING


LAB 1A REPORT Q1a: RITE A C PROGRAM THAT PROMPTS A USER TO ENTER A SMALL NO AND THEN CALCULATE ITS FACTORIAL! PRINT THE VALUE AND ITS FACTORIAL IN A NICELY FORMATTED FASHION! DEMONSTRATE HO YOU CAN SINGLE STEP THROUGH THIS PROGRAM HILE ATCHING THE FACTORIAL VALUE GRO ! INCLUDE LISTING IN YOUR REPORT AS LISTING 1! #include<stdio.h> #include<math.h> int fact; int n,i; main() { fact=1; rintf(!enter a"!); scanf(!#d!,$n); for(i=1;i<=n;i&&) { fact=fact(i; ) rintf(!*ns'er of factorial is= #d!,fact); ) DEMONSTRATING SINGLE STEP: +ebu, o tion can be used for various ur oses. -o e.amine sin,le ste in, 'e need to use < /10> %e1. 2t demonstrates the ro,ram in sin,le ste in,. </3> %e1 can be used to ste into function. LAB 2A REPORT Q2a: MODIFY THE INTERRUPT SERVICE ROUTINE TO PLAY THE LEFT CHANNEL ONLY! /( interru t driven sam lin, ro,ram for 4567801(/ #include <stdio.h> #include <stdlib.h> #include <strin,.h> #include <6cbs drv.h> #include <9ommon.h> #include <2ntr.h>

// initialized variable fact // initialized variable n and i

// ta%e in ut from user //for loo 'ith test condition

// rint final ans'er of factorial

//mcbs driver

#include <:oard.h> //456 librar1 #include <9odec.h> //codec librar1 #include <6cbs .h> #include <mathf.h> void hoo%int(void); interru t void 6c:;<=cv2;=(void); int main() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; int sam le=ate,*ctual>;am lin,>=ate; /( 2nitialize 456(/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); rintf (!?n#d!,c u>fre@()); /( A en 69:;<(/ mcbs >drv>init(); //initialize 6c:;< driver, allocates memor1 for the device handles dev= mcbs >o en(0); if (dev == BCDD) { rintf(!4rror o enin, 69:;< 0 ?n !); return(4==A=); ) /( confi,ure 6c:;<(/ memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); mcbs 9onfi,.loo bac% = /*D;4; mcbs 9onfi,.t..u date = -=C4; mcbs 9onfi,.t..cloc%> olarit1 = 9DEF><AD>=2;2BG; mcbs 9onfi,.t..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.t..frame>len,th1 = 0; mcbs 9onfi,.t..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs 9onfi,.r..u date = -=C4; mcbs 9onfi,.r..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 = 0; mcbs 9onfi,.r..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); 69:;<>4B*:D4(0,69:;<>:A-I); /( confi,ure 9A+49(/ codec>init(); //*/+ 0.0 d: ,ain, turn on K0d: mic ,ain, //sel(D/=)629 as in uts codec>adc>control(D4/-,0.0,-=C4,629>;4D); codec>adc>control(=2GI-,0.0,-=C4,629>;4D); codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); sam le=ate=LL000; *ctual>;am lin,>=ate= codec>chan,e>sam le>rate(sam le=ate, -=C4); rintf(!-he actual sam lin, rate is = #d?n!, *ctual>;am lin,>=ate); codec>interru t>enable(); hoo%int();

/(6ain loo (/ 'hile (1) { ) ) void hoo%int() { intr>init(); intr>ma (9<C>2B-1M,2;B>=2B-0); intr>hoo%(6c:;<=cv2;=,9<C>2B-1M); 2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return; ) interru t void 6c:;<=cv2;=(void) { int tem ; tem =69:;<>=4*+(0); tem =tem >>17; if (tem $ 0.3000) tem = tem N0.ffff0000; 69:;<>H=2-4(0,tem ); ) NO MODIFY THE INTERRUPT SERVICE ROUTINE TO PLAY THE RIGHT CHANNEL ONLY! interru t void 6c:;<=cv2;=(void) { int tem ; tem =69:;<>=4*+(0); tem =tem >>17; if (tem $ 0.3000) tem = tem N0.0000ffff; 69:;<>H=2-4(0,tem ); ) NO MODIFY THE INTERRUPT SERVICE ROUTINE TO PLAY BOTH CHANNELS!

2nt :; interru t void 6c:;<=cv2;=(void) { int tem ; tem =69:;<>=4*+(0); tem =tem >>17; if (:==0) { else if (tem $ 0.3000) tem = tem N0.ffff0000; :=1; )

else if { if (tem $ 0.3000) tem = tem N0.0000ffff; :=0; ) 69:;<>H=2-4(0,tem ); ) COMMENTS: /or left channel in the interru t service routine , 'e made the lo'er LObits as hi,h; and for the ri,ht channel 'e made the hi,her LObits hi,h. Q2": -able D1.Kb Q#a$%! B&% '() 1 17 9liff 3 9liff 7 9liff L 9liff K 9liff 1 9liff '() 2 =i,ht =i,ht =i,ht =i,ht =i,ht =i,ht '() * Deft Deft Deft Deft Deft Deft '() + /or'ard /or'ard /or'ard /or'ard /or'ard /or'ard '() , :ac%'ard :ac%'ard :ac%'ard :ac%'ard :ac%'ard :ac%'ard P0 30 70 LM J0 K0

I$./#)0 %10 2')&3&0) ISR /&4%&$5 %1a% 6('7&)04 +8"&% 9#a$%&:a%&'$ a4 /&4%&$5 L1!2"! &$%0((#6% 7'&) M.BSPR.7ISR(7'&)): { int tem ; tem =69:;<>=4*+(0); tem =tem >>17; if (tem $ 0.3000) tem = tem N0.10001000; 69:;<>H=2-4(0,tem ); ) COMMENTS : 2n this lab 'e have observed channel s'itchin,,'hich is done b1 this command tem = tem N0.ffffffff;. and in @uantization 'e have observed that b1 decreasin, the number of bits voice de,rades. ALIASING: -his art demonstrates aliasin, effects. -he smallest sam lin, rate that can be defined is 3 %Iz 'ith a B1@uist interval of QRL, LS %Iz. -hus, if a sinusoidal si,nal is ,enerated (e.,. 'ith 6*-D*:) 'ith fre@uenc1 outside this interval, e.,., f = M %Iz, and la1ed into the lineOin ut of the +;E, one mi,ht e. ect that it 'ould be aliased 'ith fa = f R fs = M R 3 = RJ %Iz. Io'ever, this 'ill not 'or% because the antialiasin, oversam lin, decimation filters of the codec filter out an1 such outOofOband com onents before the1 are sent to the rocessor. *n alternative is to

decimate the si,nal b1 a factor of K, i.e., dro in, ever1 other sam le. 2f the codec sam lin, rate is set to 3 %Iz and ever1 other sam le is dro ed, the effective sam lin, rate 'ill be L %Iz, 'ith a B1@uist interval of QRK, KS %Iz. * sinusoid 'hose fre@uenc1 is outside the decimated B1@uist interval QRK, KS %Iz, but inside the true B1@uist interval QRL, LS %Iz, 'ill not be cut off b1 the antiOaliasin, filter and 'ill be aliased. /or e.am le, if f = J %Iz, the decimated sinusoid 'ill be aliased 'ith fa = J R L = R1 %Iz. #include <stdio.h> #include <stdlib.h> #include <strin,.h> #include <6cbs drv.h> // mcbs driver #include <9ommon.h> #include <2ntr.h> #include <:oard.h> // 456 librar1 #include <9odec.h> // codec librar1 #include <6cbs .h> #include <mathf.h> interru t void 6c:;<=cv2;=(void); void hoo%int(void); void initialize(void); void read>in uts(short (, short (); void 'rite>out uts(short,short); void audio>source(int); void sam lin,>rate(short); union { unsi,ned int u; short cQKS; ) codec; short .D,.=,1D,1=; short ulse=1; //left and ri,ht in ut and out ut sam les from/to codec float ,=1; void main() { initialize(); //initialize the 456 board and codec, define interru ts sam lin,>rate(3); //3,K7,KL,..L3%hz audio>source(629>;4D); //D2B4 or 629 for line or micro hone in ut 'hile(1); //%ee 'aitin, for interru t, then Tum to isr() ) void initialize() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; /( 2nitialize 456 (/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); /( A en 69:;<(/ mcbs >drv>init(); //initialize 6c:;< driver, allocates memor1 //for the device handles dev= mcbs >o en(0); if (dev == BCDD)

{ rintf(!4rror o enin, 69:;< 0 ?n !); ) /( confi,ure 6c:;<(/ memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); mcbs 9onfi,.loo bac% = /*D;4; mcbs 9onfi,.t..u date = -=C4; mcbs 9onfi,.t..cloc%> olarit1 = 9DEF><AD>=2;2BG; mcbs 9onfi,.t..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.t..frame>len,th1 = 0; mcbs 9onfi,.t..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs 9onfi,.r..u date = -=C4; mcbs 9onfi,.r..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 = 0; mcbs 9onfi,.r..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); 69:;<>4B*:D4(0,69:;<>:A-I); ) void sam lin,>rate(short sam le=ate) { int *ctual>;am lin,>=ate; sam le=ate= sam le=ate(LL000; *ctual>;am lin,>=ate= codec>chan,e>sam le>rate(sam le=ate, -=C4); rintf(!-he actual sam lin, rate is = #d?n!, *ctual>;am lin,>=ate); ) void audio>source(int ;AC=94) { /( confi,ure 9A+49(/ codec>init(); if (;AC=94 == 0) { codec>adc>control(D4/-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); //select lineOin codec>adc>control(=2GI-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); ) else if (;AC=94 == K) //selects 6ic as in ut { codec>adc>control(D4/-,0.0,-=C4,D2B4>;4D); codec>adc>control(=2GI-,0.0,-=C4,D2B4>;4D); ) codec>line>in>control(D4/-,62B>*CF>D2B4>G*2B,/*D;4); codec>line>in>control(=2GI-,62B>*CF>D2B4>G*2B,/*D;4); codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); codec>interru t>enable(); hoo%int(); ) void hoo%int() { intr>init(); intr>ma (9<C>2B-1M,2;B>=2B-0); intr>hoo%(6c:;<=cv2;=,9<C>2B-1M);

2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return; ) interru t void 6c:;<=cv2;=(void) { read>in uts($.=,$.D); 1D= ulse(.D; 1== ulse(.=; 'rite>out uts(1=,1D); ) void read>in uts(short (.=, short (.D) { codec.u = 69:;<>=4*+(0); //read JKObit number (.== codec.cQ1S; (.D= codec.cQ0S; ) void 'rite>out uts (short 1=, short 1D) { codec.cQ1S= 1=; codec.cQ0S= 1D; 69:;<>H=2-4(0,codec.u); ) COMMENTS: 2n this lab 'e have choose a si,nal 'ith fre@uenc1 that 'e can observe aliasin,.:1 increasin, the sam lin, rate aliasin, decreased. LAB *A REPORT: Q1: GENERATE SINE #include <stdio.h> #include <stdlib.h> #include <strin,.h> #include <6cbs drv.h> #include <9ommon.h> #include <2ntr.h> #include <:oard.h> #include <9odec.h> #include <6cbs .h> #include <mathf.h> #define + L000 #define B 1K3 short .D,.=,1D,1=; short fs=3; float c,*=M000, f=.7; float 'Q+S; float bufferQBS; int @=0, %=0; float ,=1; AVE USING DSP CHIP!

//mcbs driver //456 librar1 //codec librar1

short fre@uenc1; interru t void isr(void); void hoo%int(void); void initialize(void); void read>in uts(short (, short (); void 'rite>out uts(short,short); void audio>source(int); void sam lin,>rate(short); int @'ra (int,int); float 'av,en (int , float (, float, float, int (); union { unsi,ned int u; short cQKS; ) codec; void main() { int n; float i = L(atanf(1); for (n=0; n<+; n&&) 'QnS=sinf(K( i(n/+); c=+(f/fs; initialize(); //initialize the 456 board and codec, define interru ts sam lin,>rate(fs); //3,K7,KL,..L3%hz audio>source(D2B4>;4D); //D2B4 or 629 for line or micro hone in ut 'hile(1) //%ee 'aitin, for interru t, then Tum to isr() { f=fre@uenc1/1000.0; c=+(f/fs; ) ) void initialize() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; /( 2nitialize 456(/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); /( A en 69:;<(/ mcbs >drv>init(); //initialize 6c:;< driver, allocates memor1 for the device handles dev= mcbs >o en(0); if (dev == BCDD) { rintf(!4rror o enin, 69:;< 0 ?n !); ) /( confi,ure memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); mcbs 9onfi,.loo bac% = /*D;4; mcbs 9onfi,.t..u date = -=C4; mcbs 9onfi,.t..cloc%> olarit1 = 9DEF><AD>=2;2BG; mcbs 9onfi,.t..cloc%>mode = 9DE>6A+4>4F-;

6c:;<(/

mcbs 9onfi,.t..frame>len,th1 = 0; mcbs 9onfi,.t..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs 9onfi,.r..u date = -=C4; mcbs 9onfi,.r..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 = 0; mcbs 9onfi,.r..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); //confi,ure 69:;<>4B*:D4(0,69:;<>:A-I); ) void sam lin,>rate(short sam le=ate) { int *ctual>;am lin,>=ate; sam le=ate= sam le=ate(1000; *ctual>;am lin,>=ate= codec>chan,e>sam le>rate(sam le=ate, -=C4); rintf(!-he actual sam lin, rate is = #d?n!, *ctual>;am lin,>=ate); ) void audio>source(int ;AC=94) { /( confi,ure 9A+49(/ codec>init(); if (;AC=94 == 0) /( */+ 0.0 d: ,ain, turn on K0d: mic ,ain, sel (D/=)629 as in uts(/ { codec>adc>control(D4/-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); //select lineOin codec>adc>control(=2GI-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); ) else if (;AC=94 == K) //selects 6ic as in ut { codec>adc>control(D4/-,0.0,-=C4,629>;4D); codec>adc>control(=2GI-,0.0,-=C4,629>;4D); ) codec>line>in>control(D4/-,62B>*CF>D2B4>G*2B,/*D;4); codec>line>in>control(=2GI-,62B>*CF>D2B4>G*2B,/*D;4); codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); codec>interru t>enable(); hoo%int(); ) void hoo%int() { intr>init(); intr>ma (9<C>2B-1M,2;B>=2B-0); intr>hoo%(isr,9<C>2B-1M); 2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return; ) interru t void isr() { read>in uts($.=,$.D); 1D= 'av,en (+,',*,f/fs,$@);

1D=(short)(* ( 'Q@S); @=(int) (@&c); if (@>=+) @=0; bufferQ%S = (float) 1D; if (&&%>=B) %=0; 'rite>out uts(1D,1D); ) void read>in uts(short (.=, short (.D) { codec.u = 69:;<>=4*+(0); //read JKObit number (.== codec.cQ1S; (.D= codec.cQ0S; ) void 'rite>out uts (short 1=, short 1D) { codec.cQ1S= 1=; codec.cQ0S= 1D; 69:;<>H=2-4(0,codec.u); ) float 'av,en (int +., float (', float *, float /, int (@) { float 1, c=+.(/; 1=*('Q(@S; (@= @'ra (+.O1, (int) ((@&c)); return 1; ) int @'ra (int +.,int @) { if (@ > +.) @ O= +. & 1; if (@ < 0) @ &= + & 1; return @; ) GENERATE SQUARE AVE USING DSP CHIP:

#include <stdio.h> #include <stdlib.h> #include <strin,.h> #include <6cbs drv.h> #include <9ommon.h> #include <2ntr.h> #include <:oard.h> #include <9odec.h> #include <6cbs .h> #include <mathf.h> #include <math.h> interru t void 6c:;<=cv2;=(void); void hoo%int(void); void initialize(void); void read>in uts(short (, short ();

//mcbs driver //456 librar1 //codec librar1

void 'rite>out uts(short,short); void audio>source(int); void sam lin,>rate(short); int @'ra (int, int); float 'av,en(int,float (, float, float, int (); union { unsi,ned int u; short cQKS; ) codec; short .D,.=,1D,1=; //left and ri,ht in ut and out ut sam les from/to codec float ,=1; #define + L000 #define B 1K3 short fs=3; float c,*=M000,f=0.K; float 'Q+S; float bufferQBS; int @=0,%=0; void main() { int n; float i = L(atanf(1); for (n=0; n<K000; n&&) 'QnS=1; for (n=K000; n<L000; n&&) 'QnS=O1; initialize(); //initialize the 456 board and codec, define interru ts sam lin,>rate(fs); //3,K7,KL,..L3%hz audio>source(D2B4>;4D); //D2B4 or 629 for line or micro hone in ut 'hile(1); //%ee 'aitin, for interru t, then Tum to isr() ) void initialize() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; /( 2nitialize 456 (/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); /( A en 69:;< (/ mcbs >drv>init(); //initialize 6c:;< driver, allocates memor1 for the device //handles dev= mcbs >o en(0); if (dev == BCDD) { rintf(!4rror o enin, 69:;< 0 ?n !); ) /( confi,ure 6c:;< (/ memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); mcbs 9onfi,.loo bac% = /*D;4; mcbs 9onfi,.t..u date = -=C4; mcbs 9onfi,.t..cloc%> olarit1 = 9DEF><AD>=2;2BG; mcbs 9onfi,.t..cloc%>mode = 9DE>6A+4>4F-;

mcbs 9onfi,.t..frame>len,th1 = 0; mcbs 9onfi,.t..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs 9onfi,.r..u date = -=C4; mcbs 9onfi,.r..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 = 0; mcbs 9onfi,.r..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); //confi,ure 69:;<>4B*:D4(0,69:;<>:A-I); ) void sam lin,>rate(short sam le=ate) { int *ctual>;am lin,>=ate; sam le=ate= sam le=ate(M00; *ctual>;am lin,>=ate= codec>chan,e>sam le>rate(sam le=ate, -=C4); rintf(!-he actual sam lin, rate is = #d?n!, *ctual>;am lin,>=ate); ) void audio>source(int ;AC=94) { /( confi,ure 9A+49 (/ codec>init(); if (;AC=94 == 0) /( */+ 0.0 d: ,ain, turn on K0d: mic ,ain, sel (D/=)629 as in uts(/ { codec>adc>control(D4/-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); //select lineOin codec>adc>control(=2GI-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); ) else if (;AC=94 == K) //selects 6ic as in ut { codec>adc>control(D4/-,0.0,-=C4,629>;4D); codec>adc>control(=2GI-,0.0,-=C4,629>;4D); ) codec>line>in>control(D4/-,62B>*CF>D2B4>G*2B,/*D;4); codec>line>in>control(=2GI-,62B>*CF>D2B4>G*2B,/*D;4); codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); codec>interru t>enable(); hoo%int(); ) void hoo%int() { intr>init(); intr>ma (9<C>2B-1M,2;B>=2B-0); intr>hoo%(6c:;<=cv2;=,9<C>2B-1M); 2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return; ) interru t void 6c:;<=cv2;=(void) { read>in uts($.=,$.D); 1D= 'av,en(+,',*,f/fs,$@); bufferQ%S=(float) 1D;

if (&&% >=B) %=0; 'rite>out uts(1D,1D); ) void read>in uts(short (.=, short (.D) { codec.u = 69:;<>=4*+(0); //read JKObit number (.== codec.cQ1S; (.D= codec.cQ0S; ) void 'rite>out uts (short 1=, short 1D) { codec.cQ1S= 1=; codec.cQ0S= 1D; 69:;<>H=2-4(0,codec.u); ) float 'av,en(int +., float (', float *, float /, int (@) { float 1, c=+.(/; 1=*('Q(@S; (@ = @'ra (+.O1, (int) ((@&c)); return 1; ) int @'ra (int +., int @) { if (@ > +.) @ O= +&1; if (@ < 0) @ &= +.&1; return @; ) COMMENTS: 2n this lab 'e have ,enerated sinusoidal 'ave,then 'e have set fre@uenc1 to M00Iz, b1 this the am litude of the sine 'ave decreases, further 'e have decrease the fre@uenc1 so observed the volume decrease,then 'e have re lace t'o line in 2;= ,and b1 these t'o lines 'e have ,enerated a ;ine Have instead of 'ritin, 'hole ro,ram. *nd 'hen 'e have re lace sinK i b1 s@rK i then ,enerated a s@uare 'ave. AM MODULATION: #include <stdio.h> #include <stdlib.h> #include <strin,.h> #include <6cbs drv.h> #include <9ommon.h> #include <2ntr.h> #include <:oard.h> #include <9odec.h> #include <6cbs .h> #include <mathf.h> #include <math.h>

//mcbs driver //456 librar1 //codec librar1

interru t void 6c:;<=cv2;=(void); void hoo%int(void); void initialize(void); void read>in uts(short (, short (); void 'rite>out uts(short,short); void audio>source(int); void sam lin,>rate(short); int @'ra (int, int); float 'av,en(int,float (, float, float, int (); union { unsi,ned int u; short cQKS; ) codec; #define B 1K3 float bufferQBS; int @=0,%=0; short .D, .=, 1D, 1=; // left and ri,ht in ut and out ut sam les from/to codec #define + 3000 // fmin = fs/+ = 3000/3000 = 1 Iz float 'Q+S; // 'avetable buffer short fs=3; float *, f=0.K; float *e=10000, fe=0.00K; int @, @e; float 'av,en(int,float (, float, float, int (); void main() { int i; float i = L(atanf(1); @=@e=0; for (i=0; i<+; i&&) 'QiS = sinf(K( i(i/+); // fill sinusoidal 'avetable initialize(); sam lin,>rate(fs); audio>source(D2B4>;4D); 'hile(1); ) void initialize() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; /(2nitialize 456(/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); /( A en 69:;<(/ mcbs >drv>init(); //initialize 6c:;< driver, allocates memor1 for the device handles dev= mcbs >o en(0); if (dev == BCDD) { rintf(!4rror o enin, 69:;< 0 ?n !); ) /(confi,ure 6c:;<(/

memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); mcbs 9onfi,.loo bac% = /*D;4; mcbs 9onfi,.t..u date = -=C4; mcbs 9onfi,.t..cloc%> olarit1 = 9DEF><AD>=2;2BG; mcbs 9onfi,.t..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.t..frame>len,th1 = 0; mcbs 9onfi,.t..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs 9onfi,.r..u date = -=C4; mcbs 9onfi,.r..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 = 0; mcbs 9onfi,.r..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); //confi,ure 69:;<>4B*:D4(0,69:;<>:A-I); ) void sam lin,>rate(short sam le=ate) { int *ctual>;am lin,>=ate; sam le=ate= sam le=ate(1000; *ctual>;am lin,>=ate= codec>chan,e>sam le>rate(sam le=ate, -=C4); rintf(!-he actual sam lin, rate is = #d?n!, *ctual>;am lin,>=ate); ) void audio>source(int ;AC=94) { /( confi,ure 9A+49 (/ codec>init(); if (;AC=94 == 0) /( */+ 0.0 d: ,ain, turn on K0d: mic ,ain, sel (D/=)629 as in uts (/ { codec>adc>control(D4/-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); //select lineOin codec>adc>control(=2GI-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); ) else if (;AC=94 == K) //selects 6ic as in ut { codec>adc>control(D4/-,0.0,-=C4,629>;4D); codec>adc>control(=2GI-,0.0,-=C4,629>;4D); ) codec>line>in>control(D4/-,62B>*CF>D2B4>G*2B,/*D;4); codec>line>in>control(=2GI-,62B>*CF>D2B4>G*2B,/*D;4); codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); codec>interru t>enable(); hoo%int(); ) void hoo%int() { intr>init(); intr>ma (9<C>2B-1M,2;B>=2B-0); intr>hoo%(6c:;<=cv2;=,9<C>2B-1M); 2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return;

) interru t void 6c:;<=cv2;=() { float 1; read>in uts($.D, $.=); // in uts not used * = 'av,en(+, ', *e, fe/fs, $@e); 1 = 'av,en(+, ', *, f/fs, $@); 1D = 1= = (short) 1; bufferQ%S=(float) 1D; if (&&% >=B) %=0; 'rite>out uts(1D,1=); return; ) void read>in uts(short (.=, short (.D) { codec.u = 69:;<>=4*+(0); //read JKObit number (.== codec.cQ1S; (.D= codec.cQ0S; ) void 'rite>out uts (short 1=, short 1D) { codec.cQ1S= 1=; codec.cQ0S= 1D; 69:;<>H=2-4(0,codec.u); ) float 'av,en(int +., float (', float *, float /, int (@) { float 1, c=+.(/; 1=*('Q(@S; (@ = @'ra (+.O1, (int) ((@&c)); return 1; ) int @'ra (int +., int @) { if (@ > +.) @ O= +&1; if (@ < 0) @ &= +.&1; return @; ) // ame..c O *6 e.am le // OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO #include !ds lab.h! // +;E initialization declarations and function rotot1 es #include <math.h> short .D, .=, 1D, 1=; // left and ri,ht in ut and out ut sam les from/to codec #define + 3000 // fmin = fs/+ = 3000/3000 = 1 Iz float 'Q+S; // 'avetable buffer short fs=3; float *, f=0.K; float *e=10000, fe=0.00K; int @, @e;

float 'av,en(int, float (, float, float, int (); void main() { int i; float <2 = L(atan(1); @=@e=0; for (i=0; i<+; i&&) 'QiS = sin(K(<2(i/+); // fill sinusoidal 'avetable initialize(); sam lin,>rate(fs); audio>source(D2B4); 'hile(1); ) interru t void isr() { float 1; * = 'av,en(+, ', *e, fe/fs, $@e); 1 = 'av,en(+, ', *, f/fs, $@); 1D = 1= = (short) 1; 'rite>out uts(1D,1=); return; ) COMMENTS: 2n this lab 'e have observed that b1 runnin, the *6 modulation ro,ram 'e heard a lo' volume lo' itch sound than a sudden increase in this sound,and have seen *6 'ave on the ,ra h as 'ell. He have set carrier and si,nal fre@uenc1 same so received e@ual envelo e. FM MODULATION: #include !ds lab.h! // +;E initialization declarations and function rotot1 es #include <math.h> short .D, .=, 1D, 1=; // left and ri,ht in ut and out ut sam les from/to codec #define + 3000 // fmin = fs/+ = 3000/3000 = 1 Iz float 'Q+S; // 'avetable buffer short fs=3; float *=M000, f=0.M; float *m=0.J, fm=0.001; int @, @m; float 'av,en(int, float (, float, float, int (); void main() { int i; float <2 = L(atan(1); @ = @m = 0; for (i=0; i<+; i&&) 'QiS = sin(K(<2(i/+); // load sinusoidal 'avetable initialize(); sam lin,>rate(fs); audio>source(D2B4); 'hile(1); ) interru t void isr()

{ float 1, /; / = (1 & 'av,en(+, ', *m, fm/fs, $@m)) ( f/fs; 1 = 'av,en(+, ', *, /, $@); 1D = 1= = (short) 1; 'rite>out uts(1D,1=); return; )

// modulated fre@uenc1 // /6 si,nal

COMMENTS: 2n this lab 'e have seen /6 6odulated 'ave on the ,ra h and oscillosco e and have heard sound 'hich is increasin, and decreasin, (<itch and volume). RING MODULATORS AND TREMOLO 2nterestin, audio effects can be obtained b1 feedin, the audio in ut to the am litude of a 'avetable ,enerator and combinin, the resultin, out ut 'ith the in ut, as sho'n belo'" /or e.am le, for a sinusoidal ,enerator of fre@uenc1 /0 = f0/fs, 'e have" 1(n)= U.(n)&V.(n)cos(KW/0n)= .(n)U & Vcos(KW/0n) -he rin, modulator effect is obtained b1 settin, U = 0 and V = 1, so that 1(n)= .(n)cos(KW/0n) (K.J) 'hereas, the tremolo effect corres onds to U = 1 and V >= 0 1(n)= .(n)&V.(n)cos(KW/0n)= .(n)1 & Vcos(KW/0n) -he follo'in, 2;= function im lements either effect" interru t void isr() { float ., 1; read>in uts($.D, $.=); . = (float) .D; 1 = al ha ( . & beta ( 'av,en(+, ', ., f/fs, $@); 1D = 1= = (short) 1; 'rite>out uts(1D,1=); return; ) #include <stdio.h> #include <stdlib.h> #include <strin,.h> #include <6cbs drv.h> #include <9ommon.h> #include <2ntr.h> #include <:oard.h> #include <9odec.h> #include <6cbs .h> #include <mathf.h> #include <math.h> interru t void 6c:;<=cv2;=(void); void hoo%int(void); void initialize(void); void read>in uts(short (, short (); void 'rite>out uts(short,short); void audio>source(int);

//mcbs driver //456 librar1 //codec librar1

void sam lin,>rate(short); int @'ra (int, int); float 'av,en(int,float (, float, float, int (); union { unsi,ned int u; short cQKS; ) codec; #define B 1K3 float al ha=1; float beta=1; float bufferQBS; int @=0,%=0; short .D, .=, 1D, 1=; // left and ri,ht in ut and out ut sam les from/to codec #define + 3000 // fmin = fs/+ = 3000/3000 = 1 Iz float 'Q+S; // 'avetable buffer short fs=3; float *, f=0.K; float 'av,en(int,float (, float, float, int (); void main() { int i; float i = L(atanf(1); for (i=0; i<+; i&&) 'QiS = sinf(K( i(i/+); // fill sinusoidal 'avetable initialize(); sam lin,>rate(fs); audio>source(D2B4>;4D); 'hile(1); ) void initialize() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; /( 2nitialize 456(/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); /( A en 69:;<(/ mcbs >drv>init(); //initialize driver, allocates memor1 for the device handles dev= mcbs >o en(0); if (dev == BCDD) { rintf(!4rror o enin, 69:;< 0 ?n !); ) /(confi,ure 6c:;< (/ memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); mcbs 9onfi,.loo bac% = /*D;4; mcbs 9onfi,.t..u date = -=C4; mcbs 9onfi,.t..cloc%> olarit1 = 9DEF><AD>=2;2BG; mcbs 9onfi,.t..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.t..frame>len,th1 = 0; mcbs 9onfi,.t..'ord>len,th1 = HA=+>D4BG-I>JK;

6c:;<

mcbs 9onfi,.r..u date = -=C4; mcbs 9onfi,.r..cloc%>mode = 9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 = 0; mcbs 9onfi,.r..'ord>len,th1 = HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); /(confi,ure(/ 69:;<>4B*:D4(0,69:;<>:A-I); ) void sam lin,>rate(short sam le=ate) { int *ctual>;am lin,>=ate; sam le=ate= sam le=ate(1000; *ctual>;am lin,>=ate= codec>chan,e>sam le>rate(sam le=ate, -=C4); rintf(!-he actual sam lin, rate is = #d?n!, *ctual>;am lin,>=ate); ) void audio>source(int ;AC=94) { codec>init(); if (;AC=94 == 0) { codec>adc>control(D4/-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); //select lineOin codec>adc>control(=2GI-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); ) else if (;AC=94 == K) //selects 6ic as in ut { codec>adc>control(D4/-,0.0,-=C4,629>;4D); codec>adc>control(=2GI-,0.0,-=C4,629>;4D); ) codec>line>in>control(D4/-,62B>*CF>D2B4>G*2B,/*D;4); codec>line>in>control(=2GI-,62B>*CF>D2B4>G*2B,/*D;4); codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); codec>interru t>enable(); hoo%int(); ) void hoo%int() { intr>init(); intr>ma (9<C>2B-1M,2;B>=2B-0); intr>hoo%(6c:;<=cv2;=,9<C>2B-1M); 2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return; ) interru t void 6c:;<=cv2;=(void) { float ., 1; read>in uts($.D, $.=); // in uts not used .=(float) .D; 1 = al ha(.&beta('av,en(+, ',., f/fs, $@); 1D = 1= = (short) 1; 'rite>out uts(1D,1=);

) void read>in uts(short (.=, short (.D) { codec.u = 69:;<>=4*+(0); //read JKObit number (.== codec.cQ1S; (.D= codec.cQ0S; ) void 'rite>out uts (short 1=, short 1D) { codec.cQ1S= 1=; codec.cQ0S= 1D; 69:;<>H=2-4(0,codec.u); ) float 'av,en(int +., float (', float *, float /, int (@) { float 1, c=+.(/; 1=*('Q(@S; (@ = @'ra (+.O1, (int) ((@&c)); return 1; ) int @'ra (int +., int @) { if (@ > +.) @ O= +&1; if (@ < 0) @ &= +.&1; return @; ) COMMENTS: In this Program we have observed that, by running the program we have heard sound which is the sum and difference of frequencies,the voice which is increasing and decreasing. Ring modulation is a signal-processing effect in electronics, an implementation of am litude modulation or fre@uenc1 mi.in,, performed by multiplying two signals, where one is typically a sineO'ave or another simple waveform. It is referred to as "ring" modulation because the analo, circuit of diodes originally used to implement this technique took the shape of a ring. Q1S This circuit is similar to a brid,e rectifier, e cept that instead of the diodes facing "left" or "right", they go "clockwise" or "anti-clockwise". ! ring modulator is an effects unit working on this principle. The carrier, which is !", at a given time, makes one pair of diodes conduct, and reverse-biases the other pair. The conducting pair carry the signal from the left transformer secondary to the primary of the transformer at the right. If the left carrier terminal is positive, the top and bottom diodes conduct. If that terminal is negative, then the "side" diodes conduct, but create a polarity inversion between the transformers. This action is much like that of a #P#T switch wired for reversing connections. LAB 4 REPORT: BAND-STOP FILTER (NOTC FILTER!: 2n si,nal rocessin,, a "a$)84%'6 3&/%0( or "a$)8(0;0.%&'$ 3&/%0( is a filter that asses most

fre@uencies unaltered, but attenuates those in a s ecific ran,e to ver1 lo' levels. 2t is the o osite of a bandO ass filter. * $'%.1 3&/%0( is a bandOsto filter 'ith a narro' sto band (hi,h X factor).
#include <stdlib.h> #include <stdio.h> #include <strin,.h> #include <6cbs drv.h> #include <9ommon.h> #include <2ntr.h> #include <:oard.h> #include <9odec.h> #include <6cbs .h> #include <mathf.h> float coeffQK0S,.QK0S; //coeff arra1 holds /2= filter coeffs int Border; //. arra1 holds ast in ut sam les void hoo%int(void); interru t void 6c:;<=cv2;=(void); int main() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; int sam le=ate,*ctual>;am lin,>=ate; /( :andO;to /ilter 9oefficients 9ut /rom 6*-D*: := 9olumns 1 throu,h 8 O0.00J3 0.0000 0.0K13 0.0000 O0.03K1 0.0000 0.17KM 9olumns 3 throu,h 1L 0.0000 0.30J1 0.0000 0.17KM 0.0000 O0.03K1 0.0000 9olumns 1M throu,h 18 0.0K13 0.0000 O0.00J3 (/ coeffQ0S = 0.0000; //Iere are the 18 coefficients corres ondin, coeffQ1S = O0.00M0 ; // to a 17thOorder /2= :and ;to /2= filter oeffQKS = 0.0000; ///2= filter obtained usin, 6*-D*: /2=1 coeffQJS = 0.0J1J; ///s = 3 %Iz, sto band bet'een 1.7 %Iz and coeffQLS = 0.0000; //K.L %Iz. coeffQMS = O0.0PJP; coeffQ7S = 0.0000; coeffQ8S = 0.178K; coeffQ3S = 0.0000; coeffQPS = 0.3010; coeffQ10S = 0.0000; coeffQ11S = 0.178K; coeffQ1KS = 0.0000; coeffQ1JS = O0.0PJP; coeffQ1LS = 0.0J1J; coeffQ1MS = 0.0000; coeffQ17S = O0.00M0; coeffQ18S = 0.0000;

/( 2nitialize 456(/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); /( A en 69:;<(/ mcbs >drv>init(); //initialize 6c:;< driver, allocates memor1 for the device handles dev=mcbs >o en(0); //dev is the handle to control the 6c:;< if(dev==BCDD) { rintf(!4rror A enin, 69:;< 0?n!); return(4==A=); ) /( 9onfi,ure 6c:;<(/ memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); 6cbs 9onfi,.loo bac% =/*D;4; 6cbs 9onfi,.t..u date =-=C4; mcbs 9onfi,.t..cloc%>mode =9DE>6A+4>4F-; mcbs 9onfi,.t..frame>len,th1 =0; mcbs 9onfi,.t..'ord>len,th1 =HA=+>D4BG-I>JK; 6cbs 9onfi,.r..u date =-=C4; mcbs 9onfi,.r..cloc%>mode =9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 =0; mcbs 9onfi,.r..'ord>len,th1 =HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); //confi,uration adTustments 69:;<>4B*:D4(0,69:;<>:A-I); //6c:;< is activated /( 9onfi,ure 9A+49(/ codec>init(); /( */+ 0.0d: (min) ,ain, turn A// K0d: mic ,ain, sel(D/=)D2B4 in ut (/ /( ;et codec for stereo mode of o eration (/ codec>adc>control(D4/-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); codec>adc>control(=2GI-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); /( 6C-4(D/=)D2B4 in ut to !+;< :1 ass <ath! b1 settin, mute s'itch to -=C4 (/ codec>line>in>control(D4/-,62B>*CF>D2B4>G*2B,-=C4); codec>line>in>control(=2GI-,62B>*CF>D2B4>G*2B,-=C4); /( +/* 0.0d: attenuation, do not mute +*9 out uts (/ codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); sam le=ate=3000; *ctual>;am lin,>=ate = codec>chan,e>sam le>rate(sam le=ate,-=C4); /( set to the closest allo'ed rate (/ rintf(!-he actual sam lin, rate is = #d?n!,*ctual>;am lin,>=ate); hoo%int(); codec>interru t>enable(); /( codec ,enerates interru ts 'hen data are received in the +== (/ /( 6ain Doo , 'ait for 2nterru t(/ Border = 17; 'hile(1) { ) ) void hoo%int()

{ /( an interru t is assi,ned to +== event of the serial ort then, the interru t 'ill branch to 2;< (/ intr>init(); /( initialize 2;-< 'ith the address of vec>table. <lacin, the base address of the vector table in 2;-< (/ intr>ma (9<C>2B-1M,2;B>=2B-0); /( ma 9<C>2B-1M to +== interru t (/ intr>hoo%(6c:;<=cv2;=,9<C>2B-1M); /( connect 2;= to the 9<C>2B-1M (/ 2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return; ) interru t void 6c:;<=cv2;=(void) { int intsam ,i; float floatsam ,sum; intsam =69:;<>=4*+(0); //read from 9A+49Ys data receive re,ister (+==) intsam = (intsam >>17); // ;hift ri,ht channel data do'n to bottom 17 bits if(intsam $ 0.3000) intsam = intsam N 0.ffff0000; //;i,n e.tend ri,ht channel data floatsam = (float) intsam ; //9onvert ri,ht channel to floatin, oint for(i=Border; i >= 0;iOO) { .QiS=.QiO1S; ) .Q0S = floatsam ; sum = 0; for(i=0;i<=Border;i&&) //<erform /2= filterin, (convolution) { sum=sum&.QiS(coeffQiS; ) intsam = (int) sum; //9onvert result bac% to inte,er form intsam = intsam << 17; //;hift result bac% into =i,ht 9hannel osition 'hile //zeroin, the Deft 9hannel osition 69:;<>H=2-4(0,intsam ); //;end to 9A+49 (ri,ht channel onl1) ) BAND PASS FILTER: * "a$)86a44 3&/%0( is a device that asses fre@uencies 'ithin a certain ran,e and reTects (attenuates) fre@uencies outside that ran,e. #include <stdlib.h> #include <stdio.h> #include <strin,.h> #include <6cbs drv.h> #include <9ommon.h> #include <2ntr.h> #include <:oard.h> #include <9odec.h> #include <6cbs .h> #include <mathf.h>

float coeffQK0S,.QK0S; //coeff arra1 holds /2= filter coeffs int Border; //. arra1 holds ast in ut sam les void hoo%int(void); interru t void 6c:;<=cv2;=(void); int main() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; int sam le=ate,*ctual>;am lin,>=ate; /( :andO;to /ilter 9oefficients 9ut /rom 6*-D*: := 9olumns 1 throu,h 8 O0.00J3 0.0000 0.0K13 0.0000 O0.03K1 0.0000 0.17KM 9olumns 3 throu,h 1L 0.0000 0.30J1 0.0000 0.17KM 0.0000 O0.03K1 0.0000 9olumns 1M throu,h 18 0.0K13 0.0000 O0.00J3 (/ coeffQ0S = 0.00KM; coeffQ1S = 0.0071 ; coeffQKS = O0.0171; coeffQJS = O0.0JMJ; coeffQLS = 0.07L1; coeffQMS = 0.0PPM; coeffQ7S = O0.1JM8; coeffQ8S = O0.17ML; coeffQ3S = 0.13KK; coeffQPS = 0.13KK; coeffQ10S = O0.17ML; coeffQ11S = O0.1JM8; coeffQ1KS = 0.0PPM; coeffQ1JS = 0.07L1; coeffQ1LS = O0.0JMJ; coeffQ1MS = O0.0171; coeffQ17S = 0.0071; coeffQ18S = 0.00KM; /( 2nitialize 456 (/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); /( A en 69:;<(/ mcbs >drv>init(); //initialize 6c:;< driver, allocates memor1 for the device handles dev=mcbs >o en(0); //dev is the handle to control the 6c:;< if(dev==BCDD) { rintf(!4rror A enin, 69:;< 0?n!); return(4==A=); ) /( 9onfi,ure 6c:;<(/ memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); mcbs 9onfi,.loo bac% =/*D;4;

mcbs 9onfi,.t..u date =-=C4; mcbs 9onfi,.t..cloc%>mode =9DE>6A+4>4F-; mcbs 9onfi,.t..frame>len,th1 =0; mcbs 9onfi,.t..'ord>len,th1 =HA=+>D4BG-I>JK; mcbs 9onfi,.r..u date =-=C4; mcbs 9onfi,.r..cloc%>mode =9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 =0; mcbs 9onfi,.r..'ord>len,th1 =HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); //confi,uration adTustments 69:;<>4B*:D4(0,69:;<>:A-I); //6c:;< is activated /(9onfi,ure 9A+49(/ codec>init(); /( */+ 0.0d: (min) ,ain, turn A// K0d: mic ,ain, sel(D/=)D2B4 in ut (/ /( ;et codec for stereo mode of o eration (/ codec>adc>control(D4/-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); codec>adc>control(=2GI-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); /( 6C-4(D/=)D2B4 in ut to !+;< :1 ass <ath! b1 settin, mute s'itch to -=C4 (/ codec>line>in>control(D4/-,62B>*CF>D2B4>G*2B,-=C4); codec>line>in>control(=2GI-,62B>*CF>D2B4>G*2B,-=C4); /( +/* 0.0d: attenuation, do not mute +*9 out uts (/ codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); sam le=ate=3000; *ctual>;am lin,>=ate = codec>chan,e>sam le>rate(sam le=ate,-=C4); /( set to the closest allo'ed rate (/ rintf(!-he actual sam lin, rate is = #d?n!,*ctual>;am lin,>=ate); hoo%int(); codec>interru t>enable(); /( codec ,enerates interru ts 'hen data are received in the +== (/ /( 6ain Doo , 'ait for 2nterru t (/ Border = 17; 'hile(1) { ) ) void hoo%int() { intr>init(); /( initialize 2;-< 'ith the address of vec>table. <lacin, the base address of the vector table in 2;-< (/ intr>ma (9<C>2B-1M,2;B>=2B-0); /( ma 9<C>2B-1M to +== interru t (/ intr>hoo%(6c:;<=cv2;=,9<C>2B-1M); /( connect 2;= to the 9<C>2B-1M (/ 2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return; ) interru t void 6c:;<=cv2;=(void) { int intsam ,i; float floatsam ,sum; intsam =69:;<>=4*+(0); /( read from 9A+49Ys data receive re,ister (+==) (/ intsam = (intsam >>17); /( ;hift ri,ht channel data do'n to bottom 17 bits (/

if(intsam $ 0.3000) intsam = intsam N 0.ffff0000; /( ;i,n e.tend ri,ht channel data(/ floatsam = (float) intsam ; /( 9onvert ri,ht channel to floatin, oint(/ for(i=Border; i >= 0;iOO) /( C date ast in ut sam le arra1, 'here(/ { /( -his timeOconsumin, loo could be (/ .QiS=.QiO1S; /( eliminated if circular bufferin, 'ere(/ ) /( to be em lo1ed.(/ .Q0S = floatsam ; sum = 0; for(i=0;i<=Border;i&&) /( <erform /2= filterin, (convolution) (/ { sum=sum&.QiS(coeffQiS; ) intsam = (int) sum; /( 9onvert result bac% to inte,er form (/ intsam = intsam << 17; /( ;hift result bac% into =i,ht 9hannel osition 'hile zeroin, the Deft 9hannel osition (/ 69:;<>H=2-4(0,intsam ); /( ;end to 9A+49 (ri,ht channel onl1)(/ ) HIGH PASS FILTER: * 1&5186a44 3&/%0( (I</) is an electronic filter that asses hi,hOfre@uenc1 si,nals but attenuates (reduces the am litude of) si,nals 'ith fre@uencies lo'er than the cutoff fre@uenc1. -he actual amount of attenuation for each fre@uenc1 varies from filter to filter. * hi,hO ass filter is usuall1 modeled as a linear timeOinvariant s1stem. 2t is sometimes called a /'<8.#% 3&/%0( or "a448.#% 3&/%0(. Ii,hO ass filters have man1 uses, such as bloc%in, +9 from circuitr1 sensitive to nonOzero avera,e volta,es or =/ devices. -he1 can also be used in conTunction 'ith a lo'O ass filter to ma%e a band ass filter. #include <stdlib.h> #include <stdio.h> #include <strin,.h> #include <6cbs drv.h> #include <9ommon.h> #include <2ntr.h> #include <:oard.h> #include <9odec.h> #include <6cbs .h> #include <mathf.h> floatcoeffQK0S,.QK0S; //coeff arra1 holds /2= filter coeffs int Border; //. arra1 holds ast in ut sam les void hoo%int(void); interru t void 6c:;<=cv2;=(void); int main() { 6cbs >dev dev; 6cbs >confi, mcbs 9onfi,; int sam le=ate,*ctual>;am lin,>=ate; /( :andO;to /ilter 9oefficients 9ut /rom 6*-D*: := 9olumns 1 throu,h 8

O0.00J3 0.0000 0.0K13 0.0000 O0.03K1 0.0000 0.17KM 9olumns 3 throu,h 1L 0.0000 0.30J1 0.0000 0.17KM 0.0000 O0.03K1 0.0000 9olumns 1M throu,h 18 0.0K13 0.0000 O0.00J3 (/ coeffQ0S = 0.00KM; /( Iere are the 18 coefficients corres ondin,(/ coeffQ1S = 0.0071 ; /( to a 17thOorder /2= :and ;to /2= filter(/ coeffQKS = O0.0171; /( /2= filter obtained usin, 6*-D*: /2=1(/ coeffQJS = O0.0JMJ; /( /s = 3 %Iz, sto band bet'een 1.7 %Iz and K.LEIz(/ coeffQLS = 0.07L1; coeffQMS = 0.0PPM; coeffQ7S = O0.1JM8; coeffQ8S = O0.17ML; coeffQ3S = 0.13KK; coeffQPS = 0.13KK; coeffQ10S = O0.17ML; coeffQ11S = O0.1JM8; coeffQ1KS = 0.0PPM; coeffQ1JS = 0.07L1; coeffQ1LS = O0.0JMJ; coeffQ1MS = O0.0171; coeffQ17S = 0.0071; coeffQ18S = 0.00KM; /( 2nitialize 456(/ rintf(!2nitializin, 456 board?n!); evm>init(); rintf(!+one initializin, 456?n!); /( A en 69:;<(/ mcbs >drv>init(); /( initialize 6c:;< driver, allocates memor1 for the device handles (/ dev=mcbs >o en(0); /( dev is the handle to control the 6c:;< (/ if(dev==BCDD) { rintf(!4rror A enin, 69:;< 0?n!); return(4==A=); ) /( 9onfi,ure 6c:;<(/ memset($mcbs 9onfi,,0,sizeof(mcbs 9onfi,)); mcbs 9onfi,.loo bac% =/*D;4; mcbs 9onfi,.t..u date =-=C4; mcbs 9onfi,.t..cloc%>mode =9DE>6A+4>4F-; mcbs 9onfi,.t..frame>len,th1 =0; mcbs 9onfi,.t..'ord>len,th1 =HA=+>D4BG-I>JK; mcbs 9onfi,.r..u date =-=C4; mcbs 9onfi,.r..cloc%>mode =9DE>6A+4>4F-; mcbs 9onfi,.r..frame>len,th1 =0; mcbs 9onfi,.r..'ord>len,th1 =HA=+>D4BG-I>JK; mcbs >confi,(dev,$mcbs 9onfi,); /( confi,uration adTustments (/ 69:;<>4B*:D4(0,69:;<>:A-I); /( 6c:;< is activated (/

/( 9onfi,ure 9A+49(/ codec>init(); codec>adc>control(D4/-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); codec>adc>control(=2GI-,62B>*+9>2B<C->G*2B,/*D;4,D2B4>;4D); codec>line>in>control(D4/-,62B>*CF>D2B4>G*2B,-=C4); codec>line>in>control(=2GI-,62B>*CF>D2B4>G*2B,-=C4); codec>dac>control(D4/-,0.0,/*D;4); codec>dac>control(=2GI-,0.0,/*D;4); sam le=ate=3000; *ctual>;am lin,>=ate = codec>chan,e>sam le>rate(sam le=ate,-=C4); rintf(!-he actual sam lin, rate is = #d?n!,*ctual>;am lin,>=ate); hoo%int(); codec>interru t>enable(); Border = 17; 'hile(1) { ) ) void hoo%int() { intr>init(); intr>ma (9<C>2B-1M,2;B>=2B-0); intr>hoo%(6c:;<=cv2;=,9<C>2B-1M); 2B-=>4B*:D4(1M); 2B-=>GDA:*D>4B*:D4(); return; ) interru t void 6c:;<=cv2;=(void) { int intsam ,i; float floatsam ,sum; intsam =69:;<>=4*+(0); /( read from 9A+49Ys data receive re,ister (+==) (/ intsam = (intsam >>17); /( ;hift ri,ht channel data do'n to bottom 17 bits (/ if(intsam $ 0.3000) intsam = intsam N 0.ffff0000; /( ;i,n e.tend ri,ht channel data (/ floatsam = (float) intsam ; /( 9onvert ri,ht channel to floatin, oint (/ for(i=Border; i >= 0;iOO) { .QiS=.QiO1S; ) .Q0S = floatsam ; sum = 0; for(i=0;i<=Border;i&&) /( <erform /2= filterin, (convolution) (/ { sum=sum&.QiS(coeffQiS; ) intsam = (int) sum; intsam = intsam << 17; 69:;<>H=2-4(0,intsam ); )

COMMENTS: He have observed that b1 chan,in, fre@uenc1 ,am litude also chan,es and this chan,e de end on the t1 e of filter, i.e band filter,bandsto ,hi,h ass, lo' ass. but the voice difference could not observed because of hearin, intensit1. -hen 'e verified our ro,ram b1 lottin, ,ra hs on 6atlab ;oft'are and also b1 function ,enerator and oscillosco e.

Вам также может понравиться