High Level Design
got the idea for this project by browsing through previous years’ project
websites. Both of us play guitar and we both have a hard time keeping our
instruments in tune. (partly because we can’t tune by
ear and partly because of Ithaca’s weather). We knew that
making a guitar tuner was feasible because there are portable guitar tuners. We
figured that if we amplified the signal enough, did some hardware and software
filtering, and displayed how far off the frequency was to the user, we’d be
able to produce a tuner that could tune all six strings to within acceptable
accomplish the hardware amplification, we used a DC biasing element as well as
a non-inverting amplifier. Below is a general circuit for such a task. Note:
this is only part of the circuit we ended up using; please see Program/Hardware
Design for the complete circuit.
Blocks low frequency noise and
DC from the guitar.
Provide a DC offset (2.5V
when Vcc = 5).
Set the gain of the op-amp.
Av = 1 + R2/R3.
Blocks DC amplification.
Fig. 1: A
general circuit that amplifies AC and introduces a DC bias with a table
describing the role of each component.
A note about guitar strings
(ha): Though strings are tuned to a fundamental frequency they simultaneously
vibrate at other frequencies. The fundamental frequency is known as the first
harmonic because it is most prominent and defines the tone of the string. The
other harmonics (2nd, 3rd, etc interfere with the 1st). See the graph below
2: This is the DFT of a 16 ms sample of the input from the B-string.
Notice that all the harmonics occur at multiples of the fundamental frequency
and the second harmonic is very large.
There are also some basics
about sampling, period and frequency the reader must understand before
continuing. Frequency (f) is the inverse of period (T). The ADC can only
effectively measure inputs in terms of period using time between samples (we
would need a Fourier transform to measure frequency) thus we had to take our
target frequencies and convert them to periods by taking their inverse. Also,
the ADC samples at a finite intervals. According to the Nyquist
sampling criterion, we must sample at least at twice the highest frequency to
assure complete frequency data acquisition. Though the highest frequency we
were trying to tune to was 329Hz, the string had higher harmonics (i.e. 2 and 3
times the fundamental frequency), necessitating a sampling frequency of
something like 5000Hz or a sampling period of 0.2ms. The amount of samples can
be used as a measure of the period as shown in the table below:
Table 1: “Standard E” Tuning
String Frequency(Hz) Period(s) Samples at 5kHz (0.2ms)
1 E = 82.4069 0.0121 60.675
2 A = 110.0000 0.0091 45.45
3 D = 146.8324 0.0068 34.05
4 G = 195.9978 0.0051 25.5
5 B = 246.9417 0.0040 20.248
6 e = 329.6277 0.0030 15.169
Since the distances between
certain sampling values were small (for instance between string 6 and string 5)
we had to measure multiple periods to get higher accuracy. This is discussed in
the Program/Hardware Design section of
logical structure of the program was the following: Every 0.2 ms the device
reads the input from ADC and creates a sampled signal. The sampled signal is
then filtered with a low-pass filter specific to the frequency of the string
being tuned. Next, the program measures the period of the filtered signal by
counting ten positive-edge zero-crossings. The sum of ten periods is compared
with a target value and appropriate LEDs are lit to
indicate the string is either too high, too low, or in tune. There are five LEDs with the central LED indicating that the guitar is in
tune. If the guitar is near the correct frequency the LEDs
above and below the central LED indicate that the string is high or low
respectively. If the guitar string is not close to the correct tone then
highest and lowest LEDs are used instead.
didn’t use any IEEE, ISO, or ANSI standards. Nor did we make use of copyrighted
code, patents, and trademarks.