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

Для выполнения динамического расширения области значений:
Создайте expander Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
dRE = expander создает Системный объект, 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) создает Системный объект, dRE, с временем атаки 0,01 секунды и частотой дискретизации 16 кГц.Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
Threshold - Эксплуатационный порог (дБ)–10 (по умолчанию) | действительный скалярОперационный порог в дБ, заданный как действительный скаляр.
Operation threshold - уровень, ниже которого коэффициент усиления прикладывается к входному сигналу.
Настраиваемый: Да
Типы данных: single | double
Ratio - Коэффициент расширения5 (по умолчанию) | действительный скалярКоэффициент расширения, заданный как действительный скаляр, больший или равный 1.
Expansion ratio является отношением вход/выход для сигналов, которые понижают порог операции.
Принимая характеристику жесткого колена и установившийся вход, такой что x [n] дБ < thresholdValue, коэффициент расширения задан как .
R - коэффициент расширения.
y [n] является выходом сигналом в дБ.
x [n] является входным сигналом в дБ.
T - порог в дБ.
Настраиваемый: Да
Типы данных: single | double
KneeWidth - Ширина колена (дБ)0 (по умолчанию) | действительный скалярШирина колена в дБ, заданная как действительный скаляр, больший или равный 0.
Knee width - переходная область в характеристике расширения.
Для характеристик мягкого колена переходная область определяется отношением
для области значений .
y - уровень выхода в дБ.
x - уровень входа в дБ.
R - коэффициент расширения.
T - порог в дБ.
W - ширина колена в дБ.
Настраиваемый: Да
Типы данных: single | double
AttackTime - Время (ы) атаки0.05 (по умолчанию) | действительный скалярВремя атаки в секундах, заданное как действительный скаляр, больший или равный 0.
Attack time время, когда коэффициент усиления расширителя увеличивается с 10% до 90% от его конечного значения, когда вход идет ниже порога.
Настраиваемый: Да
Типы данных: single | double
ReleaseTime - Время (ы) выпуска0.2 (по умолчанию) | действительный скалярВремя релиза в секундах, заданное как действительный скаляр, больший или равный 0.
Release time время, когда коэффициент усиления расширителя падает с 90% до 10% от его конечного значения, когда вход переходит выше порога.
Настраиваемый: Да
Типы данных: single | double
HoldTime - Время удержания0.05 (по умолчанию) | действительный скалярВремя удержания в секундах, заданное как действительный скаляр, больший или равный 0.
Hold time - период, в течение которого (отрицательный) коэффициент усиления удерживается перед началом уменьшения к своему установившемуся значению, когда входной уровень падает ниже порога.
Настраиваемый: Да
Типы данных: single | double
SampleRate - Входная частота выборки (Гц)44100 (по умолчанию) | положительная скалярная величинаВход скорость выборки в Гц, заданная как положительная скалярная величина.
Настраиваемый: Да
Типы данных: single | double
EnableSidechain - Включите вход боковой цепиfalse (по умолчанию) | trueВключите вход боковой цепи, заданный как true или false. Это свойство определяет количество доступных входов на expander объект.
Тип данных sidechain и (система координат) должны быть такими же, как и audioIn.
Количество каналов боковой цепи должно быть равно количеству каналов audioIn или равен единице. Когда количество боковых каналов равно единице, gain Вычисленный на основе этого канала применяется ко всем каналам audioIn. Когда количество боковых каналов равно количеству каналов в audioIn, а gain Вычисленный для каждого бокового канала применяется к соответствующему каналу audioIn.
Настраиваемый: Нет
audioIn - Аудио вход в расширительАудио вход в расширитель, заданный как матрица. Столбцы матрицы рассматриваются как независимые аудиоканалы.
Типы данных: single | double
audioOut - Аудиовыход от расширителяАудио выхода от расширителя, возвращенный как матрица того же размера, как audioIn.
Типы данных: single | double
gain - Коэффициент усиления, применяемый расширителем (дБ)Усиление, приложенное расширителем, возвращается как матрица того же размера, как audioIn.
Типы данных: single | double
Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:
release(obj)
visualize | Визуализируйте статическую характеристику контроллера динамической области значений |
createAudioPluginClass | Создайте класс аудиоплагина, который реализует функциональность Системного объекта |
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)

Деэссинг - это процесс уменьшения одноуровневых звуков в аудиосигнале. Sibilance относится к звукам s, z и sh в речи, которые могут быть непропорционально подчеркнуты во время записи. es звуки попадают под категорию негласной речи со всеми согласными и имеют более высокую частоту, чем звонкая речь. В этом примере вы применяете деэссинг разделенного диапазона к речевому сигналу путем разделения сигнала на высокие и низкие частоты, применения расширителя для уменьшения одноуровневых частот и последующего ремиксирования каналов.
Создайте dsp.AudioFileReader объект и audioDeviceWriter объект для чтения из звукового файла и записи в аудио устройство. Прослушайте необработанный сигнал. Затем отпустите средство чтения файлов и средство записи.
fileReader = dsp.AudioFileReader( ... 'Sibilance.wav'); deviceWriter = audioDeviceWriter; while ~isDone(fileReader) audioIn = fileReader(); deviceWriter(audioIn); end release(deviceWriter) release(fileReader)
Создайте expander Системный объект для деэскалации аудиосигнала. Установите частоту дискретизации расширителя равную частоте дискретизации аудио файл. Создайте двухдиапазонный перекрестный фильтр с кроссовером 3000 Гц. Sibilance обычно встречается в этой области значений. Установите уклон кроссовера равным 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 объект для эмуляции электронного контроллера барабана, также известного как мультипад. Этот метод распространён в звукозаписи студийного производства и создает интересные изменения в тембре инструмента. Боковой сигнал управляет расширением входного сигнала. Расширение Sidechain уменьшает амплитуду входного сигнала, когда сигнал Sidechain падает ниже Порога 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 объект. Используйте высокий Коэффициент, мягкую Ширину Колена, быстрый 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.](../../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)

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

Сигнал N- точка, x [n], преобразуется в децибелы:
x дБ [n] проходит через усилительный компьютер. Компьютер с усилением использует статические характеристические свойства расширителя динамической области значений, чтобы ослабить усиление, которое ниже порога.
Если вы указали мягкое колено, усиливающий компьютер имеет следующую статическую характеристику:
где T - порог, R - отношение, а W - ширина колена.
Если вы указали жесткое колено, усиливающий компьютер имеет следующую статическую характеристику:
Вычисленный коэффициент усиления, g c [n], вычисляется как
g c [n] сглаживается с помощью заданных свойств attack, релиза и hold time:
Коэффициент времени атаки, α A , вычисляется как
Коэффициент времени освобождения, α R , вычисляется как
T A
является периодом атаки, заданным AttackTime свойство. T R
- период релиза, заданный ReleaseTime свойство. Fs - входная частота дискретизации, заданная SampleRate свойство.
C A является счетчиком удержания для атаки. Предел, T
H, определяется HoldTime свойство.
Сглаженный коэффициент усиления в дБ, g с [n], переводится в линейную область:
Выход расширителя динамической области значений дается как
[1] Джаннулис, Димитриос, Майкл Массберг и Джошуа Д. Рейсс. Digital Dynamic Range Compressor Design -- A Tutorial and Analysis (неопр.) (недоступное руководство). Журнал Общества Аудиотехники. Том 60, Выпуск 6, 2012, стр. 399-408.
Указания и ограничения по применению:
Системные объекты в генерации кода MATLAB (MATLAB Coder)
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.