exponenta event banner

noiseGate

Динамический затвор диапазона

Описание

noiseGate Система object™ выполняет динамическое стробирование диапазона независимо по каждому входному каналу. Динамическое стробирование диапазона подавляет сигналы ниже заданного порога. Для получения плавной кривой усиления используется заданное время атаки, освобождения и удержания. Свойства noiseGate Системный объект указывает тип динамической стробирования диапазона.

Для выполнения динамического стробирования диапазона:

  1. Создать noiseGate и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

dRG = noiseGate создает объект System, dRG, которая выполняет динамическое стробирование диапазона независимо по каждому входному каналу.

dRG = noiseGate(thresholdValue) устанавливает для свойства Threshold значение thresholdValue.

пример

dRG = noiseGate(___,Name,Value) задает каждое свойство Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.

Пример: dRG = noiseGate('AttackTime',0.01,'SampleRate',16000) создает объект System, dRGс временем атаки 10 мс и частотой дискретизации 16 кГц.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Порог операции в дБ, заданный как действительный скаляр.

Рабочий порог - это уровень, ниже которого коэффициент усиления применяется к входному сигналу.

Настраиваемый: Да

Типы данных: single | double

Время атаки в секундах, указанное как действительный скаляр, больший или равный 0.

Время атаки - это время, в течение которого применяемый коэффициент усиления увеличивается с 10% до 90% от его конечного значения, когда входной сигнал опускается ниже порогового значения.

Настраиваемый: Да

Типы данных: single | double

Время освобождения в секундах, указанное как действительный скаляр, больший или равный 0.

Время освобождения - это время, в течение которого применяемый коэффициент усиления падает с 90% до 10% от его конечного значения, когда входной сигнал выходит за пороговое значение.

Настраиваемый: Да

Типы данных: single | double

Время удержания в секундах, указанное как действительный скаляр, больший или равный 0.

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

Настраиваемый: Да

Типы данных: single | double

Частота входных выборок в Гц, заданная как положительный скаляр.

Настраиваемый: Да

Типы данных: single | double

Включить ввод боковой цепочки, указанный как true или false. Это свойство определяет количество доступных входных данных в noiseGate объект.

  • false - Вход боковой цепочки отключен, и noiseGate объект принимает один ввод: audioIn данные для стробирования.

  • true - Вход Sidechain включен, и noiseGate объект принимает два входа: audioIn данные для стробирования и входные данные боковой цепочки, используемые для вычисления gain применяется noiseGate.

Тип данных боковой цепочки и длина (кадра) должны совпадать с audioIn.

Количество каналов боковой цепи должно быть равно количеству каналов audioIn или быть равным единице. Если количество боковых каналов равно единице, gain вычисленный на основе этого канала применяется ко всем каналам audioIn. Если количество боковых каналов равно количеству каналов в audioIn, gain вычисленный для каждого бокового канала применяется к соответствующему каналу audioIn.

Настраиваемый: Нет

Использование

Описание

пример

audioOut = dRG(audioIn) осуществляет динамическое стробирование диапазона по входному сигналу, audioInи возвращает стробируемый сигнал, audioOut. Тип динамического стробирования диапазона определяется алгоритмом и свойствами noiseGate Системный объект, dRG.

[audioOut,gain] = dRG(audioIn) также возвращает примененное усиление в дБ при каждой входной выборке.

Входные аргументы

развернуть все

Звуковой вход в шумовой вентиль, заданный как матрица. Столбцы матрицы обрабатываются как независимые аудиоканалы.

Типы данных: single | double

Выходные аргументы

развернуть все

Аудиовыход из шумового вентиля, возвращаемый в виде матрицы того же размера, что и audioIn.

Типы данных: single | double

Коэффициент усиления, применяемый шумовым затвором, возвращаемый в виде матрицы того же размера, что и audioIn.

Типы данных: single | double

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

visualizeВизуализация статической характеристики контроллера динамического диапазона
createAudioPluginClassСоздать класс аудиоплагинов, реализующий функциональность объекта System
parameterTunerНастройка параметров объекта во время потоковой передачи
configureMIDIНастройка соединений MIDI между аудиообъектом и контроллером MIDI
disconnectMIDIОтключить элементы управления MIDI от аудиообъекта
getMIDIConnectionsПолучение MIDI-соединений аудиообъекта
cloneСоздать повторяющийся объект System
isLockedОпределить, используется ли объект System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System
stepЗапустить алгоритм объекта System

