Аудио перекрестный фильтр
crossoverFilter Система object™ реализует аудио перекрестный фильтр, который используется, чтобы разделить звуковой сигнал в два или больше диапазона частот. Перекрестные фильтры являются многополосными фильтрами, полная частотная характеристика величины которых является плоской.

Реализовывать аудио перекрестный фильтр:
Создайте crossoverFilter объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
crossFilt = crossoverFilter создает Системный объект, crossFilt, это реализует аудио перекрестный фильтр.
crossFilt = crossoverFilter( устанавливает свойство NumCrossovers на nCrossovers)nCrossovers.
crossFilt = crossoverFilter( устанавливает свойство CrossoverFrequencies на nCrossovers,xFrequencies)xFrequencies.
crossFilt = crossoverFilter( устанавливает свойство CrossoverSlopes на nCrossovers,xFrequencies,xSlopes)xSlopes.
crossFilt = crossoverFilter( устанавливает свойство SampleRate на nCrossovers,xFrequencies,xSlopes,Fs)Fs.
crossFilt = crossoverFilter(___, наборы каждое свойство Name,Value)Name к заданному Value. Незаданные свойства имеют значения по умолчанию.
crossFilt = crossoverFilter(2,'CrossoverFrequencies',[100,800],'CrossoverSlopes',[6,48]) создает Системный объект, crossFilt, с двумя перекрестными соединениями, расположенными на уровне 100 Гц и 800 Гц, и перекрестными наклонами 6 дБ/октав и 48 дБ/октав, соответственно.Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).
NumCrossovers — Количество пересечений полосы ответа величины (значение по умолчанию) | 2| 3 | 4 Количество пересечений полосы ответа величины, заданных как скалярное целое число в области значений 1 - 4.
Количество полос вывело, когда реализация перекрестной фильтрации является еще одним, чем NumCrossovers значение.
| Количество пересечений полосы ответа величины | Количество полос выводится |
|---|---|
1 | 2D полоса |
2 | с тремя полосами |
3 | с четырьмя полосами |
4 | с пятью полосами |
Настраиваемый: нет
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
CrossoverFrequencies — Частоты среза (Гц) (значение по умолчанию) | скаляр | векторЧастоты среза в Гц, заданном как скаляр или вектор действительных значений длины NumCrossovers.
Crossover frequencies является пересечениями полос ответа величины отдельных фильтров перекрестного соединения 2D полосы, используемых в многополосном перекрестном фильтре.
Настраиваемый: да
Типы данных: single | double
CrossoverSlopes — Перекрестные наклоны (дБ/октава) (значение по умолчанию) | скаляр | векторПерекрестные наклоны в дБ/октаве, заданном как скаляр или вектор действительных значений в области значений [6:6:48]. Если заданный перекрестный наклон не в области значений, наклон округлен к самому близкому позволенному значению.
Если CrossoverSlopes скаляр, все наклоны перекрестного соединения компонента 2D полосы принимают то значение.
Если CrossoverSlopes вектор длины NumCrossovers, соответствующие наклоны перекрестного соединения компонента 2D полосы принимают те значения.
Crossover slopes является наклонами отдельных полос в связанной частоте среза, как задано в перекрестном соединении компонента 2D полосы.
Настраиваемый: да
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
SampleRate — Введите частоту дискретизации (Гц) (значение по умолчанию) | положительная скалярная величинаВведите частоту дискретизации в Гц, заданном как положительная скалярная величина.
Настраиваемый: да
Типы данных: single | double
применяет перекрестный фильтр на вход, [band1,...,bandN] =
crossFilt(audioIn)audioIn, и возвращает отфильтрованные выходные полосы, [band1,...,bandN], где N = .NumCrossovers + 1
audioIn — Аудиовход, чтобы перекрестно соединить фильтрАудиовход к перекрестному фильтру, заданному как матрица. Столбцы матрицы обработаны как независимые звуковые каналы.
Типы данных: single | double
[band1,...,bandN] — Диапазоны звуковых частот выводятся от перекрестного фильтраДиапазоны звуковых частот выход от перекрестного фильтра, возвращенного как набор N полосы. Свойство NumCrossovers определяет количество возвращаемых аргументов: N = . Размер каждого выходного аргумента одного размера с NumCrossovers + 1audioIn.
Типы данных: single | double
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:
release(obj)
visualize | Визуализируйте ответ величины перекрестного фильтра |
cost | Оцените стоимость внедрения объектов аудиосистемы |
createAudioPluginClass | Создайте аудио сменный класс, который реализует функциональность Системного объекта |
parameterTuner | Настройте параметры объекта при потоковой передаче |
configureMIDI | Сконфигурируйте связи MIDI между аудио объектным и MIDI-контроллером |
disconnectMIDI | Отключите средства управления MIDI от аудио объекта |
getMIDIConnections | Получите связи MIDI аудио объекта |
clone | Создайте объект дублированной системы |
isLocked | Определите, используется ли Системный объект |
release | Высвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики |
reset | Сбросьте внутренние состояния Системного объекта |
step | Запустите алгоритм Системного объекта |
createAudioPluginClass и configureMIDI функции сопоставляют настраиваемые свойства crossoverFilter Системный объект к стоящим с пользователем параметрам:
| Свойство | Область значений | Отображение | Модуль |
|---|---|---|---|
CrossoverFrequencies | [20, 20000] | линейный | Гц |
CrossoverSlopes | [6, 48] | линейный | дБ/октава |
Используйте crossoverFilter возразите, чтобы разделить Гауссов шум в три отдельных диапазона частот.
Создайте 5-секундный шумовой сигнал, который принимает частоту дискретизации на 24 кГц.
fs = 24e3; noise = randn(fs*5,1);
Создайте crossoverFilter объект с 2 перекрестными соединениями (3 полосы), частоты среза на уровне 4 кГц и 8 кГц, наклон 48 дБ/октав и частота дискретизации 24 кГц.
crossFilt = crossoverFilter( ... 'NumCrossovers',2, ... 'CrossoverFrequencies',[4000,8000], ... 'CrossoverSlopes',48, ... 'SampleRate',fs);
Визуализируйте ответ величины своего перекрестного объекта фильтра.
visualize(crossFilt)

