<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5//EN" "http://cnx.rice.edu/technology/cnxml/schema/dtd/0.5/cnxml_plain.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:bib="http://bibtexml.sf.net/" id="id10135325">
<name>Match Recognition System</name>
<metadata>
  <md:version>1.2</md:version>
  <md:created>2006/12/19 14:01:07 US/Central</md:created>
  <md:revised>2007/01/08 11:22:24.972 US/Central</md:revised>
  <md:authorlist>
      <md:author id="dremos">
      <md:firstname>Andre</md:firstname>
      <md:othername>T.</md:othername>
      <md:surname>Mosley</md:surname>
      <md:email>dremos@rice.edu</md:email>
    </md:author>
      <md:author id="yjlee">
      <md:firstname>Yu-Heng</md:firstname>
      <md:othername>Jaret</md:othername>
      <md:surname>Lee</md:surname>
      <md:email>jaret.lee@rice.edu</md:email>
    </md:author>
      <md:author id="jbroadway">
      <md:firstname>John</md:firstname>
      
      <md:surname>Broadway</md:surname>
      <md:email>jtb5020@rice.edu</md:email>
    </md:author>
      <md:author id="ptwang">
      <md:firstname>Po</md:firstname>
      <md:othername>T</md:othername>
      <md:surname>Wang</md:surname>
      <md:email>ptwang@rice.edu</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="dremos">
      <md:firstname>Andre</md:firstname>
      <md:othername>T.</md:othername>
      <md:surname>Mosley</md:surname>
      <md:email>dremos@rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="yjlee">
      <md:firstname>Yu-Heng</md:firstname>
      <md:othername>Jaret</md:othername>
      <md:surname>Lee</md:surname>
      <md:email>jaret.lee@rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="jbroadway">
      <md:firstname>John</md:firstname>
      
      <md:surname>Broadway</md:surname>
      <md:email>jtb5020@rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="ptwang">
      <md:firstname>Po</md:firstname>
      <md:othername>T</md:othername>
      <md:surname>Wang</md:surname>
      <md:email>ptwang@rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="richb">
      <md:firstname>Richard</md:firstname>
      <md:othername>G.</md:othername>
      <md:surname>Baraniuk</md:surname>
      <md:email>richb@rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="Markpanzee">
      <md:firstname>Mark</md:firstname>
      <md:othername>A.</md:othername>
      <md:surname>Davenport</md:surname>
      <md:email>md@rice.edu</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>Match Recognition System</md:keyword>
  </md:keywordlist>

  <md:abstract>This module explains how we implemented the matched filter phase of our audio recognition system.</md:abstract>
</metadata>
<content>
<para id="id10694069">To implement the Match Recognition System for
our program, we used a basic matched filter that compares the input
song’s fingerprint to each fingerprint in the database. Because we
are using compact representations for each song, the matched filter
will not take an insane amount of time to complete. In order to
improve the speed of the algorithm even more, we decided to
implement the filter in the frequency domain since it is involves
simple matrix multiplication.</para>
<para id="id10686558"/>
<para id="id10565604">First of all, the input song goes through the
Audio Fingerprint Generator so that we have its compact
representation. Next, our system normalizes this representation,
takes its FFT, and compares it to the normalized FFT of each of the
fingerprints in the database. At this point the fingerprints are
all in the frequency domain, so the only thing left to do to
implement the matched filter is to multiply the input song’s
representation with each one of the database representations. This
process requires zero-padding the shorter signal in the comparison
so that the two matrices are the same dimensions before actual
multiplication. The max(max()) function in Matlab takes the maximum
value in the matrix, which corresponds to the matched filter
“spike”. The database signal that returns the largest spike when
compared to the input signal is our most probable match and the
database index of this matched song is used to index the name of
that corresponding song from the array that holds the names of all
database songs. Our system also does this process for the second
highest match. The output of the Match Recognition System is just
the two most probable match titles, and their corresponding spike
values. This allows users to see the confidence level for each
match.</para>
<figure id="id10678596">
<media type="image/png" src="Graphic1.png"/>
</figure>
</content>
</document>
