Могучие умы, осветите мне тропинку.

Дано:
— Затухающая синусоида *(t)
— Задержка tau
Получить:
— Затухающую синусоиду y(t), задержанную на tau
— Рассчитать кросс–корреляцию между * и y
— Найти задержку из функции кросс–корреляции

Я вообще в математике не силен, а, откровенно говоря, почти ноль.
Нашел на hackchina.com нужный скрипт.
Разбираюсь в матлабе:

%Частота дискретизации:
fs=5000;
%Несущая частота:
fo=200;
%Шкала времени:
t=0:1/fs:1–1/fs;
%Затухающая синусоида:
*=sin(2*pi*fo*t).*exp(–20*t);
%Задержка:
tau = 400;
%Синусоида, задержанная на tau:
y=[zeros(1,tau) *(1:length(*)–tau)];
%Кросс–корреляция двух функций
xc=xcorr(*,y);
%Расчет задержки:
[a,delay]=max(xc);
delay = delay — fs
%Отрисовка графиков
subplot(311),plot(*)
subplot(312),plot(y)
subplot(313),plot(xc(1:fs))

При таком подходе получаю абсолютно верное значение задержки delay.

Но хоть убейте, не могу понять, почему, для получения верного значения задержки, мне надо из максимального значения кросс–корреляции вычитать частоту дискретизации.
В чем, вообще, соль?

GD Star Rating
loading...

7 Responses to Не силен в математике — помогите

  1. Peels:

    Видать специфика матлаба — он выдает вектор, в котором первый компонент — кросс–корреляция с максимальным сдвигом влево, а последний — кросс–корреляция с максимальным сдвигом вправо.

    В твоем случае максимальный сдвиг в точности равен частоте fs (но это просто потому что векторы такой длины получились).
    Поэтому xc(fs) — это кросс–корреляция со сдвигом 0, а xc(fs+delay) — кросс–корреляция с правильным сдвигом.

    Попробовал в Scilab, в нем аналогичная функция corr работает по–другому и не надо было бы ничего вычитать.

  2. Suhclam:

    потому что delay — это не значение а индекс максимального значения xc. вычитая fs ты вычитаешь одну секунду(единицу времени). Функция max выдает два значения a — максимальное значение кросс–корреляции, и delay — индекс этого максимального значения.

  3. Liin:

    похоже, что мне становится ясна глубина непонимания этих процессов )

    корректно вообще при таком раскалде называть fs частотой дискретизации?
    функции заданы на интервале [0,1), а матлаб рисует график от 0 до 5000. почему так?

  4. Liin:

    пардонте.. со вторым вопрос понятно, это никакие не функции, а просто векторы.
    с первым пока нет

  5. Suhclam:

    к примеру у тебя есть датчик который 5000 раз в секунду пишет положение какой нибудь фигни. Чистота дискретизации 5 кГц или 5000. За секунду пишется 5000 значений. Делэй 400 — это 400/5000 = 0.08 секунд.

  6. Liin:

    теперь ясно, спасибо! буду дальше двигаться

  7. Suhclam:

    спрашивай

Добавить комментарий