crossoverFilter

Аудио перекрестный фильтр

Описание

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

Реализовывать аудио перекрестный фильтр:

  1. Создайте объект crossoverFilter и установите его свойства.

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

crossFilt = crossoverFilter
crossFilt = crossoverFilter(nCrossovers)
crossFilt = crossoverFilter(nCrossovers,xFrequencies)
crossFilt = crossoverFilter(nCrossovers,xFrequencies,xSlopes)
crossFilt = crossoverFilter(nCrossovers,xFrequencies,xSlopes,Fs)
crossFilt = crossoverFilter(___,Name,Value)

Описание

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

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

crossFilt = crossoverFilter(nCrossovers,xFrequencies) устанавливает свойство CrossoverFrequencies на xFrequencies.

crossFilt = crossoverFilter(nCrossovers,xFrequencies,xSlopes) устанавливает свойство CrossoverSlopes на xSlopes.

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

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

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).

Количество пересечений полосы ответа значения, заданных как скалярное целое число в области значений 1 - 4.

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

Количество пересечений полосы ответа значенияКоличество полос выводится
12D полоса
2с тремя полосами
3с четырьмя полосами
4с пятью полосами

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

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

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

Crossover frequencies является пересечениями полос ответа значения отдельных фильтров перекрестного соединения 2D полосы, используемых в многополосном перекрестном фильтре.

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

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

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

  • Если CrossoverSlopes является скаляром, все наклоны перекрестного соединения компонента 2D полосы принимают то значение.

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

Crossover slopes является наклонами отдельных полос на связанной перекрестной частоте, как задано в перекрестном соединении компонента 2D полосы.

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

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

Введите частоту дискретизации в Гц, заданном как положительная скалярная величина.

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

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

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

[band1,...,bandN] = crossFilt(audioIn)

Описание

пример

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

Входные параметры

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

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

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

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

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

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

Типы данных: 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 object™, чтобы разделить Гауссов шум в три отдельных диапазона частот.

Создайте 5-секундный шумовой сигнал, который принимает частоту дискретизации на 12 000 Гц.

noise = randn(12000*5,1);

Создайте Системный объект crossoverFilter с 2 перекрестными соединениями (3 полосы), перекрестно соедините частоты на уровне 4 кГц и 8 кГц, наклон 48 дБ/октав и частоту дискретизации 24 кГц.

crossFilt = crossoverFilter(...
    'NumCrossovers',2,...
    'CrossoverFrequencies',[4000,8000],...
    'CrossoverSlopes',48,...
    'SampleRate',24000);

Визуализируйте ответ значения своего перекрестного объекта фильтра.

visualize(crossFilt)

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

[y1,y2,y3] = crossFilt(noise);

Визуализируйте результаты с помощью спектрограммы.

figure('Position',[100,100,800,700]);
subplot(4,1,1)
    spectrogram(noise,120,100,6000,24000,'yaxis')
        title('Noise')
subplot(4,1,2)
    spectrogram(y1,120,100,6000,24000,'yaxis')
        title('y1')
subplot(4,1,3)
    spectrogram(y2,120,100,6000,24000,'yaxis')
        title('y2')
subplot(4,1,4)
    spectrogram(y3,120,100,6000,24000,'yaxis')
        title('y3')

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

Создайте Системные объекты audioDeviceWriter и dsp.AudioFileReader. Используйте частоту дискретизации читателя как частота дискретизации средства записи. Вызовите 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)

Создайте спектр анализатор, чтобы визуализировать эффект перекрестного фильтра.

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 object™ и Системный объект 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',44100*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)

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

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

fileReader   = dsp.AudioFileReader( ...
    fullfile(matlabroot,'examples','audio','Plosives.wav'));
deviceWriter = audioDeviceWriter;

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/(44100/2),'hi');
biquadFilter = dsp.BiquadFilter( ...
    'SOSMatrixSource','Input port', ...
    'ScaleValuesInputPort',false);

crossFilt = crossoverFilter( ...
    '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'});

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

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

  2. Примените highpass, фильтрующий использование вашего фильтра biquad.

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

Создайте 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)

Алгоритмы

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

Перекрестный Системный объект реализован как двоичное дерево перекрестных пар с дополнительными компенсирующими фазу разделами [1]. Перекрестные соединения нечетного порядка реализованы с Фильтрами Баттерворта, в то время как перекрестные соединения ровного порядка реализованы с каскадными Фильтрами Баттерворта (Linkwitz-раздраженные фильтры).

Ссылки

[1] Д'Апполито, Джозеф А. "Активная Реализация Многоканальных Систем Перекрестного соединения все-Передачи". Журнал Общества звукоинженеров. Издание 35, Выпуск 4, 1987, стр 239–245.

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

Смотрите также

Блоки

Системные объекты

Введенный в R2016a