Расширитель динамического диапазона
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)
В цикле аудиопотока:
Читайте в системе координат аудио из файла.
Примените расширение динамического диапазона.
Запишите систему координат аудио к вашему аудио устройству для слушания.
Визуализируйте исходное и обработанное аудио и примененное усиление.
В то время как потоковая передача, настройки параметров расширителя динамического диапазона и слушает эффект.
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)
Используйте вход 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)
Создайте цикл потоковой передачи аудио
Читайте в системе координат аудио от вашего входа и сигналов боковой цепи. Обработайте свой вход и сигналы боковой цепи с вашим 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.