О восстановлении верхней полосы в WAV файлах

  В музыкальных файлах с отсутствующей полосой верхних частот эта полоса может быть приблизительно восстановлена по обертонному принципу - заполнена звуками обертонов из некой высокой, но сохранившейся в записи полосы частот.

  Как именно выбрать эту полосу, и какие брать из неё обертоны - не очень понятно. Также непонятно, нужно ли при этом следовать принципу гармоничности, например, повышать ли частоты точно на квинту, то есть в 1.5 раза, именно это напрашивается в том примере, который будет рассмотрен ниже - звук можно переносить из полосы 10500-14666 в полосу 15750-21000.
Или брать соотношение 7/5=1.4 - гармоническое отношение, не встречающееся в музыке, но зато позволяющее брать звук из ближайшей полосы 15714-11250. И нужна ли вообще гармоничность, если звук из создаваемой полосы вряд ли будет слышен?

  Но, тем не менее - задача и в исследовательском плане, и в плане реализации, интересная. Тем более, что предварительная наработка имеется -
"Резонансные датчики в оцифрованном звуке" http://www.proza.ru/2016/10/03/1428


   НАХОДИМ ЧАСТОТУ СРЕЗА

  Частоту среза верхних частот можно определить по анализатору спектра. Но можно использовать для этого и резонансные датчики.
  Для анализа спектра было расставлено 57 датчиков с шагом 250 Гц в полосе 6500-20500 Гц. Из записи брались три пробы - из начала, из середины, и из конца записи, длительностью звучания 2.3 сек каждая. Вычислялась SUMZ - сумма значений Z (амплитуда колебания датчика, взятая по абсолютной величине и сглаженная).  Полученные спектры показаны на рисунке.

  Датчики, настроенные на высокие частоты, но стоящие вне полосы существующего в записи звука, тем не менее, слегка раскачиваются, и если идти от верхних частот к нижним, то срез легко обнаружить - разность SUMZ на соседних частотах чётко не убывает на каждом шаге, вплоть до достижения частоты среза Fcr. По рисунку видно, что эта частота составляет 15750 Гц. Соответствующим образом и был построен алгоритм нахождения частоты среза.
  Что касается верхней границы полосы источника звука, то она была взята равной Fcr-250 - чуть ниже полосы среза. 22000/15500=1.419 что почти равно тому гармоничному отношению, о котором говорилось выше.


   ЧИСЛО ДАТЧИКОВ И "ЗАМЫЛИВАНИЕ" ЧАСТОТ

  Суть процесса состоит в следующем. В нижней полосе - источнике звука расставляется некоторое количество резонансных датчиков. А в верхней, заполняемой звуком полосе, располагаются генераторы синусоидальных колебаний. Каждый генератор синусоиды связан со своим резонансным датчиком, который им и управляет - задаёт амплитуду синусоиды.
  Конечно, чтобы всё это было поточнее, количество датчиков должно быть большим. Но чем больше датчиков, тем медленнее идут вычисления. При 36-ти датчиках в полосе, на каждые 10 секунд записи тратится 47 секунд счёта. А если поставить 72 датчика, то это время возрастает до 76 секунд.
  Запись длительностью 3 минуты 17 сек, требует 23.6 минут времени своей обработки.
  Но на это приходится идти, и вот почему.

  Процесс на 36-ти датчиках при небольшом спектральном разрешении выдаёт в верхних частотах вполне приличный спектр - см. верхний левый слайд рисунка. Однако, при повышении разрешения по частоте, полосатость спектра обнаруживается - см. слайды ниже.

  Есть, правда, хороший способ "замылить" эту полосатость, создав случайную размытость частот генераторов синусоид. Ясно, что частоты следует размывать на величину расстояния между генераторами. В нашем случае это (22000-19750)/36/20000, что составляет примерно 2%.
  Сказано - сделано. Спектр действительно перестал распадаться на полоски. Однако в записи появился призвук - слышимые посторонние звуки, очень напоминающие звук журчащей воды. Может быть, для записи это и прикольно, но с этим нужно как-то бороться.
  Впрочем выяснилось, что если взять число датчиков побольше - 72, а фактор замыливания поменьше - 1%, то и спектр получается приличный при всяком разрешении, и посторонних звуков журчащей воды не слышно.
  Это не значит, что такое восстановление хорошо. Призвуки в верхней полосе в режиме замыливания частот корёжат спектр очень сильно. Поэтому, например, в таком режиме не удаётся искусственно принизить спектр по мере приближения его к частоте 22000. Это можно делать только при факторе замыливания ноль, то есть только на частоколе частот.
  Но если частокол не мешает, то пожалуйста.

  Прослушать небольшой фрагмент-источник, призвук и результат соединения источника с призвуком можно в файлах по этому адресу - http://yadi.sk/d/nkGBs3IwxedV9
      
источник-36призвук_0-результат AM150
источник-36призвук_2-результат AM500
источник-72призвук_0-результат AM70
   указано количество датчиков, процент замыливания, и общий множитель усиления
По этому же адресу находятся тексты двух программ, в которых реализован описанный выше алгоритм.

    
   ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

  Описанный алгоритм реализован в двух программах.

  Программа ARD_AM.bas ищет частоту среза, а затем пишет текст программы POLOSA.bas
И уже эта программа работает с музыкальным WAV файлом, преобразуя его. В этой программе не используются индексированные массивы, и поэтому она работает чуть быстрее.

  Программа POLOSAM.bas использует индексированные массивы, и поэтому работает чуть медленнее, но она сразу готова к работе, без какой либо перезаписи текста.

  Обе программы анализируют спектр записи и могут, при соответствующих настройках, выдать спектр для обозрения в текстовый файл SUMZ.txt и в файл SUMZ.wav, в котором спектр может быть рассмотрен с помощью редактора WAV Editor.

=============
 


Рецензии