Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Worldmaster
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,263

Найти временную разницу между сигналами

17.03.2023, 09:01. Показов 413. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Имеется два сигнала. Необходимо найти величину задержки одного от другого.

Подсказали что необходимо использовать автокорреляционную функцию.

Язык особой разницу не имеет поэтому привожу тот код что нашел:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public static double[] CrossCorrelation(double[] signal1, double[] signal2)
        {
            int n = signal1.Length;
            double[] result = new double[n];
 
            for (int lag = 0; lag < n; lag++)
            {
                double sum = 0;
                for (int i = 0; i < n; i++)
                {
                    int j = i + lag;
                    if (j < n)
                    {
                        sum += signal1[i] * signal2[j];
                    }
                }
                result[lag] = sum;
            }
            return result;
        }
Есть еще второй вариант с помощью разложения Фурье.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public static double[] CalculateCorrelationFourier(double[] x, double[] y)
        {
            if (x.Length != y.Length)
            {
                throw new ArgumentException("The arrays must have the same length.");
            }
 
            int n = x.Length;
 
            // Вычисляем DFT каждого массива
            Complex[] X = new Complex[n];
            Complex[] Y = new Complex[n];
            for (int i = 0; i < n; i++)
            {
                X[i] = new Complex(x[i], 0.0);
                Y[i] = new Complex(y[i], 0.0);
            }
            Fourier.Forward(X);
            Fourier.Forward(X); 
 
            // Вычисляем сопряженное произведение их DFT
            Complex[] XY = new Complex[n];
            for (int i = 0; i < n; i++)
            {
                XY[i] = Complex.Conjugate(X[i]) * Y[i];
            }
            Fourier.Inverse(XY); 
 
            // Вычисляем коэффициент корреляции
            double[] correlation = new double[n];
            for (int i = 0; i < n; i++)
            {
                correlation[i] = XY[i].Real / (n * Math.Sqrt(X[i].MagnitudeSquared()) * Math.Sqrt(Y[i].MagnitudeSquared()));
            }
 
            return correlation;
        }
Но оба эти варианты не внушают доверия и наверняка написаны с ошибками.
Тестирую на вариантах данных:

Code
1
2
3
4
5
6
7
8
9
double[] xv = new double[] { 1, 2, 3, 4, 5, 6 };
double[] yv = new double[] { 1, 2, 3, 4, 5, 6 };
 
double[] corr1 = MathHelper.CrossCorrelation(xv, yv);
// результат 70 55 40 26 14 5 
 
 
double[] corr = MathHelper.CalculateCorrelationFourier(xv, yv);
// результат   ∞ -0,170103454359943 -0,047628967220784 -0,0340206908719886 -0,0396908060173201 -0,102062072615966

И как понимать эти результаты??


Дальше я делаю сдвиг в данных и снова пересчитываю.

Code
1
2
3
4
5
6
double[] xv = new double[] { 1, 2, 3, 4, 5, 6 };
double[] yv = new double[] { 0, 1, 2, 3, 4, 5 };
 
 
// результат 1 =  70 55 40 26 14 5 
// результат 2 = ∞ -0,170103454359943 -0,047628967220784 -0,0340206908719886 -0,0396908060173201 -0,102062072615966
результаты вообще не изменились.

Есть у кого нибудь правильный пример функции?? Буду благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2023, 09:01
Ответы с готовыми решениями:

Как найти разницу между float
Как максимально быстро найти разницу между двумя числами типа float? Предположим есть 2 числа типа float, разницу между которыми надо...

Найти минимальную разницу между элементами двух массивов
Дано: два отсортированных по возрастанию массива целых неотрицательных чисел. Длина каждого массива до 8000. Каким алгоритмом можно...

Найти разницу между датами
Добрый день, подскажите, как найти разницу во времени между 2я датами tel / dat А / ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2023, 09:01
Помогаю со студенческими работами здесь

Найти разницу между датами
Имеется 2 даты. Первая &quot;дата изготовления&quot;, вторая &quot;годен до&quot;. К примеру &quot;20.05.15&quot; и &quot;26.05.15&quot;. Как вывести информацию о том,...

Найти разницу между годами
Добрый день! Как посчитать разницу между датами, преобразовав даты в числа и найти самую младшию и старшею персону с иминем ? ...

Найти разницу между массивами
Допустим есть два массива целых чисел: int n1 = {1, 12, 123, 1234}; int n2 = {1, 12, 121, 122, 123, 1234}; Числа упорядочены по...

Найти разницу между датами
Помогите понять что не так. не всегда верно выводит количество часов входные данные- количество строк;...

Найти разницу дней между датами
Доброго времени суток, уважаемые форумчане! Начал изучать MS Visual Studio 2010 C++. Стоит такая задача. Надо найти разницу дней между...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru