Re: Восстановление звука из фрагментов
- From
- Sergey Andrianov (2:5020/1507.400)
- To
- Evgenij Masherov
- Date
- 2002-06-30T14:52:16Z
- Area
- RU.ALGORITHMS
Здравствуй, Evgenij!
Однажды 29-Jun-02 в 09:31 Evgenij Masherov (2:5020/175.2)
написал Sergey Andrianov по поводу
-=- Восстановление звука из фрагментов -=-
SA>> Есть общая задача: восстановить некоторый звук (возможно, несколько
SA>> часов при оцифровке 44100-48000 Гц) из нескольких перекрывающихся во
SA>> времени фрагментов, записанных независимо, т.е. с различными амплитудой и
SA>> фазой оцифровки, а также дополнительными шумами и, возможно, искажениями
SA>> из-за mp3-сжатия.
SA>> Представляется, что ее можно свести к последовательности частных
SA>> задач: в некотором звуковом файле (PCM) найти с точностью до целого
SA>> смещение от начала, по которому находится некоторый его фрагмент (на
SA>> самом деле фрагмент взят из перекрывающейся части другого файла) с
SA>> измененной амплитудой фазой и добавлением некоторых шумов и искажений.
SA>> Далее перенормировку амплитуды и сшивку считаю тривиальными.
SA>> Насколько я представляю, решение влоб, построение функции коэффициента
SA>> корреляции между файлом (длиной N) и фрагментом (длиной M) в зависимости
SA>> от смещения имеет сложность N*M, и не подходит из соображений
SA>> ресурсоемкости. Можно ли предложить алгоритм сложности N для этой задачи?
SA>> Или, может, я неправильно свел общую задачу к частной?
EM> Я бы пользовался именно коэффициентом корреляции, но только считал бы его,
EM> используя БПФ. (Основано на соотношении между сверткой и Фурье).
Нельзя ли чуть поподробнее. Я представляю базовый алгоритм так:
Цикл (внешний) по начальному смещению в звуковом файле от 0 до N-M (О(N-M) операций)
Нахождение коэффициента кореляции (цикл внутренний) между частью файла по смещению и фрагментом (O(M) операций)
Определение и запоминание экстремума к.к. и соотв. ему смещения (мы не знаем, может звук в другом файле записан в противофазе)
Kонец внешнего цикла.
Итого O((N-M)*M) операций. Нельзя ли показать аналогичную схему с БПФ (сложность которого N*log(N) или M*log(M) операций?)
EM> Время работы сокращается в десятки раз. Для предотврашения эффектов наложения не
EM> забывать о дополнении нулями.
В десятки раз - это как-то несерьезно. Десяток раз можно получить, если, скажем, принудительно уменьшить N, взяв не весь файл, а его часть, применив некое волевое ограничение. Или просто произведя передискретизацию с 48 000 Гц до 4 800 Гц.
Хотелось бы получить именно оценку сложности, исходя из размеров массивов.
До свидания, в 14:40 MSK
Sergey
---
* Origin: Sergiev Posad (2:5020/1507.400)