Pitch Versus Frequency
The goal of this project is to develop a device (hardware or software) that can identify a string of my electric guitar based on the sound each string produces. The idea of a digital guitar tuner is as old as computers having sound cards, and software is readily available on-line for doing so. So I’m not asking you to re-invent the wheel, but I am looking for a guide, written by you, that can be read by a junior high or high school student explaining what is, “pitch,” and how does a computer recognize one pitch versus another. So just grabbing software from online won’t cut it. You need to explain to me precisely how it works with the aid of your own implementation.
So what I am expecting in your project? Well, that remains largely up to you and your team. I’m leaving this wide open. You could, for example, write a Matlab program that reads in an audio file from disk and simply says at the end of the file, what string it just processed. At first thought, that sounds like a bare minimum project, but let’s say you spend many, many hours iterating and iterating that program so that it becomes the most robust pitch detector ever created. Well that would be worth something. Now suppose you don’t want to spend too much time on the algorithm for robustness, but you really want to show off how you can write an good, maybe not great, algorithm that fits inside an Arduino and you build a digital tuner that turns on a unique LED for each string. Now that would be really cool too.
Maybe you want to use the really great tools provided by Matlab’s Simulink. So you develop a really great algorithm that can be done in Simulink, and then just to spike the ball, you decide to port that Simulink to an FPGA program and you implement the unique LEDs for each string idea. That would be a clear winner. And one last idea is that you buy a Raspberry Pi 3 with 4” touch display, and you connect an audio microphone, feed the PI, and write a program that draws a galvanometer on the touch display to mimic Apple’s Garage Band tuner interface. And then you package the PI with a battery inside a plastic case you printed with a 3D printer. And then just for the heck of it, you get a flatbed Inkjet printer to print your team’s mascot on the back of the box along with a thank you note made out to me.
Again, there are lots of ideas here. Ultimately, I want you to have fun with the project. As for concrete deliverables, I do want a completely online presentation similar to an Instructable that describes what pitch is, and how your software detects it. There is a sales pitch associated with this site. So this is a stand alone presentation that says here is our final product, here is what it does, and how well it does it. Feel free to include a video and audio files for this. Show snippets of software and plots of results. Whatever it is, it has to be an online presentation so that when you go to a job interview, you can just pull out your cell phone and show it off.
Separately, I’m also looking for a digital diary of your team’s collaboration. For this diary, I suggest your team set up an account on Storify, or find some other media aggregation service, but whatever service you choose, it must be open to the public. And it must document the progress of your project including things like sample data and results of early algorithm implementations. Knowing what doesn’t work, many times, is as good as knowing what does work. So feel free to document your failures as much as your successes. As long as its documented online, I’ll give you credit for the effort.
For sharing your progress with the rest of the class, I will create a list of Storify pages on Canvas that we can all use to see what everyone else is doing. And this is where things get interesting. All of your progress must be continuously documented, and this progress must be reported in such a way that all teams can follow your progress. Even if you don’t have the best project at the end, if your web pages report the most useful information to the rest of the teams, then you can expect to be rewarded for it in the final project grade. At the same time as you see other group projects evolve, you can gauge how well your team is doing. That is, you can use other team’s progress as a benchmark for how well or how poorly you are progressing.
Finally, I’m also looking for the contributions of each team member to show up in the digital diary. So you need to agree on a format for the diary that makes it clear what each member’s contribution is. A simply way to do this is to have each member make their own entries into the diary, and that when a member makes a contribution, they include their name. And because everything is online, I’m hoping you will find ways to collaborate through social media and not always through face to face contact.
So I’m sure your wondering when you should get started. Well, as soon as possible, but as a guide, I expect that you should set up your social links between members and start setting up your online resources this week. Next week, you will be busy studying for the upcoming exam, but as soon as that is over, I would hit the books (digital and physical) studying up on pitch detection. I would spend your Spring break independently studying the topic, and then as soon as you return from break, you and your team should agree on an algorithm and what you think you would like to deliver in the final presentation. So by the end of the first week after you return, you should have at least a first iteration of a pitch detector working, maybe not all the well, but at least have something that you can then spend the remaining few weeks working on. At that point, it then becomes a case of reading other teams diaries and gauging their progress with your own.
Please keep in mind that I am trying very hard to discourage teams from waiting until the last minute to throw something together. And that includes waiting until the last minute to post your digital diaries. I won’t be happy with a team that waits until dead week before to do the project. I want to see not only your final project, but also how well you support the community by sharing your insights over the course of the project.
Here is your first audio file to get started:
Here are some guidelines that I am going to use when grading the final projects. Play particular attention to 6. I’m more than willing to accept a project that focuses on data collection and creating a database of audio files that others can use to evaluate their projects. Keep in the mind that the project isn’t about developing a novel pitch detection algorithm but finding and implementing a good algorithm whether its novel or not.
1) Does the presentation accurately reflect the concept of pitch and does it differentiate pitch from frequency or tone and is the presentation appropriate for a junior high or high school student who may or may not be interested in STEM?
2) Does the proposed algorithm for identifying pitch have a high chance of success if expertly implemented? Is the description of the algorithm clearly stated and present intuitive interpretations of the necessary steps, i.e. does the presentation answer the question of how and why does the algorithm work?
3) Does the presentation adequately describe how the algorithm is being implemented by the team in their chosen hardware? Does the presentation include adequate and substantial data sets demonstrating a successful implementation of the algorithm, i.e. does the input and output of the system clearly demonstrate success and that the code is working as described.
4) Does the presentation make clear how the system described can be extended or implemented by others? Does the presentation make data, source code, circuit drawings, or other products available to others? For instance, is there a Github account for sharing source code? Are their PCB designs that I can download and print?
5) Are the contributions of individual team members clearly discernable from the rest of the group? Is there an even distribution of effort across the team? Is there continuous collaboration amongst the team? Is the online diary being kept up to date and does it thoroughly document all effort leaving out trivial tasks like basic emails back and forth between members?
6) Is the team making use of other projects’ assets and is the team contributing assets to others? Is the team properly attributing the source of assets and referencing online content or is the team plagiarizing the work of others?