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

Захват, обработка и генерирование сигнала
Ответить
step
beginner
beginner
Сообщения: 12
Зарегистрирован: 14 авг 2011, 15:38
Версия LabVIEW: 2013, 2014
Благодарил (а): 2 раза
Контактная информация:

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

Сообщение 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 КБ) 135 скачиваний
Попытка объяснить, как необходимо чтоб считал
Попытка объяснить, как необходимо чтоб считал
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5461
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 27 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

Если я правильно понял, то можно сделать как-то так.
Т.е. режем массив отсчетов на кусочки и считаем их последовательно...
Снимок экрана от 2019-08-14 10-42-38.png
Untitled 1.vi
lv2014 save from 2016
(12.38 КБ) 156 скачиваний
step
beginner
beginner
Сообщения: 12
Зарегистрирован: 14 авг 2011, 15:38
Версия LabVIEW: 2013, 2014
Благодарил (а): 2 раза
Контактная информация:

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

Сообщение step »

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

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

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

Сообщение Blackman »

Вынесите функцию закрытия файла и GEH за For Loop. Сейчас референс к файлу закрывается после первой итерации For Loop.
Проверьте, что папка D:\1 существует.
step
beginner
beginner
Сообщения: 12
Зарегистрирован: 14 авг 2011, 15:38
Версия LabVIEW: 2013, 2014
Благодарил (а): 2 раза
Контактная информация:

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

Сообщение step »

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

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