Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
111 / 82 / 32
Регистрация: 10.08.2014
Сообщений: 420
1

Нужно подобрать математический аппарат для определения точек вхождения сэмплов в более большом файле

23.01.2016, 18:43. Просмотров 401. Ответов 7
Метки нет (Все метки)

Здравствуйте. Помогите, пожалуйста подобрать алгоритм для нахождения точек вхождения каждого из сэмплов (они образуют массив из, скажем, 20 сэмплов) в более большом файле. Сейчас, в тестовом режиме этот файл плотно упакован и состоит из непрерывной череды из 5 сэмплов. Но не в этом суть. У беру эти массивы в программе и затем использую библиотеку alglib (решил "не изобретать колеса" и воспользоваться проверенным инструментом, чем писать самому, чувствуя, что не совсем разбираюсь) - а именно функцию кросс-корреляции alglib.corrr1dcircular(), которая одновременно является свёрткой двух сигналов (возможно, я ошибаюсь и путаюсь в ЦОС - уже давно хочу выработать её понимание, но получается её учить какими-то рывками, хотя с помощью этой программы и хочу получить хоть какие-то практические навыки - она должна помочь мне в этом)... Так вот. Мне хотелось бы получать для каждого сэмпла не просто наибольшую сумму произведений, а что-то вроде нормализованной вероятности (от 0 до 1) того, что сэмпл находится в этой точке. Если есть функции в alglib или в других библиотеках, с помощью которых можно этого достичь, подскажите. Я перечитываю Сато. Но для уверенности решил спросить у более опытных людей.

Почему нужна именно нормализованная вероятность... Потому что иначе за цикл будут определены и выведены в результат все сэмплы, имеющиеся в массиве сэмплов. Даже те сэмплы, которых в исследуемом сигнале нет, но у которых просто максимальная корреляция в какой-то из точек сигнала.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2016, 18:43
Ответы с готовыми решениями:

Реализовать возможность поиска слова в большом файле (1 ГБ и более), с помощью BackgroundWorkera
Задание такое - реализовать возможность поиска слова в большом файле (1 ГБ и более), с помощью...

Математический аппарат сравнения функций
Добрый день, помогите пожалуйста может литература. Нужно сравнить зависимости, есть ли мат. аппарат...

Процедура для определения вхождения символа в строку
я составил такую процедуру и программу procedure TForm1.btn1Click(Sender: TObject); var ...

Написать функцию для определения вхождения в строку слова
Дана строка символов. Написать функцию для определения входят ли в эту строку слова, с количеством...

7
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
23.01.2016, 20:46 2
Да, тяжёлая задача. Сразу несколько вопросов:
У сэмпла постоянная составляющая=0?
Есть уверенность, что в исходном файле не может появиться ситуация: сэмпл + постоянная составляющая?
Амплитуда сэмпла = амплитуде сэмпла в большом файле?
Если ответ хотя бы на один вопрос "Нет", то о получении нормализованной вероятности с помощью взаимной корреляции можно забыть
1
111 / 82 / 32
Регистрация: 10.08.2014
Сообщений: 420
23.01.2016, 20:56  [ТС] 3
Возможно, я примерно понимаю, о чём Вы. Амплитуда - да, один к одному. Но все значения положительны. Это оцифровка wav файла.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
23.01.2016, 21:11 4
Цитата Сообщение от baliar Посмотреть сообщение
Это оцифровка wav файла.
??? Значит Вы просто не умеете переводить значения из wav в нормальный вид :-)
Сигналы то принципиально знакопеременные, неважно, что они в файле хранятся как положительные...
Предположим есть фрагмент: сэмпл + половина периода частоты 20 Гц - это испортит всю картину!
А коррелировать - с массивом сэмплов - это вообще мысль плохая!
Корреляция каждый раз только с одним сэмплом!
В принципе, если не пользоваться стандартной программой корреляции, а написать свою на основе БПФ - то не так и долго всё будет.
И еще вопрос: исходный файл состоит только из последовательности заранее известных сэмплов?
1
111 / 82 / 32
Регистрация: 10.08.2014
Сообщений: 420
23.01.2016, 21:19  [ТС] 5
Кхм... Такой наивный вопрос. А поможет, если ввести отрицательную постоянную и искусственно сделать и сигнал и сэмплы симметричными оси Х? a[i], a[i+1]=-a[i]; a[i+2], a[i+3]=-a[i+2] и т.д.

