exponenta event banner

crossoverFilter

Фильтр перекрещивания звука

Описание

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

Для реализации фильтра перекрещивания звука:

  1. Создать crossoverFilter и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

crossFilt = crossoverFilter создает объект System, crossFilt, который реализует фильтр перекрещивания звука.

crossFilt = crossoverFilter(nCrossovers) устанавливает для свойства NumCrossovers значение nCrossovers.

crossFilt = crossoverFilter(nCrossovers,xFrequencies) устанавливает для свойства CrossureFrequences значение xFrequencies.

crossFilt = crossoverFilter(nCrossovers,xFrequencies,xSlopes) устанавливает для свойства «Поперечные откосы» значение xSlopes.

crossFilt = crossoverFilter(nCrossovers,xFrequencies,xSlopes,Fs) устанавливает для свойства SampleRate значение Fs.

crossFilt = crossoverFilter(___,Name,Value) задает каждое свойство Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.

Пример: crossFilt = crossoverFilter(2,'CrossoverFrequencies',[100,800],'CrossoverSlopes',[6,48]) создает объект System, crossFilt, с двумя кроссоверами, расположенными на частоте 100 Гц и 800 Гц, и поперечными уклонами 6 дБ/октава и 48 дБ/октава соответственно.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Число пересечений полосы откликов по величине, указанное как скалярное целое число в диапазоне от 1 до 4.

Количество выходных полос при реализации перекрестной фильтрации на один больше, чем NumCrossovers значение.

Количество пересечений диапазонов откликов по величинеКоличество выходных полос
1двухполосный
2трехполосный
3четырехдиапазонный
4пятиполосный

Настраиваемый: Нет

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Частоты пересечения в Гц, заданные как скаляр или вектор действительных значений длины NumCrossovers.

Перекрестные частоты - это пересечения диапазонов амплитудной характеристики отдельных двухполосных перекрестных фильтров, используемых в многополосном перекрестном фильтре.

Настраиваемый: Да

Типы данных: single | double

Перекрещивающиеся наклоны в дБ/октаве, заданные как скаляр или вектор вещественных значений в диапазоне [6:6:48]. Если заданный поперечный уклон не находится внутри диапазона, наклон округляется до ближайшего допустимого значения.

  • Если CrossoverSlopes - скаляр, все двухполосные поперечные наклоны компонентов принимают это значение.

  • Если CrossoverSlopes - вектор длины NumCrossovers, соответствующие двухполосные секущие откосы компонентов принимают эти значения.

Перекрещивающиеся уклоны - это уклоны отдельных полос на соответствующей частоте перекрещивания, как указано в двухполосном компонентном перекрещивании.

Настраиваемый: Да

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Частота входных выборок в Гц, заданная как положительный скаляр.

Настраиваемый: Да

Типы данных: single | double

Использование

Описание

пример

[band1,...,bandN] = crossFilt(audioIn) применяет на входе перекрестный фильтр, audioInи возвращает отфильтрованные выходные полосы, [band1,...,bandN], где N = NumCrossovers + 1.

Входные аргументы

развернуть все

Вход звука в фильтр кроссовера, заданный как матрица. Столбцы матрицы обрабатываются как независимые аудиоканалы.

Типы данных: single | double

Выходные аргументы

развернуть все

Звуковые полосы, выводимые из перекрестного фильтра, возвращаемые в виде набора N полосы. Свойство NumCrossovers определяет количество возвращаемых аргументов: N = NumCrossovers + 1. Размер каждого выходного аргумента совпадает с audioIn.

Типы данных: single | double

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

visualizeВизуализация амплитудной характеристики перекрестного фильтра
costОценка затрат на внедрение объектов аудиосистемы
createAudioPluginClassСоздать класс аудиоплагинов, реализующий функциональность объекта System
parameterTunerНастройка параметров объекта во время потоковой передачи
configureMIDIНастройка соединений MIDI между аудиообъектом и контроллером MIDI
disconnectMIDIОтключить элементы управления MIDI от аудиообъекта
getMIDIConnectionsПолучение MIDI-соединений аудиообъекта
cloneСоздать повторяющийся объект System
isLockedОпределить, используется ли объект System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System
stepЗапустить алгоритм объекта System

createAudioPluginClass и configureMIDI функции отображают настраиваемые свойства crossoverFilter Системный объект для пользовательских параметров:

СобственностьДиапазонОтображениеЕдиница
CrossoverFrequencies[20, 20000]линейныйHz
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')

Figure contains 4 axes. Axes 1 with title Noise contains an object of type image. Axes 2 with title y1 contains an object of type image. Axes 3 with title y2 contains an object of type image. Axes 4 with title y3 contains an object of type image.

Используйте crossoverFilter объект для разделения звукового сигнала на три полосы частот.

Создать dsp.AudioFileReader и audioDeviceWriter объекты. Используйте частоту выборки устройства чтения в качестве частоты выборки устройства записи.

