Что такое канальный вокодер?

Оригинал статьи вы можете найти http://sethares.engr.wisc.edu/vocoders/channelvocoder.html

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

Канальный вокодер можно интерпретировать как банк фильтров, который накладывает огибающую одного звука (модулятор) на форму волны другого (несущей). Операция огибающей (представленная здесь применением нелинейности выпрямления g (x) с последующим фильтром нижних частот) применяется отдельно в каждой полосе частот.

Современные реализации канального вокодера обычно заменяют банки фильтров на БПФ. Это быстрее в вычислительном отношении, когда используется много полос, и как нелинейность, так и низкочастотная фильтрация могут быть легко выполнены с использованием величины БПФ. Бёнг Парк запрограммировал это как часть проекта своего Мастера, и здесь появляется код (Matlab). Файл справки для chanvocoder.m гласит:

function y = chanvocoder(carrier, modul, chan, numband, overlap)

% y = chanvocoder(carrier, modul, chan, numband, overlap)

% The Channel Vocoder modulates the carrier signal with the modulation signal

% chan = number of channels (e.g., 512)

% numband = number of bands (<chan) (e.g., 32)

% overlap = window overlap (e.g., 1/4)

% written by Park and Sethares 2005.

Как видите, шанвокодер требует два сигнала. Модулятор, как правило, – это голос (говорите четко и медленно), а носитель – это, как правило, гармонически богатый источник звука (например, орган, синтезатор или цветной шум). Оба должны иметь одинаковое количество дорожек, то есть оба должны быть либо моно, либо оба стерео. Вы можете выбрать количество каналов (FFT имеют длину 2 * chan) и количество полос (сколько частотных полос для разбивки сигнала), а также количество перекрытий между последовательными кадрами FFT. Звук будет меняться в зависимости от этих значений. Как правило, вы будете использовать chanvocoder.m со звуковыми файлами в формате .wav. Например, предположим, что есть файл .wav с именем «carrier22.wav», а другой – с именем «modulator22.wav». Типичный способ вызова вокодера:

modfile = ‘modulator22’;

carfile = ‘carrier22’;

outfile = ‘vocodedsound.wav’

[modul, sr1] = wavread(modfile);

[carrier, sr2] = wavread(carfile);

if sr1~=sr2, disp(‘your sampling rates dont match’); end

y = chanvocoder(carrier, modul, 512, 16, .2);

wavwrite(y,sr1,16,outfile)

Он считывает два звуковых файла с помощью команды wavread, проверяет, соответствуют ли частоты дискретизации (если нет, вы не получите ожидаемого результата), вызывает функцию chanvocoder, а затем записывает вывод в виде другого звукового файла, который вы можете прослушивать. в Matlab или с помощью любой аудиопрограммы, способной воспроизводить файлы .wav. Так что вы можете проверить, что все работает, вот вышеупомянутые файлы носителя и модулятора вместе с выводом, который вы должны услышать из приведенного выше сценария. (Вам может потребоваться щелкнуть правой кнопкой мыши, чтобы загрузить эти файлы.) После загрузки убедитесь, что они (вместе с самой функцией chanvocoder.m) размещены в пути Matlab. Вы должны иметь возможность запустить программу и получить тот же вывод, что и “vocodedsound.wav.” Используя разные звуки носителя и модулятора, вы можете создавать различные эффекты. Вам также может быть интересно сравнить эту реализацию с языком C Zerius Vocoder – вы обнаружите, что они работают аналогично, и действительно, тестовые файлы выше (carrier22 и modulator22) взяты с веб-сайта Zerius.