Добавлено через 4 минуты
Цитата Сообщение от A_Santik Посмотреть сообщение
И еще вопрос: исходный файл состоит только из последовательности заранее известных сэмплов?
Нет. В общем в сигнале может быть что угодно и шумы тоже (хотя необязательно).
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
23.01.2016, 21:33 6
Цитата Сообщение от baliar Посмотреть сообщение
Кхм... Такой наивный вопрос. А поможет, если ввести отрицательную постоянную и искусственно сделать и сигнал и сэмплы симметричными оси Х? a[i], a[i+1]=-a[i]; a[i+2], a[i+3]=-a[i+2] и т.д.
Не, это не так!
А вот я глянул программу - "wav 16 бит" - нормально хранит данные, как 2 байта целое (т.е. со знаком)
Для 8-битных wav - там 127 надо отнимать, кажется. (это проще спецификацию глянуть на wav-файл)
0
111 / 82 / 32
Регистрация: 10.08.2014
Сообщений: 420
24.01.2016, 01:01  [ТС] 7
В двоичном машинном коде за знак отвечает старший бит. Ещё раз гляну на преобразование wav. Его пример я брал на stackoverflow. Никаких замечаний по этому поводу там не заметил.

Добавлено через 1 час 52 минуты
А каким образом используются вейвлеты? Они ведь как раз для этого. И какой именно вейвлет применить...

Добавлено через 32 минуты
По поводу знака данных... Нашёл на хабре и в википедии, например, такое:
Кликните здесь для просмотра всего текста
There are some inconsistencies in the WAV format: for example, 8-bit data is unsigned while 16-bit data is signed, and many chunks duplicate information found in other chunks.
Т.е. для 8-битной оцифровки используется беззнаковое число, далее число со знаком. У меня стандартные 16 бит. Немного странно, что на stackoverflow не задались этим вопросом.

Добавлено через 13 минут
И ведь странно, корреляция - это косинус, величина показывающая расхождение двух векторов. Она меньше 1. Именно этого я от неё и ожидал. А в alglib - это свёртка, сумма произведений.
0
148 / 129 / 18
Регистрация: 29.04.2015
Сообщений: 626
24.01.2016, 12:51 8
Цитата Сообщение от baliar Посмотреть сообщение
И ведь странно, корреляция - это косинус, величина показывающая расхождение двух векторов. Она меньше 1.
Это неправильное представление! Косинус получится если ты коррелируешь 2 синуса одинаковой частоты. И значение - любое (в зависимости от амплитуды синуса). Корреляция в твоём случае будет больше похожа на дельта-функцию в момент прихода нужного сэмпла.
Корреляция - это свертка с перевёрнутым "вверх ногами" вектором.
Советую сделать корреляцию сдвинутых во времени ЛЧМ-сигналов. (можно взять 2 сэмпла одинаковых, но разнесённых во времени)

Добавлено через 5 часов 44 минуты
Ну или тупо взять автокорреляцию сэмпла...
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.01.2016, 12:51

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Блок схема для Pascal программы определения вхождения одного массива в другой
Блок схему нужна для курсача( :cry: program aa; const p=20; m=5; var a:array of integer;...

Написать программу для определения взаимного расположения точек с координатами X1, Y1 и X2, Y2
Написать программу для определения взаимного расположения точек с координатами X1, Y1 и X2, Y2 по...

Формула (модель) флэта или математический метод его определения
Уважаемые математики! На изображениях приведены стандартные рыночные ситуации – флэт и тренд....

Усреднение по заданному количеству точек в большом массиве
День добрый! Есть массив больше млн точек. Необходимо осреднить по заданному кол-ву точек этот...

нужно подобрать сервер для 1с.
:wall: помогите!!! в общем, нужно подобрать сервер для 1с. хочу сделать терминальный...

Контейнер ADPCM-сэмплов для STM32 ?
Прошу совета опытных. Столкнулся с ситуацией, в которой нужно подправить sound-файл, являющийся...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.