расширитель

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

Описание

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

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

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

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

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

Создание

Синтаксис

dRE = expander
dRE = expander(thresholdValue)
dRE = expander(thresholdValue,ratioValue)
dRE = expander(___,Name,Value)

Описание

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 Используя Системные объекты (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

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

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

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

Синтаксис

audioOut = dRE(audioIn)
[audioOut,gain] = dRE(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]линейныйсекунды

Примеры

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

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

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

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);

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

visualize(dRE)

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

scope = dsp.TimeScope( ...
    'SampleRate',fileReader.SampleRate, ...
    'TimeSpanOverrunAction','Scroll', ...
    '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 object™ и Системный объект audioDeviceWriter, чтобы читать из звукового файла и записать в аудио устройство. Слушайте необработанный сигнал. Затем выпустите средство записи устройства и средство чтения файлов.

fileReader = dsp.AudioFileReader( ...
    fullfile(matlabroot,'examples','audio','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)

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

scope = dsp.TimeScope( ...
    'SampleRate',fileReader.SampleRate, ...
    'TimeSpanOverrunAction','Scroll', ...
    'TimeSpan',4, ...
    'BufferLength',44100*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. Создайте dsp.TimeScope, чтобы визуализировать исходное и обработанное аудио.

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)

scope = dsp.TimeScope( ...
    'SampleRate',fileReader.SampleRate, ...
    '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)

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

  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

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

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

Алгоритмы

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

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

Ссылки

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

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

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

Блоки

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

Введенный в R2016a

Для просмотра документации необходимо авторизоваться на сайте