2014-12-31 3 views
2

У меня есть два сигнала, которые я хочу синхронизировать (найти временную задержку). я уже сделал это с помощью функции «ККС» и нахождения максимума, после этого поста:Как синхронизировать сигналы с использованием взаимной корреляции и БПФ в R?

Finding lag at which cross correlation is maximum ccf()

я, хотя я должен был бы сделать что-то вроде

fft1 <- fft(my.vector1) 
fft2 <- fft(my.vector2) 
ccf(fft1, fft2, lag.max = 6000, plot = FALSE) 

Однако для повышения эффективности причины, я хотел бы реализовать кросс-корреляцию с быстрым преобразованием Фурье (FFT), как это было предложено в других сообщениях. У меня есть много тестов с 300 000 отсчетов (1,5 минуты, отснятых на частоте 2000 Гц), и максимальное отставание от -3 до 3 секунд.

Любые подсказки о том, как это сделать в R?

Я знаю функции fft и ccf, но не знаю, как их интегрировать.

+0

Если вы не добавите какой-либо конкретный вопрос программирования, вопрос привязан к мусорному двору. –

ответ

1

взаимной корреляции двух комплексных функций равна свертке одной функции и комплексно сопряженное с другой:

Cross correlation and convolution

В качестве функции convolve в R уже использует быстрое преобразование Фурье, все, нужно сделать, это:

convolve(my.vector1, my.vector2) 

максимальная задержка может быть найдена:

which.max(convolve(my.vector1,my.vector2))