expander

Расширитель динамического диапазона

Описание

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

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

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

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

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

Создание

Описание

dRE = expander создает Системный объект, dRE, это выполняет расширение динамического диапазона независимо через каждый входной канал.

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

dRE = expander(thresholdValue,ratioValue) устанавливает свойство Ratio на ratioValue.

пример

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

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

Свойства

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

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

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

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

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

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

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

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

Коэффициент расширения в виде действительного скаляра, больше, чем или равный 1.

Expansion ratio является отношением ввода/вывода для сигналов, которые недостаточно поднимаются порог операции.

Принятие твердой характеристики колена и установившегося входа, таким образом, что x [n] дБ <thresholdValue, коэффициент расширения задан как R=(y[n]T)(x[n]T) .

  • R является коэффициентом расширения.

  • y [n] является выходным сигналом в дБ.

  • x [n] является входным сигналом в дБ.

  • T является порогом в дБ.

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

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

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

Knee width является областью перехода в характеристике расширения.

Для мягких характеристик колена область перехода задана отношением

y=x+(1R)×(xTW2)2(2×W)

для области значений (2×|xT|)W.

  • y является уровнем на выходе в дБ.

  • x является уровнем на входе в дБ.

  • R является коэффициентом расширения.

  • T является порогом в дБ.

  • W является шириной колена в дБ.

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

Типы данных: 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. Это свойство определяет количество доступных входных параметров на expander объект.

  • false – Вход Sidechain отключен и expander объект принимает вход того: audioIn данные, которые будут расширены.

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

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

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

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

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

Описание

пример

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

[audioOut,gain] = dRE(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 функции сопоставляют настраиваемые свойства expander Системный объект к стоящим с пользователем параметрам:

СвойствоОбласть значенийОтображениеМодуль
Threshold[–140, 0]линейныйдБ
Ratio[1, 50]линейный'none'
KneeWidth[0, 20]линейныйдБ
AttackTime[0, 4]линейныйсекунды
ReleaseTime[0, 4]линейныйсекунды
HoldTime[0, 4]линейныйсекунды

Примеры

свернуть все

Используйте расширение динамического диапазона, чтобы ослабить фоновый шум от звукового сигнала.

Настройте dsp.AudioFileReader и audioDeviceWriter Системные объекты.

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)

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

dRE = expander(-40,10, ...
    '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. Expanded Audio');

Проигрывайте обработанное аудио и визуализируйте его на осциллографе.

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

release(fileReader)
release(dRE)
release(deviceWriter)
release(scope)

De-Эссинг является процессом уменьшения свистящих звуков в звуковом сигнале. Шипение относится к s, z, и звукам sh в речи, которая может быть непропорционально подчеркнута во время записи. звуки es подпадают под категорию неречевой речи со всеми согласными и имеют более высокую частоту, чем речевая речь. В этом примере вы применяете полосу разделения de-Эссинг к речевому сигналу путем разделения сигнала на высокие частоты и низкие частоты, применения расширителя, чтобы уменьшить свистящие частоты, и затем делания ремикс каналов.

Создайте dsp.AudioFileReader возразите и audioDeviceWriter возразите, чтобы читать из звукового файла и записать в аудио устройство. Слушайте необработанный сигнал. Затем выпустите средство записи устройства и средство чтения файлов.

fileReader = dsp.AudioFileReader( ...
    'Sibilance.wav');
deviceWriter = audioDeviceWriter;

while ~isDone(fileReader)
    audioIn = fileReader();
    deviceWriter(audioIn);
end

release(deviceWriter)
release(fileReader)

Создайте expander Системный объект к de-эс звуковой сигнал. Установите частоту дискретизации расширителя к частоте дискретизации звукового файла. Создайте фильтр перекрестного соединения 2D полосы с перекрестным соединением 3 000 Гц. Шипение обычно находится в этой области значений. Установите перекрестный наклон на 12. Постройте частотную характеристику перекрестного фильтра, чтобы подтвердить ваш проект визуально.

dRExpander = expander( ...
    'Threshold',-50, ...
    'AttackTime',0.05, ...
    'ReleaseTime',0.05, ...
    'HoldTime',0.005, ...
    'SampleRate',fileReader.SampleRate);

crossFilt = crossoverFilter( ...
    'NumCrossovers',1, ...
    'CrossoverFrequencies',3000, ...
    'CrossoverSlopes',12);
visualize(crossFilt)

Создайте timescope объект визуализировать исходные и обработанные звуковые сигналы.