Вызовите свой перекрестный фильтр как функция с шумовым сигналом в качестве аргумента.
[y1,y2,y3] = crossFilt(noise);
Визуализируйте результаты с помощью спектрограммы.
figure('Position',[100,100,800,700]) subplot(4,1,1) spectrogram(noise,120,100,6000,fs,'yaxis') title('Noise') subplot(4,1,2) spectrogram(y1,120,100,6000,fs,'yaxis') title('y1') subplot(4,1,3) spectrogram(y2,120,100,6000,fs,'yaxis') title('y2') subplot(4,1,4) spectrogram(y3,120,100,6000,fs,'yaxis') title('y3')

Используйте crossoverFilter возразите, чтобы разделить звуковой сигнал в три диапазона частот.
Создайте dsp.AudioFileReader и audioDeviceWriter объекты. Используйте частоту дискретизации читателя как частота дискретизации средства записи. Вызовите setup уменьшать загрузку расчета инициализации в цикле аудиопотока.
samplesPerFrame = 256; fileReader = dsp.AudioFileReader( ... 'RockGuitar-16-44p1-stereo-72secs.wav', ... 'SamplesPerFrame',samplesPerFrame); deviceWriter = audioDeviceWriter( ... 'SampleRate',fileReader.SampleRate); setup(fileReader) setup(deviceWriter,ones(samplesPerFrame,2))
Создайте crossoverFilter объект с 2 перекрестными соединениями (3 полосы), частоты среза на уровне 500 Гц и 1 кГц, и наклон 18 дБ/октав. Используйте частоту дискретизации читателя как частота дискретизации перекрестного фильтра.
crossFilt = crossoverFilter( ... 'NumCrossovers',2, ... 'CrossoverFrequencies',[500,1000], ... 'CrossoverSlopes',18, ... 'SampleRate',fileReader.SampleRate); setup(crossFilt,ones(samplesPerFrame,2))
Визуализируйте полосы перекрестного фильтра.
visualize(crossFilt)

