Компрессор динамической области значений
The compressor
Система object™ выполняет динамическое сжатие области значений независимо по каждому входному каналу. Динамическое сжатие области значений ослабляет громкость громких звуков, которые пересекают заданный порог. Он использует заданные время атаки и релизы, чтобы достичь плавной приложенной кривой усиления. Свойства compressor
Системный объект задает тип сжатия динамической области значений.
Для выполнения динамического сжатия области значений:
Создайте compressor
Объекту и установите его свойства.
Вызывайте объект с аргументами, как будто это функция.
Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».
dRC = compressor
создает Системный объект, dRC
, который выполняет динамическое сжатие области значений независимо по каждому входному каналу с течением времени.
dRC = compressor(
устанавливает свойство Threshold на thresholdValue
)thresholdValue
.
dRC = compressor(
устанавливает свойство Ratio на thresholdValue
,ratioValue
)ratioValue
.
dRC = compressor(___,
устанавливает каждое свойство Name,Value
)Name
к заданной Value
. Неопределенные свойства имеют значения по умолчанию.
dRC = compressor('AttackTime',0.01,'SampleRate',16000)
создает Системный объект, dRC
, со временем атаки 10 мс, работающим со скоростью дискретизации 16 кГц.Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release
функция разблокирует их.
Если свойство настраивается, можно изменить его значение в любой момент.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.
Threshold
- Эксплуатационный порог (дБ)–10
(по умолчанию) | действительный скалярОперационный порог в дБ, заданный как действительный скаляр.
Operation threshold - уровень, выше которого коэффициент усиления прикладывается к входному сигналу.
Настраиваемый: Да
Типы данных: single
| double
Ratio
- Коэффициент сжатия5
(по умолчанию) | действительный скалярСтепень сжатия, заданная как действительный скаляр, больший или равный 1.
Compression ratio является отношением вход/выход для сигналов, которые перерегулируют порог операции.
Принимая характеристику жесткого колена и установившийся вход, такой что x [n] дБ > Threshold
, степень сжатия определяется как .
R - коэффициент сжатия.
x [n] является входным сигналом в дБ.
y [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
MakeUpGainMode
- Режим усиления подпитки'Property'
(по умолчанию) | 'Auto'
Режим усиления подпитки, заданный как 'Auto'
или 'Property'
.
'Auto'
- Усиление подпитки прикладывается к выходу компрессора динамической области значений таким образом, что статический вход 0 дБ имеет выход 0 дБ.
'Property'
- Коэффициент усиления устанавливается на значение, заданное в свойстве MakeUpGain.
Настраиваемый: Нет
Типы данных: char
| string
MakeUpGain
- Коэффициент усиления подпитки (дБ)0
(по умолчанию) | действительный скалярКоэффициент усиления в дБ, заданный как действительный скаляр.
Make-up gain компенсирует коэффициент усиления, потерянный во время сжатия. Он применяется на выходе компрессора динамической области значений.
Настраиваемый: Да
Чтобы включить это свойство, установите MakeUpGainMode на 'Property'
.
Типы данных: single
| double
SampleRate
- Входная частота выборки (Гц)44100
(по умолчанию) | положительная скалярная величинаВход скорость выборки в Гц, заданная как положительная скалярная величина.
Настраиваемый: Да
Типы данных: single
| double
EnableSidechain
- Включите вход боковой цепиfalse
(по умолчанию) | true
Включите вход боковой цепи, заданный как true
или false
. Это свойство определяет количество доступных входов на compressor
объект.
Тип данных 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
функции сопоставляют настраиваемые свойства compressor
Системный объект по пользовательским параметрам:
Свойство | Область значений | Отображение | Модуль |
---|---|---|---|
Threshold | [–50, 0] | линейный | dB |
Ratio | [1, 50] | линейный | ничего |
KneeWidth | [0, 20] | линейный | dB |
AttackTime | [0, 4] | линейный | секунды |
ReleaseTime | [0, 4] | линейный | секунды |
MakeUpGain (доступно при установке MakeUpGainMode на 'Property' ) | [–10, 24] | линейный | dB |
Используйте динамическое сжатие области значений, чтобы ослабить громкость громких звуков.
Настройте dsp.AudioFileReader
и audioDeviceWriter
Системные objects™.
frameLength = 1024; fileReader = dsp.AudioFileReader( ... 'Filename','RockDrums-44p1-stereo-11secs.mp3', ... 'SamplesPerFrame',frameLength); deviceWriter = audioDeviceWriter( ... 'SampleRate',fileReader.SampleRate);
Установите компрессор, чтобы иметь порог -15 дБ, отношение 7 и ширину колена 5 дБ. Используйте частоту дискретизации устройства чтения аудио файла.
dRC = compressor(-15,7, ... 'KneeWidth',5, ... 'SampleRate',fileReader.SampleRate);
Настройте возможности, чтобы визуализировать исходный аудиосигнал, сжатый аудиосигнал и приложенный коэффициент усиления компрессора.
scope = timescope( ... 'SampleRate',fileReader.SampleRate, ... 'TimeSpanSource','Property','TimeSpan',1, ... 'BufferLength',44100*4, ... 'YLimits',[-1,1], ... 'TimeSpanOverrunAction','Scroll', ... 'ShowGrid',true, ... 'LayoutDimensions',[2,1], ... 'NumInputPorts',2, ... 'Title', ... ['Original vs. Compressed Audio (top)' ... ' and Compressor Gain in dB (bottom)']); scope.ActiveDisplay = 2; scope.YLimits = [-4,0]; scope.YLabel = 'Gain (dB)';
Воспроизведение обработанного аудио и визуализация его на возможностях.
while ~isDone(fileReader) x = fileReader(); [y,g] = dRC(x); deviceWriter(y); scope([x(:,1),y(:,1)],g(:,1)) end release(dRC) release(deviceWriter) release(scope)
Ограничитель динамической области значений является специальным типом компрессора динамической области значений. В ограничителях уровень выше операционного порога жестко ограничен. В самой простой реализации ограничителя эффект эквивалентен аудио усечения. В компрессорах уровень выше рабочего порога понижается с помощью заданного коэффициента сжатия. Использование степени сжатия приводит к более плавной обработке сигнала.
Сравнение ограничителя и компрессора, применяемых к синусоиде
Создайте limiter
Системные object™ и compressor
Системный объект. Установите AttackTime
и ReleaseTime
свойства обоих объектов равны нулю. Создайте audioOscillator
Системный объект для генерации синусоиды с Frequency
установлено на 5
и Amplitude
установлено на 0.1
.
dRL = limiter('AttackTime',0,'ReleaseTime',0); dRC = compressor('AttackTime',0,'ReleaseTime',0); osc = audioOscillator('Frequency',5,'Amplitude',0.1);
Создайте временные возможности, чтобы визуализировать сгенерированную синусоиду и обработанную синусоиду.
scope = timescope( ... 'SampleRate',osc.SampleRate, ... 'TimeSpanSource','Property','TimeSpan',2, ... 'BufferLength',osc.SampleRate*4, ... 'TimeSpanOverrunAction','Scroll', ... 'ShowGrid',true, ... 'LayoutDimensions',[2 1], ... 'NumInputPorts',2); scope.ActiveDisplay = 1; scope.Title = 'Original Signal vs. Limited Signal'; scope.YLimits = [-1,1]; scope.ActiveDisplay = 2; scope.Title = 'Original Signal vs. Compressed Signal'; scope.YLimits = [-1,1];
В цикле аудиопотока визуализируйте исходную синусоиду и синусоиду, обработанную ограничителем и компрессором. Увеличьте амплитуду исходной синусоиды, чтобы проиллюстрировать эффект.
while osc.Amplitude < 0.75 x = osc(); xLimited = dRL(x); xCompressed = dRC(x); scope([x xLimited],[x xCompressed]); osc.Amplitude = osc.Amplitude + 0.0002; end release(scope)
release(dRL) release(dRC) release(osc)
Сравнение ограничителя и компрессора, применяемых к аудиосигналу
Сравните эффект динамических ограничителей области значений и компрессоров на дорожке барабана. Создайте dsp.AudioFileReader
Системный объект и audioDeviceWriter
Системный объект, чтобы считать аудио из файла и записать на ваше устройство выхода аудио. Чтобы подчеркнуть эффект динамического регулирования области значений, установите рабочий порог ограничителя и компрессора -20 дБ.
dRL.Threshold = -20; dRC.Threshold = -20; fileReader = dsp.AudioFileReader('FunkyDrums-44p1-stereo-25secs.mp3'); deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);
Считывайте последующие системы координат из аудио файла в цикле. Слушайте и сравните эффект ограничения динамической области значений и сжатия динамической области значений на аудиосигнале.
numFrames = 300;
fprintf('Now playing original signal...\n')
Now playing original signal...
for i = 1:numFrames x = fileReader(); deviceWriter(x); end reset(fileReader); fprintf('Now playing limited signal...\n')
Now playing limited signal...
for i = 1:numFrames x = fileReader(); xLimited = dRL(x); deviceWriter(xLimited); end reset(fileReader); fprintf('Now playing compressed signal...\n')
Now playing compressed signal...
for i = 1:numFrames x = fileReader(); xCompressed = dRC(x); deviceWriter(xCompressed); end release(fileReader) release(deviceWriter) release(dRC) release(dRL)
Плозивы являются созвучными звуками, возникающими в результате внезапного релиза воздушного потока. Они наиболее выражены в словах, начинающихся со звуков p, d и g. Плозивы могут быть подчеркнуты процессом записи и часто неприятно слышны. В этом примере вы минимизируете plosives речевого сигнала, применяя высокочастотную фильтрацию и низкополосное сжатие.
Создайте dsp.AudioFileReader
объект и audioDeviceWriter
объект для считывания аудиосигнала из файла и записи аудиосигнала в устройство. Воспроизведите необработанный сигнал. Затем отпустите средство чтения файлов и средство записи.
fileReader = dsp.AudioFileReader('audioPlosives.wav'); deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate); while ~isDone(fileReader) audioIn = fileReader(); deviceWriter(audioIn); end release(deviceWriter) release(fileReader)
Проектируйте высокочастотный фильтр с крутым сгибом всех частот ниже 120 Гц. Использование dsp.BiquadFilter
объект для реализации создания фильтра highpass. Создайте перекрестный фильтр с одним кроссовером на частоте 250 Гц. Перекрестный фильтр позволяет вам разделить интересующие полосы для обработки. Создайте динамический компрессор области значений для сжатия динамической области значений взрывных звуков. Чтобы не применять усиление подпитки, установите MakeUpGainMode
в "Property"
и используйте 0 дБ по умолчанию MakeUpGain
значение свойства. Создайте временные возможности, чтобы визуализировать обработанный и необработанный аудиосигнал.
[B,A] = designVarSlopeFilter(48,120/(fileReader.SampleRate/2),"hi"); biquadFilter = dsp.BiquadFilter( ... "SOSMatrixSource","Input port", ... "ScaleValuesInputPort",false); crossFilt = crossoverFilter( ... "SampleRate",fileReader.SampleRate, ... "NumCrossovers",1, ... "CrossoverFrequencies",250, ... "CrossoverSlopes",48); dRCompressor = compressor( ... "Threshold",-35, ... "Ratio",10, ... "KneeWidth",20, ... "AttackTime",1e-4, ... "ReleaseTime",3e-1, ... "MakeUpGainMode","Property", ... "SampleRate",fileReader.SampleRate); scope = timescope( ... "SampleRate",fileReader.SampleRate, ... "TimeSpanSource","property","TimeSpan",3, ... "BufferLength",fileReader.SampleRate*3*2, ... "YLimits",[-1 1], ... "ShowGrid",true, ... "ShowLegend",true, ... "ChannelNames",{'Original','Processed'});
В цикле аудиопотока:
Чтение в систему координат аудио файла.
Применить фильтрацию highpass с помощью биквадного фильтра.
Разделите аудиосигнал на две полосы.
Примените динамическое сжатие области значений к нижней полосе.
Ремикшируйте каналы.
Запишите обработанный аудиосигнал в аудио устройство для прослушивания.
Визуализируйте обработанные и необработанные сигналы во временных возможностях.
Как лучшая практика, отпустите объекты после выполнения.
while ~isDone(fileReader) audioIn = fileReader(); audioIn = biquadFilter(audioIn,B,A); [band1,band2] = crossFilt(audioIn); band1compressed = dRCompressor(band1); audioOut = band1compressed + band2; deviceWriter(audioOut); scope([audioIn audioOut]) end
Как лучшая практика, отпустите объекты после выполнения.
release(deviceWriter) release(fileReader) release(crossFilt) release(dRCompressor) release(scope)
Создайте dsp.AudioFileReader
для чтения в аудиокадре за кадром. Создайте audioDeviceWriter
чтобы записать аудио на звуковую карту. Создайте compressor
для обработки аудио данных. Функции visualize
для построения графика статической характеристики compressor
.
frameLength = 1024; fileReader = dsp.AudioFileReader('RockDrums-44p1-stereo-11secs.mp3', ... 'SamplesPerFrame',frameLength); deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate); dRC = compressor('SampleRate',fileReader.SampleRate); visualize(dRC)
Создайте 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. Compressed Audio (top) and Compressor Gain in dB (bottom)'); scope.ActiveDisplay = 2; scope.YLimits = [-4,0]; scope.YLabel = 'Gain (dB)';
Функции parameterTuner
чтобы открыть пользовательский интерфейс для настройки параметров компрессора во время потоковой передачи.
parameterTuner(dRC)
В цикле аудиопотока:
Чтение в системе координат аудио из файла.
Применить сжатие динамической области значений.
Запишите систему координат аудио в своё аудио устройство для прослушивания.
Визуализация исходного аудио, обработанного аудио и приложенного усиления.
Во время потоковой передачи настройте параметры компрессора динамической области значений и прослушайте эффект.
while ~isDone(fileReader) audioIn = fileReader(); [audioOut,g] = dRC(audioIn); deviceWriter(audioOut); scope([audioIn(:,1),audioOut(:,1)],g(:,1)); drawnow limitrate % required to update parameter end
Как лучшая практика, отпустите объекты после выполнения.
release(deviceWriter) release(fileReader) release(dRC) release(scope)
Используйте вход EnableSidechain compressor
объект для уменьшения уровня амплитуды отдельного аудиосигнала. Боковой сигнал управляет сжатием на вход аудиосигнале. Когда боковой сигнал превышает порог компрессора, компрессор активирует и уменьшает амплитуду входного сигнала. Когда уровень бокового сигнала падает ниже порога, звуковой вход возвращается к своей несжатой амплитуде.
Подготовка аудио Файлов
В этом разделе вы повторно отобразите и обнулите речевой файл для использования в качестве входов в EnableSidechain
свойство вашего compressor
объект.
Считывайте аудиосигнал. Повторно отобразите его, чтобы соответствовать частоте дискретизации входа аудиосигнала (44,1 кГц).
targetFs = 44100;
[originalSpeech,originalFs] = audioread('Rainbow-16-8-mono-114secs.wav');
resampledSpeech = resample(originalSpeech,targetFs,originalFs);
Дополните начало повторно дискретизированного сигнала нулями на 10 секунд. Это позволяет четко слышать входной аудиосигнал перед приложением какого-либо сжатия.
resampledSpeech = [zeros(10*targetFs,1);resampledSpeech];
Нормализуйте амплитуду, чтобы избежать потенциального усечения.
resampledSpeech = resampledSpeech ./ max(resampledSpeech);
Запишите повторно дискретизированный, заполненный нулями и нормированный боковой сигнал в файл.
audiowrite('resampledSpeech.wav',resampledSpeech,targetFs);
Создание аудио Объектов
Создайте dsp.AudioFileReader
объект для входа и боковых сигналов. Использование свойства ReadRange AudioFileReader
, выберите второй куплет входного сигнала и первые 26,5 секунды бокового сигнала для воспроизведения. Чтобы позволить скрипту запускаться бессрочно, измените playbackCount
переменная от 1
на Inf
.
inputAudio = 'SoftGuitar-44p1_mono-10mins.ogg'; sidechainAudio = 'resampledSpeech.wav'; playbackCount = 1; inputAudioAFR = dsp.AudioFileReader(inputAudio,'PlayCount',playbackCount,'ReadRange',... [115*targetFs round(145.4*targetFs)]); sidechainAudioAFR = dsp.AudioFileReader(sidechainAudio,'PlayCount',playbackCount,... 'ReadRange',[1 round(26.5*targetFs)]);
Создайте compressor
объект. Используйте высокий Коэффициент, быстрый AttackTime и умеренно медленный ReleaseTime. Эти настройки идеально подходят для работы с голосовой связью. Быстрое время атаки гарантирует, что входной аудио сжимается почти сразу после того, как боковой сигнал превышает порог компрессора .
Медленный релиз время гарантирует, что сжатие на вход аудио длится через любые потенциальные короткие тихие области в боковом сигнале.
iAmYourCompressor = compressor('EnableSidechain',true,... 'SampleRate',targetFs,... 'Threshold',-40,... 'Ratio',8,... 'AttackTime',0.01,... 'ReleaseTime',1.5);
Создайте audioDeviceWriter
объект для воспроизведения боковых и входных сигналов.
afw = audioDeviceWriter;
Создайте timescope
объект для просмотра несжатого входного сигнала, бокового сигнала, а также сжатого входного сигнала.
scope = timescope('NumInputPorts',3,... 'SampleRate',targetFs,... 'TimeSpanSource','property',... 'TimeSpan',5,... 'TimeDisplayOffset',0,... 'LayoutDimensions',[3 1],... 'BufferLength',targetFs*15,... 'TimeSpanOverrunAction','Scroll',... 'YLimits',[-1 1],... 'ShowGrid',true,... 'Title','Uncompressed Input Audio - Guitar'); scope.ActiveDisplay = 2; scope.YLimits = [-1 1]; scope.Title = 'Sidechain Audio - Speech'; scope.ShowGrid = true; scope.ActiveDisplay = 3; scope.YLimits = [-1 1]; scope.ShowGrid = true; scope.Title = 'Compressed Input Audio - Guitar';
Создайте аудиопотоковый цикл
Считывайте в систему координат аудио от ваших входов и боковых сигналов. Обработка входных и боковых сигналов с помощью compressor
объект. Воспроизведите обработанные аудиосигналы и отображение аудиосигналы данных используя timescope
объект.
Верхняя панель вашего timescope
отображает несжатый входной аудиосигнал, а средняя панель отображает боковой аудиосигнал. На нижней панели отображается сжатый входной аудиосигнал. Обратите внимание, что амплитуды сигналов в верхней и нижней панелях идентичны, пока не начнется сигнал боковой связи. Когда боковой сигнал активизируется, амплитуда сигнала в нижней панели сжимается. Когда сигнал боковой связи заканчивается, амплитуда сигнала в нижней панели начинает возвращаться к своему несжатому уровню.
while ~isDone(inputAudioAFR) inputAudioFrame = inputAudioAFR(); sideChainAudioFrame = sidechainAudioAFR(); compressorOutput = iAmYourCompressor(inputAudioFrame,sideChainAudioFrame); afw(sideChainAudioFrame+compressorOutput); scope(inputAudioFrame,sideChainAudioFrame,compressorOutput); end
Отпустите ваши объекты.
release(inputAudioAFR) release(sidechainAudioAFR) release(iAmYourCompressor) release(afw) release(scope)
The compressor
Системный объект обрабатывает систему координат за кадром и элемент за элементом.
Сигнал N- точка, x [n], преобразуется в децибелы:
x дБ [n] проходит через усилительный компьютер. Компьютер усиления использует статические характеристические свойства динамической области значений компрессора, чтобы ослабить усиление, которое выше порога.
Если вы указали мягкое колено, усиливающий компьютер имеет следующую статическую характеристику:
где T - порог, R - отношение, а W - ширина колена.
Если вы указали жесткое колено, усиливающий компьютер имеет следующую статическую характеристику:
Вычисленный коэффициент усиления, g c [n], вычисляется как
g c [n] сглаживается с помощью заданных свойств атак и релиза времени:
Коэффициент времени атаки, α A , вычисляется как
Коэффициент времени освобождения, α R , вычисляется как
TA
- период атаки, заданный AttackTime свойство. T R
- период релиза, заданный
ReleaseTime
свойство. Fs - входная частота дискретизации, заданная SampleRate
свойство.
Если MakeUpGainMode
задано значение по умолчанию 'Auto'
коэффициент усиления вычисляется как отрицательное значение вычисленного коэффициента усиления для входа 0 дБ,
Учитывая установившийся вход 0 дБ, это строение достигает установившегося выхода 0 дБ. Коэффициент усиления определяется Threshold
, Ratio
, и KneeWidth
свойства. Это не зависит от входного сигнала.
Коэффициент усиления подпитки, M, добавляется к сглаженному усилению, g с [n]:
Вычисленный коэффициент усиления в дБ, 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.