Расширитель динамического диапазона
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 — Порог операции (дБ) (значение по умолчанию) | действительный скалярПорог операции в дБ в виде действительного скаляра.
Operation threshold является уровнем, ниже которого усиление применяется к входному сигналу.
Настраиваемый: да
Типы данных: single | double
Ratio — Коэффициент расширения (значение по умолчанию) | действительный скалярКоэффициент расширения в виде действительного скаляра, больше, чем или равный 1.
Expansion ratio является отношением ввода/вывода для сигналов, которые недостаточно поднимаются порог операции.
Принятие твердой характеристики колена и установившегося входа, таким образом, что x [n] дБ <thresholdValue, коэффициент расширения задан как .
R является коэффициентом расширения.
y [n] является выходным сигналом в дБ.
x [n] является входным сигналом в дБ.
T является порогом в дБ.
Настраиваемый: да
Типы данных: single | double
KneeWidth — Ширина колена (дБ) (значение по умолчанию) | действительный скалярШирина колена в дБ в виде действительного скаляра, больше, чем или равный 0.
Knee width является областью перехода в характеристике расширения.
Для мягких характеристик колена область перехода задана отношением
для области значений .
y является уровнем на выходе в дБ.
x является уровнем на входе в дБ.
R является коэффициентом расширения.
T является порогом в дБ.
W является шириной колена в дБ.
Настраиваемый: да
Типы данных: single | double
AttackTime — Время (время) атаки (значение по умолчанию) | действительный скалярВремя атаки в секундах в виде действительного скаляра, больше, чем или равный 0.
Attack time является временем, это берет усиление расширителя, чтобы повыситься с 10% до 90% его окончательного значения, когда вход понижается порог.
Настраиваемый: да
Типы данных: single | double
ReleaseTime — Выпустите время (времена) (значение по умолчанию) | действительный скалярВыпустите время в секундах в виде действительного скаляра, больше, чем или равный 0.
Release time является временем, которое он берет усиление расширителя, чтобы пропустить с 90% до 10% его окончательного значения, когда вход выходит за предел порога.
Настраиваемый: да
Типы данных: single | double
HoldTime — Время (времена) задержки (значение по умолчанию) | действительный скалярВремя задержки в секундах в виде действительного скаляра, больше, чем или равный 0.
Hold time является периодом, в течение которого (отрицательное) усиление сохранено прежде, чем начать уменьшаться к его значению устойчивого состояния, когда уровень на входе опускается ниже порога.
Настраиваемый: да
Типы данных: single | double
SampleRate — Введите частоту дискретизации (Гц) (значение по умолчанию) | положительная скалярная величинаВведите частоту дискретизации в Гц в виде положительной скалярной величины.
Настраиваемый: да
Типы данных: single | double
EnableSidechain — Включите вход боковой цепиfalse (значение по умолчанию) | trueВключите вход боковой цепи в виде true или false. Это свойство определяет количество доступных входных параметров на expander объект.
Тип данных боковой цепи и (система координат) длина должны совпасть с 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 аудио объекта |
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'});
В цикле аудиопотока:
Читайте в системе координат звукового файла.
Разделите звуковой сигнал в две полосы.
Примените расширение динамического диапазона на верхнюю полосу.
Сделайте ремикс каналов.
Запишите обработанный звуковой сигнал в свое аудио устройство для слушания.
Визуализируйте обработанные и необработанные сигналы на осциллографе времени.
Как лучшая практика, выпустите свои объекты, однажды сделанные.
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 объект. Используйте высокое Отношение, мягкий 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.](../../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] проходит через компьютер усиления. Компьютер усиления использует свойства статической характеристики расширителя динамического диапазона ослабить усиление, которое является ниже порога.
Если вы задали мягкое колено, компьютер усиления имеет следующую статическую характеристику:
где T является порогом, R является отношением, и W является шириной колена.
Если вы задали твердое колено, компьютер усиления имеет следующую статическую характеристику:
Вычисленное усиление, g c [n], вычисляется как
g c [n] сглаживается с помощью заданного нападения, релиза и свойств времени задержки:
Коэффициент времени атаки, α A , вычисляется как
Коэффициент времени релиза, α R , вычисляется как
T A
является периодом времени атаки, заданным AttackTime свойство. T R
является периодом времени релиза, заданным ReleaseTime свойство. Fs является входной частотой дискретизации, заданной SampleRate свойство.
C A является счетчиком хранения для нападения. Предел, T H
, определяется HoldTime свойство.
Сглаживавшее усиление в дБ, g s [n], переводится в линейную область:
Выход расширителя динамического диапазона дан как
[1] Giannoulis, Димитриос, Михаэль Массберг и Джошуа Д. Рейсс. "Цифровой Проект Компрессора Динамического диапазона – Пример и Анализ". Журнал Общества звукоинженеров. Издание 60, Выпуск 6, 2012, стр 399–408.
Указания и ограничения по применению:
Системные объекты в Генерации кода MATLAB (MATLAB Coder)
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.