То, что вы описываете, это согласованный фильтр , и все, что вам нужно, это кросс-корреляция , которая должна быть частью любой разумной библиотеки DSP. В зависимости от Выбрав архитектуру и язык процессора, вы даже сможете найти векторизованную библиотеку, которая сможет выполнять эту операцию более эффективно.
Если вы не очень заботитесь о производительности, вы можете использовать Python ...
$ python
Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> interesting_clip = [ 5, 7, 2, 1]
>>> full_stream = [ 1, 5, 7, 2, 1, 4, 3, 2, 4, 7, 1, 2, 2, 5, 1]
>>> correlation = scipy.correlate (full_stream, interesting_clip)
>>> print correlation
[56 79 55 28 41 49 44 53 73 48 28 35]
>>> for offset, value in enumerate(correlation) :
... if (value > 60) :
... print "match at position", offset, "with value of", value
...
match at position 1 with value of 79
match at position 8 with value of 73
Мой порог выше произвольно. Вы должны экспериментально определить, что подходит для вас.
Имейте в виду, что чем длиннее ваш "интересный клип", тем больше времени потребуется для вычисления корреляции. В то время как более длинные клипы помогут лучше отличить реальные матчи от несоответствий, вам, вероятно, не понадобится больше нескольких секунд.