crossoverFilter

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

Описание

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

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

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

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

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

Создание

Описание

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 Используя Системные объекты.

Количество пересечений полосы ответа величины в виде скалярного целого числа в области значений 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

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

Описание

пример

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

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

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)

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'});

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

  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 возразите и 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 = 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. Примените 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(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)

Алгоритмы

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

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

Ссылки

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

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

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

Объекты

Блоки

Введенный в R2016a