scope = timescope( ...
    'SampleRate',fileReader.SampleRate, ...
    'TimeSpanOverrunAction','Scroll', ...
    'TimeSpanSource','Property','TimeSpan',4, ...
    'BufferLength',fileReader.SampleRate*8, ...
    'YLimits',[-1 1], ...
    'ShowGrid',true, ...
    'ShowLegend',true, ...
    'ChannelNames',{'Original','Processed'});

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

  1. Читайте в системе координат звукового файла.

  2. Разделите звуковой сигнал в две полосы.

  3. Примените расширение динамического диапазона на верхнюю полосу.

  4. Сделайте ремикс каналов.

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

  6. Визуализируйте обработанные и необработанные сигналы на осциллографе времени.

Как лучшая практика, выпустите свои объекты, однажды сделанные.

while ~isDone(fileReader)
    audioIn = fileReader();
    
    [band1,band2] = crossFilt(audioIn);
    
    band2processed = dRExpander(band2);
    
    procAudio  = band1 + band2processed;
    
    deviceWriter(procAudio);
    
    scope([audioIn procAudio]);
end

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

release(crossFilt)
release(dRExpander)

Создайте dsp.AudioFileReader читать в покадровом аудио. Создайте audioDeviceWriter записать аудио в вашу звуковую карту. Создайте expander обработать аудиоданные. Вызовите visualize построить статическую характеристику expander.

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

dRE = expander(-40,10, ...
    'AttackTime',0.01, ...
    'ReleaseTime',0.02, ...
    'HoldTime',0, ...
    'SampleRate',fileReader.SampleRate);
visualize(dRE)

Создайте timescope визуализировать исходное и обработанное аудио.

scope = timescope( ...
    'SampleRate',fileReader.SampleRate, ...
    'TimeSpanSource','property','TimeSpan',1, ...
    'BufferLength',fileReader.SampleRate*4, ...
    'YLimits',[-1,1], ...
    'TimeSpanOverrunAction','Scroll', ...
    'ShowGrid',true, ...
    'LayoutDimensions',[2,1], ...
    'NumInputPorts',2, ...
    'Title','Original vs. Processed Audio (top) and Applied Gain in dB (bottom)');
scope.ActiveDisplay = 2;
scope.YLimits = [-300,0];
scope.YLabel = 'Gain (dB)';

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

parameterTuner(dRE)

Figure Audio Parameter Tuner: expander [dRE] contains an object of type uigridlayout.

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

  1. Читайте в системе координат аудио из файла.

  2. Примените расширение динамического диапазона.

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

  4. Визуализируйте исходное и обработанное аудио и примененное усиление.

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

while ~isDone(fileReader)
    audioIn = fileReader();
    [audioOut,g] = dRE(audioIn);
    deviceWriter(audioOut);
    scope([audioIn(:,1),audioOut(:,1)],g(:,1));
    drawnow limitrate % required to update parameter
end

Figure Audio Parameter Tuner: expander [dRE] contains an object of type uigridlayout.

Как лучшая практика, выпустите свои объекты, однажды сделанные.

release(deviceWriter)
release(fileReader)
release(dRE)
release(scope)

Используйте вход EnableSidechain expander объект эмулировать электронный контроллер барабана, также известный как мультиклавиатуру. Этот метод распространен в производстве студии звукозаписи и создает интересные изменения в тембре инструмента. Сигнал боковой цепи управляет расширением на входном сигнале. Расширение боковой цепи уменьшает амплитуду входного сигнала, когда сигнал боковой цепи падает ниже Порога 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);

Создайте и визуализируйте expander объект. Используйте высокое Отношение, мягкий KneeWidth, быстрый AttackTime и ReleaseTime и короткий HoldTime.

dRE = expander('EnableSidechain',true,'Threshold',-20,'Ratio',6.5,...
    'KneeWidth',20,'AttackTime',0.84,'ReleaseTime',0.001,'HoldTime',0.0001);
visualize(dRE)

Создайте 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 = 'Expanded Input Audio - Classical Guitar';

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

parameterTuner(dRE)

Figure Audio Parameter Tuner: expander [dRE] contains an object of type uigridlayout.

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

Читайте в системе координат аудио от вашего входа и сигналов боковой цепи. Обработайте свой вход и сигналы боковой цепи с вашим expander объект. Воспроизведите свои обработанные звуковые сигналы и отобразите аудиоданные с помощью timescope объект.

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

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

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

Выпустите свои объекты.

release(inputAudioAFR)
release(sidechainAudioAFR)
release(dRE)
release(afw)
release(scope)

Алгоритмы

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

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

Ссылки

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

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

Введенный в R2016a