createAudioPluginClass и configureMIDI функции отображают настраиваемые свойства noiseGate Системный объект для пользовательских параметров:

СобственностьДиапазонОтображениеЕдиница
Threshold[–140, 0]линейныйdB
AttackTime[0, 4]линейныйсекунды
ReleaseTime[0, 4]линейныйсекунды
HoldTime[0, 4]линейныйсекунды

Примеры

свернуть все

Динамическое стробирование диапазона используется для ослабления фонового шума от звукового сигнала.

Настройка dsp.AudioFileReader и audioDeviceWriter objects™ системы.

frameLength = 1024;
fileReader = dsp.AudioFileReader( ...
    'Filename','Counting-16-44p1-mono-15secs.wav', ...
    'SamplesPerFrame',frameLength);
deviceWriter = audioDeviceWriter( ...
    'SampleRate',fileReader.SampleRate);

Повреждение звукового сигнала гауссовым шумом. Воспроизвести звук.

while ~isDone(fileReader)
    x = fileReader();
    xCorrupted = x + (1e-2/4)*randn(frameLength,1);
    deviceWriter(xCorrupted);
end

release(fileReader)

Установите динамический затвор диапазона с порогом -25 дБ, временем атаки 0,01 секунды, временем освобождения 0,02 секунды и временем удержания 0 секунд. Используйте частоту дискретизации устройства чтения аудиофайлов.

gate = noiseGate(-25, ...
    'AttackTime',0.01, ...
    'ReleaseTime',0.02, ...
    'HoldTime',0, ...
    'SampleRate',fileReader.SampleRate);

Настройте область времени для визуализации сигнала до и после динамического стробирования диапазона.

scope = timescope( ...
    'SampleRate',fileReader.SampleRate, ...
    'TimeSpanOverrunAction','Scroll', ...
    'TimeSpanSource','property',...
    'TimeSpan',16, ...
    'BufferLength',1.5e6, ...
    'YLimits',[-1 1], ...
    'ShowGrid',true, ...
    'ShowLegend',true, ...
    'Title','Corrupted vs. Gated Audio');

Воспроизвести обработанный звук и визуализировать его в области.

while ~isDone(fileReader)
    x = fileReader();
    xCorrupted = x + (1e-2/4)*randn(frameLength,1);
    y = gate(xCorrupted);
    deviceWriter(y);
    scope([xCorrupted,y]);
end

release(fileReader)
release(gate)
release(deviceWriter)
release(scope)

Создать dsp.AudioFileReader для чтения в аудио покадровом режиме. Создание audioDeviceWriter для записи звука на звуковую карту. Создать noiseGate для обработки аудиоданных.

frameLength = 1024;
fileReader = dsp.AudioFileReader('RockDrums-44p1-stereo-11secs.mp3', ...
    'SamplesPerFrame',frameLength);
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

dRG = noiseGate('SampleRate',fileReader.SampleRate);

Звонить parameterTuner для открытия пользовательского интерфейса для настройки параметров noiseGate во время потоковой передачи.

parameterTuner(dRG)

В цикле аудиопотока:

  1. Считывание в кадре звука из файла.

  2. Применить динамический стробирование диапазона.

  3. Запишите кадр звука на аудиоустройство для прослушивания.

Во время потоковой передачи настройте параметры элемента динамического диапазона и прослушайте эффект.

while ~isDone(fileReader)
    audioIn = fileReader();
    audioOut = dRG(audioIn);
    deviceWriter(audioOut);
    drawnow limitrate % required to update parameter
end

Рекомендуется деблокировать объекты после их завершения.

release(deviceWriter)
release(fileReader)
release(dRG)

Использовать вход EnableSidechain noiseGate цель - эмулировать электронный контроллер барабана, также известный как многопад. Эта техника распространена в звукозаписывающей студии и создает интересные изменения в тембре инструмента. Сигнал боковой цепи управляет стробированием входного сигнала. Стробирование боковой цепи уменьшает амплитуду входного сигнала, когда сигнал боковой цепи падает ниже порога noiseGate. Шумовой затвор по существу является expander с бесконечным соотношением.

Подготовка аудиофайлов

Преобразуйте сигнал боковой цепи из стерео в моно.

