Re: Восстановление звука из фрагментов

From
Evgenij Masherov (2:5020/175.2)
To
Sergey Andrianov
Date
2002-07-02T15:16:33Z
Area
RU.ALGORITHMS
From: "Evgenij Masherov" <EMasherow@nsi.ru>

Sun Jun 30 2002 14:52, Sergey Andrianov wrote to Evgenij Masherov:


 SA>>>    Есть общая задача: восстановить некоторый звук (возможно, несколько
 SA>>> часов при оцифровке 44100-48000 Гц) из нескольких перекрывающихся во
 SA>>> времени фрагментов, записанных независимо, т.е. с различными амплитудой
 SA>>> и  фазой оцифровки, а также дополнительными шумами и, возможно,
 SA>>> искажениями  из-за mp3-сжатия. 
 SA>>>    Представляется, что ее можно свести к последовательности частных
 SA>>> задач: в некотором звуковом файле (PCM) найти с точностью до целого
 SA>>> смещение от начала, по которому находится некоторый его фрагмент (на
 SA>>> самом деле фрагмент взят из перекрывающейся части другого файла) с
 SA>>> измененной амплитудой фазой и добавлением некоторых шумов и искажений.
 SA>>> Далее перенормировку амплитуды и сшивку считаю тривиальными. 
 SA>>>    Насколько я представляю, решение влоб, построение функции
 SA>>> коэффициента  корреляции между файлом (длиной N) и фрагментом (длиной
 SA>>> M) в зависимости  от смещения имеет сложность N*M, и не подходит из
 SA>>> соображений  ресурсоемкости. Можно ли предложить алгоритм сложности N
 SA>>> для этой задачи?
 SA>>>    Или, может, я неправильно свел общую задачу к частной?

 EM>> Я бы пользовался именно коэффициентом корреляции, но только считал бы
 EM>> его,  используя БПФ. (Основано на соотношении между сверткой и Фурье). 

 SA>    Нельзя ли чуть поподробнее. Я представляю базовый алгоритм так:
 SA>    Цикл (внешний) по начальному смещению в звуковом файле от 0 до N-M
 SA> (О(N-M) операций)
 SA>        Нахождение коэффициента кореляции (цикл внутренний) между частью
 SA> файла по смещению и фрагментом (O(M) операций)
 SA>        Определение и запоминание экстремума к.к. и соотв. ему смещения
 SA> (мы не знаем, может звук в другом файле записан в противофазе)
 SA>    Kонец внешнего цикла.

 SA>    Итого O((N-M)*M) операций. Нельзя ли показать аналогичную схему с БПФ
 SA> (сложность которого N*log(N) или M*log(M) операций?)

 EM>> Время работы сокращается в десятки раз. Для предотврашения эффектов
 EM>> наложения не   забывать о дополнении нулями.

 SA>    В десятки раз - это как-то несерьезно. Десяток раз можно получить,
 SA> если, скажем, принудительно уменьшить N, взяв не весь файл, а его часть,
 SA> применив некое волевое ограничение. Или просто произведя
 SA> передискретизацию с 48 000 Гц до 4 800 Гц.
 SA>    Хотелось бы получить именно оценку сложности, исходя из размеров
 SA> массивов.

Основано на теореме о соответствии ПФ от свертки произведению ПФ свертываемых.
Берем два отрезка, дополняем нулями (чтобы свертка не была циклической),
считаем от них БПФ, перемножаем, обратное БПФ - и имеем корреляционную
функцию.
Время работы N*log(N).
Для 8000 точек (1 сек в обычном телефоне)
3 БПФ от 16384 точек (16384*14*(примерно 10 операций на бабочку))= 7 млн
операций
Напрямую - 8000*8000*(2 операции)=128 млн.
Примерно 1:18

Евгений Машеров АКА СанитарЖеня

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)