noiseGate

Логический элемент динамического диапазона

Описание

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

Выполнять пропускание динамического диапазона:

  1. Создайте noiseGate объект и набор его свойства.

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.

Создание

Описание

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

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

пример

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

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

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

Operation threshold является уровнем, ниже которого усиление применяется к входному сигналу.

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

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

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

Attack time является временем, это берет прикладное усиление, чтобы повыситься с 10% до 90% его окончательного значения, когда вход понижается порог.

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

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

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

Release time является временем, которое он берет прикладное усиление, чтобы пропустить с 90% до 10% его окончательного значения, когда вход выходит за предел порога.

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

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

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

Hold time является периодом, в течение которого (отрицательное) усиление сохранено прежде, чем начать уменьшаться к его значению устойчивого состояния, когда уровень на входе опускается ниже порога.

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

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

Введите частоту дискретизации в Гц в виде положительной скалярной величины.

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

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

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

  • false – Вход Sidechain отключен и 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

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

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

release(obj)

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

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

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

СвойствоОбласть значенийОтображениеМодуль
Threshold[–140, 0]линейныйдБ
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 объект. Используйте быстрый AttackTime и ReleaseTime и короткий HoldTime.

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] Giannoulis, Димитриос, Михаэль Массберг и Джошуа Д. Рейсс. "Цифровой Проект Компрессора Динамического диапазона – Пример и Анализ". Журнал Общества звукоинженеров. Издание 60, Выпуск 6, 2012, стр 399–408.

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

Введенный в R2016a