Final Projects

Overview

The class will be divided into groups of four students. Each group will be assigned one of the three projects below. Groups may choose to trade projects with another group, or suggest their own project. All trades and project suggestions should be submitted to me for approval before Friday, 2016-04-01.

This will be a real world project. There will be no intermediate deadlines, and you are free to use any resources that you require. You can search the internet, textbooks, MATLAB documentation, etc. as needed to solve your problem, but remember to cite your sources.

The work should be distributed equally among all group members. I recommend establishing a strategic plan (i.e. who is doing what) as soon as possible. Leaving projects to the last few days will not be fun or fruitful.

Deliverables

During the final exam period, you are to deliver two items: project code and presentation.

Code
You are to deliver well-documented code files that accomplishes the tasks you have been assigned. If your project requires several files, they should be compressed into a single file.

Presentation
Each group will give a 15 minute presentation during the final exam period. Your presentation should discuss the project goals, the problems you encountered, how you solved those problems, and a demonstration of the final results. You are to deliver the presentation file used during the final exam period with your code.

Grading

Each group will be given a single combined grade based on the code and final presentation. Simply accomplishing the assigned tasks will not automatically result in an A. Code that is robust, well-documented, efficient, and contains features beyond those listed in the project description will earn an A.

Individual grades will be based on the group grade and a multiplier determined by peer evaluation. The peer evaluation multiplier will be calculated using CATME, and can either increase or decrease your individual final project grade.


kindleprint

Have you ever thought about how kindle e-readers dynamically display text? For every page, the kindle needs to determine how to display the text in a justified layout that fits the given screen and is easy to read. Your group will write a function that accepts a string and a screen width (in characters), and displays the string in a justified layout. Your function should print text that is properly spaced for any reasonable screen width. Here is an example of the function call and output:

1
2
% print for a screen width of 40 characters
kindleprint(text, 40)
At   the  far  end  of  town  where  the
Grickle-grass  grows and the wind smells
slow-and-sour   when  it  blows  and  no
birds  ever  sing excepting old crows...
is  the  Street of the Lifted Lorax. And
deep  in  the Grickle-grass, some people
say,  if  you  look  deep enough you can
still  see,  today, where the Lorax once
stood  just  as  long as it could before
somebody  lifted  the  Lorax  away. What
was  the  Lorax?  Any  why was it there?
And   why   was   it  lifted  and  taken
somewhere  from  the  far  end  of  town
where  the  Grickle-grass grows? The old
Once-ler  still  lives here. Ask him. He
knows.   You  won't  see  the  Once-ler.
Don't  knock  at  his  door. He stays in
his  Lerkim  on  top  of  his  store. He
stays  in  his  Lerkim,  cold  under the
roar,  where  he  makes  his own clothes
out   of   miff-muffered  moof.  And  on
special  dank  midnights  in  August, he
peeks  out of the shutters and sometimes
he  speaks  and  tells how the Lorax was
lifted  away. He'll tell you, perhaps...
if  you're willing to pay. On the end of
a  rope  he lets down a tin pail and you
have  to  toss  in  fifteen  cents and a
nail     and     the    shell    of    a
great-great-great-grandfather     snail.
Then  he pulls up the pail, makes a most
careful  count to see if you've paid him
the  proper  amount.  Then he hides what
you  paid  him  away  in  his Snuvv, his
secret  strange  hole  in his gruvvulous
glove.  Then  he grunts, I will call you
by  Whisper-ma-Phone,  for the secrets I
tell  you are for your ears alone. SLUPP
Down   slupps  the  Whisper-ma-Phone  to
your   ear   and   the   old  Once-ler's
whispers  are not very clear, since they
have  to  come  down through a snergelly
hose,   and  he  sounds  as  if  he  had
smallish  bees  up  his  nose.  Now I'll
tell   you,  he  says,  with  his  teeth
sounding  gray, how the Lorax got lifted
and  taken  away...  It  all started way
back...  such  a long, long time back...
Way  back in the days when the grass was
still  green  and the pond was still wet
and  the  clouds  were  still clean, and
the  song  of  the Swomee-Swans rang out
in  space... one morning, I came to this
glorious  place.  And  I  first  saw the
trees!    The    Truffula   Trees!   The
bright-colored  tufts  of  the  Truffula
Trees!  Mile  after  mile  in  the fresh
morning  breeze.  And under the trees, I
saw  Brown  Bar-ba-loots  frisking about
in   their   Bar-ba-loot  suits  as  the
played  in  the  shade  and ate Truffula
Fruits.  From  the  rippulous  pond came
the    comfortable    sound    of    the
Humming-Fish   humming  while  splashing
around.  But  those  trees! Those trees!
Those  Truffula  Trees!  All my life I'd
been  searching for trees such as these.
The   touch  of  their  tufts  was  much
softer  than  silk.  And  they  had  the
sweet  smell  of fresh butterfly milk. I
felt  a  great  leaping  of  joy  in  my
heart.  I  knew  just  what  I'd  do!  I
unloaded  my  cart. In no time at all, I
had  built  a small shop. Then I chopped
down  a Truffula Tree with one chop. And
with   great  skillful  skill  and  with
great  speedy  speed,  I  took  the soft
tuft.   And  I  knitted  a  Thneed!  The
instant   I'd   finished,   I   heard  a
ga-Zump!

shazaam

We've all been in a situation where we hear a great song, but can't think of the name or artist. Well, your start-up Shazaam aims to solve this problem by creating a program that identifies songs based on a brief sound clip. You will need to write a function that accepts a sound clip and the location of a song library, and identifies the correct song title and artist. Here is an example function call and output:

1
shazaam('query.wav','/path/to/library/')
Searching...
Match Found:
Artist - Color Out
Song - Mistaken

Your query sound clip and library can be found below.
query.wav
library.zip

layterms

Conceptualizing different units of measure is often quite difficult. What does 100 grams look like? Your group is tasked with the challenge of converting arbitrary units to something the layperson can understand. Your function should accept a string consisting of the numeric measure and the units, and should return the most appropriate conversion to a more relatable unit. For example, the string '200 yd' should return something like '200 yd is equivalent to 2 football fields.' Here is an example function call and output:

1
layterms('0.1 oz')
0.1000 oz is equivalent to 0.9116 pennies

At a minimum, your function should handle units for length, area, and mass.