Получите стоимость перекрестного фильтра.
cost(crossFilt)
ans = struct with fields:
NumCoefficients: 48
NumStates: 18
MultiplicationsPerInputSample: 48
AdditionsPerInputSample: 37
Создайте спектр анализатор, чтобы визуализировать эффект перекрестного фильтра.
scope = dsp.SpectrumAnalyzer( ... 'SampleRate',fileReader.SampleRate, ... 'PlotAsTwoSidedSpectrum',false, ... 'FrequencyScale','Log', ... 'FrequencyResolutionMethod','WindowLength', ... 'WindowLength',samplesPerFrame, ... 'Title','Crossover Bands and Reconstructed Signal', ... 'ShowLegend',true, ... 'ChannelNames',{'Original Signal','Band 1','Band 2','Band 3','Sum'});
Проигрывайте 10 секунд звукового сигнала. Визуализируйте спектр исходного аудио, перекрестных полос и восстановленного сигнала (сумма полос).
setup(scope,ones(samplesPerFrame,5)) count = 0; while count < (fileReader.SampleRate/samplesPerFrame)*10 originalSignal = fileReader(); [band1,band2,band3] = crossFilt(originalSignal); sumOfBands = band1 + band2 + band3; scope([originalSignal(:,1), ... band1(:,1), ... band2(:,1), ... band3(:,1), ... sumOfBands(:,1)]) deviceWriter(sumOfBands); count = count + 1; end release(fileReader) release(crossFilt) release(scope)

