<< Chapter < Page Chapter >> Page >

Grading

This is a two-week lab. Your prelab is due a week after the quiz for Lab 4, and the quizzing occurs two weeks after thequiz for Lab 4.

Grading for this lab will be a bit different from past labs:

  • 1 point: Prelab
  • 2 points: Working code, implemented from scratch in assembly language or C.
  • 5 points: Optimization. These points will be assigned based on your cycle counts and the optimizations you have made.
  • 2 points: Oral quiz.

Appendix a:

fsk.c

SINE.asm

C_ASM.bat

1 /* ECE320, Lab 5, Reference Implementation (Non-Optimized) */ 2 /* Michael Frutiger 2/24/04 */ 3 4 #include "v:/ece320/54x/dspclib/core.h" /* Declarations for core file */ 5 6 main() 7 { 8 int *Rcvptr,*Xmitptr; /* pointers to Xmit & Rcv Bufs */ 9 int r1,r2; // temp random bit storage 10 int symbol; // 0 for [00], 1 for [01], 2 for [10], 3 for [11] 11 int n; // dummy variable 12 13 int freqs[4] = {9, 13, 21, 17}; // 32*freqs 14 int phase[32]; 15 int output[64]; // temp output storage 16 17 18 // Initial PN generator register contents 19 int seed = 1; 20 21 // Initial phase 22 int prev_phase = 0; 23 24 25 while( 1 ) 26 { 27 /* Wait for a new block of samples */ 28 WaitAudio(&Rcvptr,&Xmitptr); 29 30 // Get next two random bits 31 r1 = randbit( &seed ); 32 r2 = randbit( &seed ); 33 // Convert 2 bit binary number to decimal 34 symbol = series2parallel(r1,r2); 35 36 for (n=0; n<32; n++) 37 { 38 phase[n] = ( freqs[symbol]*n + prev_phase ) % 64; // get into 0 to 64 range 39 if (phase[n] > 32) phase[n]=phase[n]-64; // get into -32 to 32 range 40 phase[n] = phase[n] * 1024; // 1024=2^15*1/32 41 // [-2^15 2^15] range for use with 42 // SINE.asm 43 } 44 sine(&phase[0], &output[0], 32); // compute SINE, put result in output[0 - 31] 45 prev_phase = ( freqs[symbol]*32 + prev_phase ) % 64; // save current phase offset 46 47 // Get next two random bits 48 r1 = randbit( &seed ); 49 r2 = randbit( &seed ); 50 // Convert 2 bit binary number to decimal 51 symbol = series2parallel(r1,r2); 52 53 for (n=0; n<32; n++) 54 { 55 phase[n] = ( freqs[symbol]*n + prev_phase ) % 64; 56 if (phase[n] > 32) phase[n]=phase[n]-64; 57 phase[n] = phase[n] * 1024; 58 } 59 sine(&phase[0], &output[32], 32); 60 prev_phase = ( freqs[symbol]*32 + prev_phase ) % 64; 61 62 63 // Transfer the two symbols to transmit buffer 64 for (n=0; n<64; n++) 65 { 66 Xmitptr[6*n] = output[n]; 67 } 68 69 } 70 } 71 72 73 // Converts 2 bit binary number (r2r1) to decimal 74 int series2parallel(int r2, int r1) 75 { 76 if ((r2==0)&&(r1==0)) return 0; 77 else if ((r2==0)&&(r1==1)) return 1; 78 else if ((r2==1)&&(r1==0)) return 2; 79 else return 3; 80 } 81 82 //Returns as an integer a random bit, based on the 15 low-significance bits in iseed (which is 83 //modified for the next call). 84 int randbit(unsigned int *iseed) 85 { 86 unsigned int newbit; // The accumulated XORs. 87 newbit = (*iseed >> 14) & 1 ^ (*iseed >> 13) & 1; // XOR bit 15 and bit 14 88 // Leftshift the seed and put the result of the XORs in its bit 1. 89 *iseed=(*iseed << 1) | newbit; 90 return (int) newbit; 91 }

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Ece 320 spring 2004. OpenStax CNX. Aug 24, 2004 Download for free at http://cnx.org/content/col10225/1.12
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Ece 320 spring 2004' conversation and receive update notifications?

Ask