Расчет функции корреляции

Захват, обработка и генерирование сигнала
Ответить
step
interested
interested
Сообщения: 8
Зарегистрирован: 14 авг 2011, 15:38
Репутация: 0
Версия LabVIEW: 2013, 2014
Контактная информация:

Расчет функции корреляции

Сообщение step »

Здравствуйте уважаемые товарищи. Помогите пожалуйста. Стоит задача произвести расчет функции корреляции сигнала самого на себя.
Есть mono (одноканальный) звуковой сигнал длительностью 1 мин. в формате .wav с частотой дискретизации 44100 кГц. Необходимо производить расчет функции корреляции по данному сигналу, при этом необходимо брать первый блок длинной 44100 отсчета (1-ая секунда записи) и считать (функцию корреляции) сам на себя (1-ая секунда записи), далее брать следующий 2 блок отсчетов такой же длины 44100 отсчета из общего сигнала (2-ая секунда записи) и считается опять с первым блоком длиной 44100 отсчета (1-ая секунда записи), затем брать следующий 3 блок отсчетов (3-ая секунда записи) и считать опять с первым блоком (1-ая секунда записи) и так далее все 60 блоков (60 сек).
Главное условие чтоб значения функции считались по блочно 1 с 1, 2 с 1, 3 с 1, 4 с 1 и т.д. до конца
Пытался считать через автокорреляцию, а также через взаимную корреляцию (подавая на оба входа одну и ту же запись), однако в обоих случаях длина реализации (блок 44100) каждый раз сдвигается и берется следующий блок по отношению к предыдущему (т.е. 1 с 1, 2 со 2, 3 с 3 и т.д.). Пытался выделить массив - первые 44100 отсчетов и все время его подавать не получилось. Может его зациклить надо?
Подскажите что делать? в какую сторону "копать"?
Заранее спасибо!
Вложения
CrossCorrelation.vi
LV 14.0 (64 bit)
(66.1 КБ) 46 скачиваний
Попытка объяснить, как необходимо чтоб считал
Попытка объяснить, как необходимо чтоб считал

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4937
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

Re: Расчет функции корреляции

Сообщение IvanLis »

Если я правильно понял, то можно сделать как-то так.
Т.е. режем массив отсчетов на кусочки и считаем их последовательно...
Снимок экрана от 2019-08-14 10-42-38.png
Untitled 1.vi
lv2014 save from 2016
(12.38 КБ) 49 скачиваний

step
interested
interested
Сообщения: 8
Зарегистрирован: 14 авг 2011, 15:38
Репутация: 0
Версия LabVIEW: 2013, 2014
Контактная информация:

Re: Расчет функции корреляции

Сообщение step »

Спасибо IvanLis. Ваш вариант решения помог.
Хотел переложить вашу идею на свою программу но что-то не получается.
Решил использовать ваш вариант.
Пытаюсь после блока CrossCorrelation VI выводить максимальное значение функции взаимной корреляции после каждого рассчитанного блока с целью его сохранения и тут выдает ошибку.
Может подскажите что не так, где моя ошибка.
Заранее спасибо!
Вложения
Untitled 1.vi
(25.36 КБ) 48 скачиваний
Ошибка.jpg

Blackman

Activity
leader
leader
Сообщения: 930
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Репутация: 0
Версия LabVIEW: 6.1,8.5,20
Контактная информация:

Re: Расчет функции корреляции

Сообщение Blackman »

Вынесите функцию закрытия файла и GEH за For Loop. Сейчас референс к файлу закрывается после первой итерации For Loop.
Проверьте, что папка D:\1 существует.

step
interested
interested
Сообщения: 8
Зарегистрирован: 14 авг 2011, 15:38
Репутация: 0
Версия LabVIEW: 2013, 2014
Контактная информация:

Re: Расчет функции корреляции

Сообщение step »

Огромное спасибо Blackman. Последовал вашему совету. Все получилось. Еще раз всем спасибо за помощь и оперативность.

Ответить

Вернуться в «Обработка сигнала»