release(deviceWriter)
De-Эссинг является процессом уменьшения свистящих звуков в звуковом сигнале. Шипение относится к s, z, и звукам sh в речи, которая может быть непропорционально подчеркнута во время записи. звуки es подпадают под категорию неречевой речи со всеми согласными и имеют более высокую частоту, чем речевая речь. В этом примере вы применяете полосу разделения de-Эссинг к речевому сигналу путем разделения сигнала на высокие частоты и низкие частоты, применения расширителя, чтобы уменьшить свистящие частоты, и затем делания ремикс каналов.
Создайте dsp.AudioFileReader возразите и audioDeviceWriter возразите, чтобы читать из звукового файла и записать в аудио устройство. Слушайте необработанный сигнал. Затем выпустите средство записи устройства и средство чтения файлов.
fileReader = dsp.AudioFileReader( ... fullfile(matlabroot,'examples','audio','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)

Создайте dsp.TimeScope Системный объект, чтобы визуализировать исходные и обработанные звуковые сигналы.
scope = dsp.TimeScope( ... 'SampleRate',fileReader.SampleRate, ... 'TimeSpanOverrunAction','Scroll', ... '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)
Plosives являются совместимыми звуками, следующими из внезапного релиза потока воздуха. Они являются самыми явными в словах, начинающихся p, d, и звуках g. Plosives могут быть подчеркнуты процессом записи и часто displeasurable, чтобы услышать. В этом примере вы минимизируете plosives речевого сигнала путем применения highpass сжатия низкой полосы и фильтрации.
Создайте 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)
Спроектируйте фильтр highpass с крутым спадом всех частот ниже 120 Гц. Используйте dsp.BiquadFilter возразите, чтобы реализовать highpass создание фильтра. Создайте перекрестный фильтр с одним перекрестным соединением на уровне 250 Гц. Перекрестный фильтр позволяет вам разделить представляющую интерес полосу для обработки. Создайте компрессор динамического диапазона, чтобы сжать динамический диапазон звуков plosive. Чтобы не применить усиление состава, установите MakeUpGainMode к "Property" и используйте MakeUpGain на 0 дБ по умолчанию значение свойства. Создайте осциллограф времени, чтобы визуализировать обработанный и необработанный звуковой сигнал.
[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 = dsp.TimeScope( ... "SampleRate",fileReader.SampleRate, ... "TimeSpan",3, ... "BufferLength",fileReader.SampleRate*3*2, ... "YLimits",[-1 1], ... "ShowGrid",true, ... "ShowLegend",true, ... "ChannelNames",{'Original','Processed'});
В цикле аудиопотока:
Читайте в системе координат звукового файла.
Примените highpass, фильтрующий использование вашего фильтра biquad.
Разделите звуковой сигнал в две полосы.
Примените сжатие динамического диапазона к нижней полосе.
Сделайте ремикс каналов.
Запишите обработанный звуковой сигнал в свое аудио устройство для слушания.
Визуализируйте обработанные и необработанные сигналы на осциллографе времени.
Как лучшая практика, выпустите свои объекты, однажды сделанные.
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 записать аудио в вашу звуковую карту. Создайте crossoverFilter обработать аудиоданные. Вызов визуализирует, чтобы построить частотные характеристики фильтров.
frameLength = 1024; fileReader = dsp.AudioFileReader('RockDrums-44p1-stereo-11secs.mp3', ... 'SamplesPerFrame',frameLength); deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate); xFilt = crossoverFilter('SampleRate',fileReader.SampleRate); visualize(xFilt)

Вызовите parameterTuner открыть пользовательский интерфейс для настроек параметров перекрестного фильтра при потоковой передаче.
parameterTuner(xFilt)

В цикле аудиопотока:
Читайте в системе координат аудио из файла.
Примените перекрестную фильтрацию.
Запишите систему координат аудио к вашему аудио устройству для слушания.
В то время как потоковая передача, настройки параметров перекрестного фильтра и слушает эффект.
while ~isDone(fileReader) audioIn = fileReader(); [low,high] = xFilt(audioIn); deviceWriter([low(:,1),high(:,1)]); drawnow limitrate % required to update parameter end
Как лучшая практика, выпустите свои объекты, однажды сделанные.
release(deviceWriter) release(fileReader) release(xFilt)
Перекрестный Системный объект реализован как двоичное дерево перекрестных пар с дополнительными компенсирующими фазу разделами [1]. Перекрестные соединения нечетного порядка реализованы с Фильтрами Баттерворта, в то время как перекрестные соединения ровного порядка реализованы с каскадными Фильтрами Баттерворта (Linkwitz-раздраженные фильтры).
2D полоса нечетного порядка (одно перекрестное соединение) фильтры реализована как параллельный дополнительный highpass и фильтры lowpass.

LP и HP являются Фильтры Баттерворта порядка N, реализованный как прямая форма Ⅱ транспонированные секции второго порядка. Разделяемая частота среза, используемая в их проекте, соответствует перекрестному соединению получившихся полос.
2D полоса ровного порядка (одно перекрестное соединение) фильтры реализована как параллельный дополнительный highpass и фильтры lowpass.

LP и HP являются Фильтры Баттерворта порядка N/2, где N является порядком полного фильтра. Фильтры реализованы как прямая форма Ⅱ транспонированные секции второго порядка.
Для полных фильтров порядков 2 и 6 X HI умножается на –1 внутренне так, чтобы ветви вашей перекрестной пары были синфазными.
Ровный порядок, с тремя полосами (два перекрестных соединения) фильтры, реализован как параллельный дополнительный highpass и фильтры lowpass, организованные в древовидной структуре.

Компенсирующий фазу раздел эквивалентен фильтру allpass.
Проект с четырьмя полосами и с пятью ленточными фильтрами (три и четыре перекрестных соединения) является расширениями шаблона, разработанного для перекрестных соединений ровного порядка и нечетного порядка и древовидной структуры, заданной для с тремя полосами (два перекрестных соединения) фильтры.
[1] Д'Апполито, Джозеф А. "Активная Реализация Многоканальных Систем Перекрестного соединения все-Передачи". Журнал Общества звукоинженеров. Издание 35, Выпуск 4, 1987, стр 239–245.
Указания и ограничения по применению:
Системные объекты в Генерации кода MATLAB (MATLAB Coder)
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.