ограничитель

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

Описание

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

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

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

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

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

Создание

Синтаксис

dRL = limiter
dRL = limiter(thresholdValue)
dRL = limiter(___,Name,Value)

Описание

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

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

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

y=x(xT+W2)2(2×W)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Режим усиления состава, заданный как 'Auto' или 'Property'.

  • 'auto' Усиление состава применяется при выводе ограничителя динамического диапазона, таким образом, что установившийся вход на 0 дБ имеет вывод на 0 дБ.

  • Свойство Усиление состава установлено в значение, заданное в свойстве MakeUpGain.

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

Типы данных: char | string

Усиление состава в дБ, заданном как действительный скаляр.

Make-up gain компенсирует усиление, потерянное во время ограничения. Это применяется при выводе ограничителя динамического диапазона.

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

Зависимости

Чтобы включить это свойство, установите MakeUpGainMode на 'Property'.

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

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

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

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

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

audioOut = dRL(audioIn)
[audioOut,gain] = dRL(audioIn)

Описание

пример

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

пример

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

СвойствоОбласть значенийОтображениеМодуль
Threshold[–50, 0]линейныйдБ
KneeWidth[0, 20]линейныйдБ
AttackTime[0, 4]линейныйсекунды
ReleaseTime[0, 4]линейныйсекунды
MakeUpGain (доступный, когда вы устанавливаете MakeUpGainMode на 'Property'),[–10, 24]линейныйдБ

Примеры

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

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

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

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

Настройте limiter, чтобы иметь порог-15 дБ, время атаки 0,005 секунд и время релиза 0,1 секунд. Установите усиление состава на 0 дБ (значение по умолчанию). Чтобы задать это значение, установите режим усиления состава на 'Property', но не задавайте свойство MakeUpGain. Используйте частоту дискретизации своего читателя звукового файла.

dRL = limiter(-15, ...
    'AttackTime',0.005, ...
    'ReleaseTime',0.1, ...
    'MakeUpGainMode','Property', ...
    'SampleRate',fileReader.SampleRate);

Визуализируйте статическую характеристику limiter.

visualize(dRL)

Настройте осциллограф времени, чтобы визуализировать исходный сигнал и ограниченный сигнал.

scope = dsp.TimeScope( ...
    'SampleRate',fileReader.SampleRate, ...
    'TimeSpanOverrunAction','Scroll', ...
    'TimeSpan',1, ...
    'BufferLength',44100*4, ...
    'YLimits',[-1 1], ...
    'ShowGrid',true, ...
    'LayoutDimensions',[2,1], ...
    'NumInputPorts',2, ...
    'ShowLegend',true, ...
    'Title',['Original vs. Limited Audio (top)' ...
    ' and Limiter Gain in dB (bottom)']);

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

while ~isDone(fileReader)
    x = fileReader();
    [y,g] = dRL(x);
    deviceWriter(y);
    x1 = x(:,1);
    y1 = y(:,1);
    g1 = g(:,1);
    scope([x1,y1],g1);
end

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

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

Сравните ограничитель и компрессор, примененный синусоида

Создайте Систему limiter object™ и Системный объект compressor. Установите свойства AttackTime и ReleaseTime обоих объектов обнулить. Создайте Системный объект audioOscillator, чтобы сгенерировать синусоиду с набором Frequency к 5 и набором Amplitude к 0.1.

dRL = limiter('AttackTime',0,'ReleaseTime',0);
dRC = compressor('AttackTime',0,'ReleaseTime',0);

osc = audioOscillator('Frequency',5,'Amplitude',0.1);

Создайте осциллограф времени, чтобы визуализировать сгенерированную синусоиду и обработанную синусоиду.

scope = dsp.TimeScope( ...
    'SampleRate',osc.SampleRate, ...
    'TimeSpan',2, ...
    'BufferLength',osc.SampleRate*4, ...
    'YLimits',[-1 1], ...
    'TimeSpanOverrunAction','Scroll', ...
    'ShowGrid',true, ...
    'LayoutDimensions',[2 1], ...
    'NumInputPorts',2, ...
    'Title', ...
    'Original Signal vs. Limited Signal (top) and Compressed Signal (bottom)');

В цикле аудиопотока визуализируйте исходную синусоиду и синусоиду, обработанную ограничителем и компрессором. Постепенно увеличьте амплитуду исходной синусоиды, чтобы проиллюстрировать эффект.

while osc.Amplitude < 0.75
    x = osc();
    
    xLimited    = dRL(x);
    xCompressed = dRC(x);
    
    scope([x xLimited],[x xCompressed]);
    
    osc.Amplitude = osc.Amplitude + 0.0002;
end
release(scope)
release(dRL)
release(dRC)
release(osc)

Сравните ограничитель и компрессор, примененный звуковой сигнал

Сравните эффект ограничителей динамического диапазона и компрессоров на дорожке ударных. Создайте Системный объект dsp.AudioFileReader и Системный объект audioDeviceWriter, чтобы считать аудио из файла и записать в ваше устройство аудиовыхода. Чтобы подчеркнуть эффект управления динамическим диапазоном, установите операционный порог ограничителя и компрессора к-20 дБ.

dRL.Threshold = -20;
dRC.Threshold = -20;

fileReader = dsp.AudioFileReader('FunkyDrums-44p1-stereo-25secs.mp3');
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

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

numFrames = 300;

fprintf('Now playing original signal...\n')
for i = 1:numFrames
    x = fileReader();
    deviceWriter(x);
end
reset(fileReader);

fprintf('Now playing limited signal...\n')
for i = 1:numFrames
    x = fileReader();
    xLimited = dRL(x);
    deviceWriter(xLimited);
end
reset(fileReader);

fprintf('Now playing compressed signal...\n')
for i = 1:numFrames
    x = fileReader();
    xCompressed = dRC(x);
    deviceWriter(xCompressed);
end
    
release(fileReader)
release(deviceWriter)
release(dRC)
release(dRL)

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

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

dRL = limiter('SampleRate',fileReader.SampleRate);

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

parameterTuner(dRL)

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

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

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

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

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

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

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

release(deviceWriter)
release(fileReader)
release(dRL)

Алгоритмы

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

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

Ссылки

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

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

Смотрите также

Блоки

Системные объекты

Введенный в R2016a