bt is a naive hardware tempo estimator. As shown in the algorithm architecture below, it instantiates large number of metronomes, each of which continuously attempts to resynchronize to peaks detected in an incoming audio stream. Each metronome is scored based on the effort required to synchronize it to a peak, averaged over time. Metronomes closer to the true tempo of the incoming stream require less effort (over time) to remain synchronized to detected peaks.
bt was built as a class project (MIT 6.375). The class focused on construction of hardware through high-level behavioral definition with Bluespec. As such, the vast majority of the implementation was written in Bluespec, except for the low-level interfacing models for ingesting an audio stream and outputting serial data.
The project proposal submitted for the class provides an informal overview of the project.
bt was implemented on a Spartan-3AN Starter Kit, with the addition of a small biasing circuit to correct the input range of the audio signal.
The following screenshot shows bt in operation. Each metronome reports its error rate. The 124-, 125-, and 126-BPM metronomes report very little error, so bt correctly estimates that the tempo is 125 BPM.