Не ожидал такого количества ответов. Ну и наводящие вопросы тоже весьма помогли.
Цитата
. То есть, нужно взять ожидаемый сигнал и его ортогональное дополнение. Загрузить это в FIR. И работать с приемлемой децимацией (чтобы ресурса хватило и пик корреляции не прозевать).
Но меня смущало что сам сигнал весьма низкого качества. Из наиболее подходящего прочитал несколько пейперов по распознанию пения птиц, но там задача сложнее (определение вида птицы).
Я тут думал как это проще сделать, и вот придумал ещё один метод. Ниже опишу идею, может кому пригодится.
1. Берём спектр БПФ, смотрим где примерно шумы.
2. Преобразуем амплитуды спектра в "бинарные" значения: 0, если амплитуда меньше шумов и 1 - если больше.
3. Упаковываем 16 отсчётов спектра в 1 16-битное слово (экономия памяти).
4. Ведём запись такой упакованной спектрограммы. Например, спектрограмма 32 измерений по 512 частотным "бинам" будет занимать 32*512/16=1024 слова.
Теперь имеется нечто вроде чёрно-белой картинки спектрограммы размером 32*512, которая занимает 2048 байт (1024 слова) Без упаковки это 32768 байт (16384 слова). Далее:
5. Строю гистограмму по каждой строке текущей спектрограммы простым сложением HIST[i] = SPECTROGRAM[i,0]+SPECTROGRAM[i,1]+...+SPECTROGRAM[i,31]. i=0..511. Получается такой график: если частота не меняется, на гистограмме начинает расти пик и достигает значения 32 (т.е. равен длине "окна" спектрограммы). Если частота начинает меняться, например возрастать, то правый склон пика начинает подниматься, а сам пик постепенно уходит в ноль.
Вот здесь на картинке показан пример: частота начала расти вверх. Второй пик справа - это какая-то помеха самого компьютерного звукового входа.
Так в принципе можно распознать, конечно есть исключительные случаи, и как оптимально подобрать длину спектрограммы и амплитуду, больше которой значения считать за 1.
p.s. всем спасибо за ответы, fir тоже посмотрю. Что применить ещё не решил