[expanderSideChainStereo,Fs] = audioread('FunkyDrums-44p1-stereo-25secs.mp3');
expanderSideChainMono = (expanderSideChainStereo(:,1) + expanderSideChainStereo(:,2)) / 2;

Запишите преобразованный сигнал боковой цепи в файл.

audiowrite('convertedSidechainSig.wav',expanderSideChainMono,Fs);

Создание аудиообъектов

Построить dsp.AudioFileReader объект для входных и боковых сигналов. Чтобы разрешить скрипт работать бесконечно, измените playbackCount переменная из 1 кому Inf.

inputAudio = 'SoftGuitar-44p1_mono-10mins.ogg';
sidechainAudio  = 'convertedSidechainSig.wav';
playbackCount = 1;
inputAudioAFR = dsp.AudioFileReader(inputAudio,'PlayCount',playbackCount);
sidechainAudioAFR = dsp.AudioFileReader(sidechainAudio,'PlayCount',playbackCount);

Построение и визуализация noiseGate объект. Используйте быстрое время ожидания и время выпуска, а также короткое время ожидания.

dRG = noiseGate('EnableSidechain',true,'Threshold',-15,'AttackTime',...
    0.08,'ReleaseTime',0.0001,'HoldTime',0.00001);
visualize(dRG)

Построение audioDeviceWriter объект для воспроизведения боковой цепи и входных сигналов.

afw = audioDeviceWriter;

Построить timescope объект для просмотра входного сигнала, сигнала боковой цепи, а также стробируемого входного сигнала.

scope = timescope('NumInputPorts',3,...
                      'SampleRate',Fs,...
                      'TimeSpanSource','property',...
                      'TimeSpan',5,...
                       'TimeDisplayOffset',0,...
                      'LayoutDimensions',[3 1],...
                      'BufferLength',Fs*15,...
                      'TimeSpanOverrunAction','Scroll',...
                      'YLimits',[-1 1],...
                      'ShowGrid',true,...
                      'Title','Input Audio - Classical Guitar');
scope.ActiveDisplay = 2;
scope.YLimits = [-1 1];
scope.Title = 'Sidechain Audio - Drums';
scope.ShowGrid = true;
scope.ActiveDisplay = 3;
scope.YLimits = [-1 1];
scope.ShowGrid = true;
scope.Title = 'Gated Input Audio - Classical Guitar';

Звонить parameterTuner открытие пользовательского интерфейса для настройки параметров шлюза во время потоковой передачи. Настройте значения свойств и прослушивайте эффект в реальном времени.

parameterTuner(dRG)

Figure Audio Parameter Tuner: noiseGate [dRG] contains an object of type uigridlayout.

Создать цикл потоковой передачи звука

Считывайте в кадре аудио из входных и боковых сигналов. Обработка входных и боковых сигналов с помощью noiseGate объект. Воспроизведение обработанных аудиосигналов и отображение аудиоданных с помощью timescope объект.

Верхняя панель вашего timescope отображает входной аудиосигнал, а на средней панели - звуковой сигнал боковой цепи. На нижней панели отображается стробируемый входной звуковой сигнал.

Замена различных аудиофайлов inputAudio переменная для создания различных текстур и тембров в барабанной смеси.

while ~isDone(sidechainAudioAFR)
   inputAudioFrame = inputAudioAFR();
   sideChainAudioFrame = sidechainAudioAFR();
   noiseGateOutput  = dRG(inputAudioFrame,sideChainAudioFrame);
   afw(sideChainAudioFrame+noiseGateOutput); 
   scope(inputAudioFrame,sideChainAudioFrame,noiseGateOutput);
   drawnow limitrate;   % required to update parameter settings from UI
end

Освободите объекты.

release(inputAudioAFR)
release(sidechainAudioAFR)
release(dRG)
release(afw)
release(scope)

Алгоритмы

развернуть все

noiseGate Системный объект обрабатывает кадр сигнала по кадрам и элемент по элементам.

Ссылки

[1] Джаннулис, Димитриос, Майкл Массберг и Джошуа Д. Рейсс. «Проектирование цифрового компрессора динамического диапазона - учебное пособие и анализ». Журнал Общества аудиотехники. Том 60, выпуск 6, 2012, стр. 399-408.

Расширенные возможности

.
Представлен в R2016a