samplesPerFrame = 256;

fileReader = dsp.AudioFileReader( ...
    'RockGuitar-16-44p1-stereo-72secs.wav', ...
    'SamplesPerFrame',samplesPerFrame);
deviceWriter = audioDeviceWriter( ...
    'SampleRate',fileReader.SampleRate);

Создать crossoverFilter объект с 2 пересечениями (3 полосы), частотами пересечений на 500 Гц и 1 кГц, наклоном 18 дБ/октава. Используйте частоту дискретизации считывателя в качестве частоты дискретизации перекрестного фильтра.

crossFilt = crossoverFilter( ...
    'NumCrossovers',2, ...
    'CrossoverFrequencies',[500,1000], ...
    'CrossoverSlopes',18, ...
    'SampleRate',fileReader.SampleRate);

Визуализируйте полосы перекрестного фильтра.

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(deviceWriter)
release(scope)

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Crossover Bands and Reconstructed Signal contains 5 objects of type line. These objects represent Original Signal, Band 1, Band 2, Band 3, Sum.

Деэссенция - это процесс уменьшения звуков сибилянта в звуковом сигнале. Сибиланс относится к звукам s, z и sh в речи, которые могут быть непропорционально подчеркнуты во время записи. эс звуки подпадают под категорию невокализированной речи со всеми согласными и имеют более высокую частоту, чем звонкая речь. В этом примере к речевому сигналу применяется деэссенция в разделенном диапазоне путем разделения сигнала на высокие и низкие частоты, применения расширителя для уменьшения частот sibilant и последующего повторного смешивания каналов.

Создать dsp.AudioFileReader объект и audioDeviceWriter объект для чтения из звукового файла и записи в звуковое устройство. Прослушайте необработанный сигнал. Затем отпустите средство чтения файлов и устройство записи.

fileReader = dsp.AudioFileReader( ...
    'Sibilance.wav');
deviceWriter = audioDeviceWriter;

while ~isDone(fileReader)
    audioIn = fileReader();
    deviceWriter(audioIn);
end

release(deviceWriter)
release(fileReader)

Создание expander Системный объект отменяет звуковой сигнал. Установите частоту дискретизации расширителя на частоту дискретизации аудиофайла. Создайте двухполосный перекрестный фильтр с частотой перехода 3000 Гц. В этом диапазоне обычно встречается сибиланс. Задайте уклон пересечения равным 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'});

В цикле аудиопотока:

  1. Чтение в кадре аудиофайла.

  2. Разделение звукового сигнала на две полосы.

  3. Примените динамическое расширение диапазона к верхней полосе.

  4. Переделать каналы.

  5. Запишите обработанный аудиосигнал на аудиоустройство для прослушивания.

  6. Визуализация обработанных и необработанных сигналов во временном диапазоне.

Рекомендуется деблокировать объекты после их завершения.

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)

Плозивы - созвучные звуки, возникающие в результате внезапного высвобождения воздушного потока. Они наиболее выражены в словах, начинающихся со звуков p, d и g. Плосивы могут быть подчеркнуты в процессе записи и часто неудивительны, чтобы услышать. В этом примере сведение к минимуму спозивов речевого сигнала осуществляется с помощью фильтрации верхних частот и низкополосного сжатия.

Создать 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 изобретение позволяет реализовать конструкцию фильтра верхних частот. Создайте перекрестный фильтр с одним перекрестным фильтром на частоте 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'});

В цикле аудиопотока:

  1. Чтение в кадре аудиофайла.

  2. Примените фильтрацию верхних частот с помощью биквад-фильтра.

  3. Разделение звукового сигнала на две полосы.

  4. Примените динамическое сжатие диапазона к нижней полосе.

  5. Переделать каналы.

  6. Запишите обработанный аудиосигнал на аудиоустройство для прослушивания.

  7. Визуализация обработанных и необработанных сигналов во временном диапазоне.

Рекомендуется деблокировать объекты после их завершения.

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)

В цикле аудиопотока:

  1. Считывание в кадре звука из файла.

  2. Применить перекрестную фильтрацию.

  3. Запишите кадр звука на аудиоустройство для прослушивания.

Во время потоковой передачи настройте параметры фильтра кроссовера и прислушайтесь к эффекту.

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)

Алгоритмы

развернуть все

Объект crossover System реализован в виде двоичного дерева пар crossover с дополнительными фазово-компенсирующими секциями [1]. Кроссоверы нечётного порядка реализуются с фильтрами Баттерворта, в то время как кроссоверы чётного порядка реализуются с каскадными фильтрами Баттерворта (фильтрами Линквица-Райли).

Ссылки

[1] Д'Апполито, Джозеф А. «Активная реализация многопутевых всепроходных кроссоверных систем». Журнал Общества аудиотехники. Том 35, выпуск 4, 1987, стр. 239-245.

Расширенные возможности

.

См. также

Объекты

Блоки

Представлен в R2016a