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)
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/')
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')
At a minimum, your function should handle units for length, area, and mass.