|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
"XOR" музыкального фрагмента
Предположим, есть 2 фрагмента, приблизительно одинаковой длины. На одном из них "чистый" звук, на втором - тот же фрагмент, но с некоторой "примесью". Нужно получить "примесь", перед этим сдвинув начало второго фрагмента так, чтобы они шли в одной фазе. Если мне не изменяет память, то 2 волны, идущие в разных фазах, могут компенсировать друг друга. Есть ли у кого-нибудь идеи, через какие методы это можно осуществить? Ещё круче, если кто-то найдёт готовое решение, но это уже из области фантастики.
Пример "в картинках", что нужно получить - во вложении. Понятно, что такой "идеальной" картины не получится, но хотя-бы что-то получить из этой идеи можно. А остатки уже можно отсечь эквалайзером и фильтрами Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#2
|
|||
|
|||
Шум имеет локальные скачки (как на рисунке) или, скажем так, делает сигнал "бородатым" практически по всей его длине?
Если выбросы локальные, то со сдвигом достаточно просто. 1. Эквалайзер как вариант вот http://www.delphisources.ru/forum/sh...ad.php?t=18144. 2. Дальше считаешь амплитуду сигналов. 3. С помощью максимума кросскорреляционной функции определяешь сдвиг одного фрагмента относительно другого. По поводу получения "примеси" - если амплитуды посчитать получилось в каждый момент времени, то просто вычитаешь один сигнал из другого после смещения. Полагаю что в музыку эти примеси переводить не надо ? |
#3
|
||||
|
||||
Для примера:
Фрагменты примерно 2 такта на 175bpm, то-есть 8/175*60 = 2,7 секунд. Если их совместить, то получим точное усиление совпадающих частей. Так что будем считать, что сдвиг незначительный (но на всякий случай надо это проверять). Примесь может быть как "локальной", так и располагаться по всей длине. Интересует именно алгоритм вычитания (что для этого можно использовать), т.к. остальное можно проделать и вручную. Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#4
|
||||
|
||||
Это тебе для сведения треков надо?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
Кажется мы немного о разных вещах говорим....
1. У тебя есть сигнал, ты знаешь его АЧХ (через эквалайзер). 2. Ты можешь посчитать амплитуду сигнала на определенной частоте. 3. Далее можешь получить зависимость амплитуды сигнала для каждого момента времени, т.е. зависимость ampl(t). 4. Дальше просто вычитаешь эти числовые последовательности. Например сигнал 4 секунды с частотой 2 Гц. 9 точек 1.0 0.0 -1.0 0.0 1.0 0.0 -1.0 0.0 1.0 (чистый синус например) 1.1 0.2 -1.3 0.1 1.1 0.1 -1.2 0.0 1.1 (сигнал с шумом) одну строку из другой вычитаешь - получаешь амплитуду шума 0.1 0.2 -0.3 0.1 0.1 0.1 -0.2 0.0 0.1 Если надо считаешь АЧХ шума. P.S. Такие задачи (если не стоит четкое требование решить в дельфях) лучше делать в Matlab'e или в чем-нить типа него. |
#6
|
||||
|
||||
Цитата:
Цитата:
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
|||
|
|||
Цитата:
Ну как бы в 5 посте я тебе вроде весь алгоритм рассказал... с точки зрения математики хотя бы. Вопрос в формулах? Или в чем-то другом. У меня складывается впечатление что в формулах. |
#8
|
||||
|
||||
Да знать бы для начала, куда эти формулы подставлять... Через что можно на таком уровне со звуком работать, вот в чём вопрос.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |