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

Для выполнения динамического расширения диапазона:
Создать expander и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
dRE = expander создает объект System, dRE, которая выполняет динамическое расширение диапазона независимо по каждому входному каналу.
dRE = expander( устанавливает для свойства Threshold значение thresholdValue)thresholdValue.
dRE = expander( устанавливает свойство Ratio в значение thresholdValue,ratioValue)ratioValue.
dRE = expander(___, задает каждое свойство Name,Value)Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.
dRE = expander('AttackTime',0.01,'SampleRate',16000) создает объект System, dRE, с 0,01 секундным временем атаки и частотой дискретизации 16 кГц.Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
Threshold - Порог работы (дБ)–10 (по умолчанию) | вещественный скалярПорог операции в дБ, заданный как действительный скаляр.
Рабочий порог - это уровень, ниже которого коэффициент усиления применяется к входному сигналу.
Настраиваемый: Да
Типы данных: single | double
Ratio - Коэффициент расширения5 (по умолчанию) | вещественный скалярКоэффициент расширения, заданный как действительный скаляр, больший или равный 1.
Коэффициент расширения - это отношение вход/выход для сигналов, которые не соответствуют пороговому значению операции.
Предполагая жесткую коленную характеристику и установившийся входной сигнал, такой что x [n] дБ <thresholdValueкоэффициент расширения определяется как [n] − T).
R - коэффициент расширения.
y [n] - выходной сигнал в дБ.
x [n] - входной сигнал в дБ.
T - пороговое значение в дБ.
Настраиваемый: Да
Типы данных: single | double
KneeWidth - Ширина колена (дБ)0 (по умолчанию) | вещественный скалярШирина колена в дБ, заданная как действительный скаляр, больший или равный 0.
Ширина колена - это переходная область в характеристике расширения.
Для характеристик мягкого колена область перехода определяется соотношением
− W2) 2 (2 × W)
для диапазона T |) ≤W.
y - выходной уровень в дБ.
x - входной уровень в дБ.
R - коэффициент расширения.
T - пороговое значение в дБ.
W - ширина колена в дБ.
Настраиваемый: Да
Типы данных: single | double
AttackTime - Время (а) атаки0.05 (по умолчанию) | вещественный скалярВремя атаки в секундах, указанное как действительный скаляр, больший или равный 0.
Время атаки - это время, в течение которого коэффициент усиления расширителя увеличивается с 10% до 90% от его конечного значения, когда входной сигнал опускается ниже порогового значения.
Настраиваемый: Да
Типы данных: single | double
ReleaseTime - Время (а) освобождения0.2 (по умолчанию) | вещественный скалярВремя освобождения в секундах, указанное как действительный скаляр, больший или равный 0.
Время освобождения - это время, в течение которого коэффициент усиления расширителя падает с 90% до 10% от его конечного значения, когда входное значение превышает пороговое значение.
Настраиваемый: Да
Типы данных: single | double
HoldTime - Время (и) удержания0.05 (по умолчанию) | вещественный скалярВремя удержания в секундах, указанное как действительный скаляр, больший или равный 0.
Время удержания - это период, в течение которого (отрицательный) коэффициент усиления удерживается перед тем, как начать уменьшаться в направлении его установившегося значения, когда входной уровень опускается ниже порогового значения.
Настраиваемый: Да
Типы данных: single | double
SampleRate - Частота входных выборок (Гц)44100 (по умолчанию) | положительный скалярЧастота входных выборок в Гц, заданная как положительный скаляр.
Настраиваемый: Да
Типы данных: single | double
EnableSidechain - Включить ввод боковой цепиfalse (по умолчанию) | trueВключить ввод боковой цепочки, указанный как true или false. Это свойство определяет количество доступных входных данных в expander объект.
false - Вход боковой цепочки отключен, и expander объект принимает один ввод: audioIn данные, подлежащие расширению.
true - Вход Sidechain включен, и expander объект принимает два входа: audioIn данные, подлежащие расширению, и входные данные боковой цепочки, используемые для вычисления расширителя gain.
Тип данных боковой цепочки и длина (кадра) должны совпадать с audioIn.
Количество каналов боковой цепи должно быть равно количеству каналов audioIn или быть равным единице. Если количество боковых каналов равно единице, gain вычисленный на основе этого канала применяется ко всем каналам audioIn. Если количество боковых каналов равно количеству каналов в audioIn, gain вычисленный для каждого бокового канала применяется к соответствующему каналу audioIn.
Настраиваемый: Нет
audioIn - Вход звука в расширительВход звука в расширитель, заданный как матрица. Столбцы матрицы обрабатываются как независимые аудиоканалы.
Типы данных: single | double
audioOut - Аудиовыход от расширителяАудиовыход от расширителя, возвращаемый в виде матрицы того же размера, что и audioIn.
Типы данных: single | double
gain - Коэффициент усиления, применяемый расширителем (дБ)Коэффициент усиления, применяемый расширителем, возвращаемый в виде матрицы того же размера, что и audioIn.
Типы данных: single | double
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
visualize | Визуализация статической характеристики контроллера динамического диапазона |
createAudioPluginClass | Создать класс аудиоплагинов, реализующий функциональность объекта System |
parameterTuner | Настройка параметров объекта во время потоковой передачи |
configureMIDI | Настройка соединений MIDI между аудиообъектом и контроллером MIDI |
disconnectMIDI | Отключить элементы управления MIDI от аудиообъекта |
getMIDIConnections | Получение MIDI-соединений аудиообъекта |
createAudioPluginClass и configureMIDI функции отображают настраиваемые свойства expander Системный объект для пользовательских параметров:
| Собственность | Диапазон | Отображение | Единица |
|---|---|---|---|
Threshold | [–140, 0] | линейный | dB |
Ratio | [1, 50] | линейный | ничего |
KneeWidth | [0, 20] | линейный | dB |
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)

