Сравнивая 2 одномерных сигнала - PullRequest
5 голосов
/ 04 июля 2011

У меня следующая проблема: со временем у меня 2 сигнала.Они из одного источника, поэтому они должны быть одинаковыми.Я хочу проверить, действительно ли они.

Осложнения:

  • они могут быть измерены с различной частотой дискретизации
  • время начала / окончания не коррелируютИзмерение не начинается в одно и то же время и заканчивается в одно и то же время.
  • между этими двумя сигналами может быть сдвиг во времени.и статистические методы для сравнения.Может кто-нибудь опубликовать мне несколько ссылок, где я могу найти больше информации о том, как справиться с этим?

Ответы [ 3 ]

4 голосов
/ 04 июля 2011

Вы можете легко исправить фазу, просто сместив их так, чтобы их центры масс выстроились в линию. (Или, в качестве альтернативы, в области Фурье просто умножение на инверсию фазы первого коэффициента.)

Точно так же, если вы хотите выстроить изображения с учетом только частичных данных, вы можете просто выполнить взаимную корреляцию и принять максимальное значение (что снова легко сделать в области Фурье).

Это оставляет единственную сложную часть этого процесса, связанную с частотой дискретизации. Теперь, если вы априори знаете, каковы частоты дискретизации (и если они связаны рациональным числом), вы можете просто использовать sinc-интерполяцию / понижающую дискретизацию, чтобы масштабировать их до общей частоты дискретизации:

https://ccrma.stanford.edu/~jos/st/Bandlimited_Interpolation_Time_Limited_Signals.html

Если вы не знаете частоту дискретизации, возможно, вы немного облажались. Технически, вы можете попробовать просто грубое форсирование всех различных пересчетов вашего сигнала, но это может быть либо медленным, либо дать посредственные результаты.

В качестве последнего предложения, если вы просто хотите точно подобрать звуки, вы можете попробовать использовать кепстр и убедиться, что пики сигнала достаточно близки, чтобы в пределах некоторого допуска. Этот тип анализа широко используется в распознавании звука и речи, с некоторыми уточнениями, чтобы он работал немного локально. Он лучше всего работает с частотно-модулированными данными, такими как речь и музыка:

http://en.wikipedia.org/wiki/Cepstrum

3 голосов
/ 04 июля 2011

Преобразование Фурье звучит как правильный путь.

Для меня слишком много математической информации, чтобы начать здесь объяснять, поэтому, если вы действительно хотите знать, что с этим происходит (потому что я не думаю, что вы можете просто использовать FT, не понимая этого), вы должны использовать эту ссылку из MIT OpenCourseWare: http://ocw.mit.edu/courses/mathematics/18-103-fourier-analysis-theory-and-applications-spring-2004/lecture-notes/

Надеюсь, это помогло.

0 голосов
/ 04 июля 2011
  1. Если вы работаете с коробкой linux, и сигналы, которые необходимо обработать, уже записаны, вы можете попробовать использовать команду file для отображения подробностей о записи. Он дает вам частоту дискретизации, когда он вызывается в файле WAV, хотя я не уверен, в каком формате вы записываете.

  2. Если сигналы сдвинуты по времени относительно друг друга, вы можете попытаться свернуть один с дельта-функцией с увеличением задержек и затем сравнить. На MATLAB conv и all должны быть достаточно хорошими.

Это просто «грубые» попытки (почти как взлом на проблему). Могут быть алгоритмы, инвариантные к сдвигу, которые могут работать лучше.

Надеюсь, это поможет.

...