Деэссенция - это процесс уменьшения звуков сибилянта в звуковом сигнале. Сибиланс относится к звукам s, z и sh в речи, которые могут быть непропорционально подчеркнуты во время записи. эс звуки подпадают под категорию невокализированной речи со всеми согласными и имеют более высокую частоту, чем звонкая речь. В этом примере к речевому сигналу применяется деэссенция в разделенном диапазоне путем разделения сигнала на высокие и низкие частоты, применения расширителя для уменьшения частот sibilant и последующего повторного смешивания каналов.
Создать dsp.AudioFileReader объект и audioDeviceWriter объект для чтения из звукового файла и записи в звуковое устройство. Прослушайте необработанный сигнал. Затем отпустите средство чтения файлов и устройство записи.
fileReader = dsp.AudioFileReader( ... 'Sibilance.wav'); deviceWriter = audioDeviceWriter; while ~isDone(fileReader) audioIn = fileReader(); deviceWriter(audioIn); end release(deviceWriter) release(fileReader)
Создание expander Системный объект отменяет звуковой сигнал. Установите частоту дискретизации расширителя на частоту дискретизации аудиофайла. Создайте двухполосный перекрестный фильтр с частотой перехода 3000 Гц. В этом диапазоне обычно встречается сибиланс. Задайте уклон пересечения равным 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'});
В цикле аудиопотока:
Чтение в кадре аудиофайла.
Разделение звукового сигнала на две полосы.
Примените динамическое расширение диапазона к верхней полосе.
Переделать каналы.
Запишите обработанный аудиосигнал на аудиоустройство для прослушивания.
Визуализация обработанных и необработанных сигналов во временном диапазоне.
Рекомендуется деблокировать объекты после их завершения.
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.](../../examples/audio/win64/TuneExpanderParametersExample_02.png)
В цикле аудиопотока:
Считывание в кадре звука из файла.
Применение динамического расширения диапазона.
Запишите кадр звука на аудиоустройство для прослушивания.
Визуализируйте исходный и обработанный звук, а также применяемый коэффициент усиления.
Во время потоковой передачи настройте параметры динамического расширения диапазона и прослушайте эффект.
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.](../../examples/audio/win64/TuneExpanderParametersExample_03.png)
Рекомендуется деблокировать объекты после их завершения.
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 объект. Используйте высокое отношение, мягкую KneyWidth, быстрое время ожидания и время восстановления и короткое время ожидания.
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.](../../examples/audio/win64/SidechainDuckingWithExpanderExample_02.png)
Создать цикл потоковой передачи звука
Считывайте в кадре аудио из входных и боковых сигналов. Обработка входных и боковых сигналов с помощью 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 Системный объект обрабатывает кадр сигнала по кадрам и элемент по элементам.

N-точечный сигнал x [n] преобразуется в децибелы:
| x [n] |
xdB [n] проходит через компьютер усиления. Компьютер усиления использует статические характеристические свойства динамического расширителя диапазона для ослабления усиления, которое ниже порогового значения.
Если указано мягкое колено, компьютер усиления имеет следующую статическую характеристику:
≤xdB≤ (T + W2) xdBxdB > (T + W2),
где T - порог, R - отношение, а W - ширина колена.
Если указано жесткое колено, компьютер усиления имеет следующую статическую характеристику:
TxdB xdB≥T
Вычисленный коэффициент усиления, gc [n], вычисляется как
xdB [n].
gc [n] сглаживается с использованием указанных свойств времени атаки, освобождения и удержания:
gc [n] gc [n] > gs [n − 1]
Коэффициент времени атаки, αА, рассчитывается как
× TA).
Коэффициент времени высвобождения, αR, рассчитывается как
× TR).
TA
- период времени атаки, указанный AttackTime собственность. TR
- период времени деблокирования, указанный ReleaseTime собственность. Fs - входная частота дискретизации, определяемая SampleRate собственность.
CA - счетчик удержания для атаки. Предел TH
определяется HoldTime собственность.
Сглаженный коэффициент усиления в дБ, gs [n], преобразуется в линейную область:
n] 20)
Выходной сигнал расширителя динамического диапазона задается как
glin [n].
[1] Джаннулис, Димитриос, Майкл Массберг и Джошуа Д. Рейсс. «Проектирование цифрового компрессора динамического диапазона - учебное пособие и анализ». Журнал Общества аудиотехники. Том 60, выпуск 6, 2012, стр. 399-408.
Примечания и ограничения по использованию:
Системные объекты в генерации кода MATLAB (кодер MATLAB)
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.