weightingFilter

Взвешенный частотой фильтр

Описание

Система weightingFilter object™ выполняет взвешенную частотой фильтрацию независимо через каждый входной канал.

Выполнять взвешенную частотой фильтрацию:

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

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

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

Создание

Синтаксис

weightFilt = weightingFilter
weightFilt = weightingFilter(weightType)
weightFilt = weightingFilter(weightType,Fs)
weightFilt = weightingFilter(___,Name,Value)

Описание

weightFilt = weightingFilter создает Системный объект, weightFilt, который выполняет взвешенную частотой фильтрацию независимо через каждый входной канал.

weightFilt = weightingFilter(weightType) устанавливает свойство Method на weightType.

weightFilt = weightingFilter(weightType,Fs) устанавливает свойство SampleRate на Fs.

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

Пример: weightFilt = weightingFilter('C-weighting','SampleRate',96000) создает фильтр C-взвешивания с частотой дискретизации 96 000 Гц.

Свойства

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

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

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

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

Тип взвешивания, заданного как 'A-weighting', 'C-weighting' или 'K-weighting'. См. Алгоритмы для получения дополнительной информации.

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

Типы данных: char | string

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

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

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

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

Синтаксис

audioOut = weightFilt(audioIn)

Описание

пример

audioOut = weightFilt(audioIn) применяет взвешенную частотой фильтрацию к входному сигналу, audioIn, и возвращает отфильтрованный сигнал, audioOut. Тип фильтрации задан алгоритмом и свойствами Системного объекта weightingFilter, weightFilt.

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

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

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

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

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

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

Аудиовыход от фильтра взвешивания, возвращенного как матрица тот же размер как audioIn.

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

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

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

release(obj)

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

visualizeВизуализируйте и подтвердите ответ фильтра
getFilterВозвратите biquad объект фильтра с набором параметров проекта
createAudioPluginClassСоздайте аудио сменный класс, который реализует функциональность Системного объекта
isStandardCompliantПроверьте, что проект фильтра является IEC, 61672-1:2002 совместимый
cloneСоздайте объект дублированной системы
isLockedОпределите, используется ли Системный объект
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта
stepЗапустите алгоритм Системного объекта

Примеры

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

Проверяйте состояние соответствия проектов фильтра и визуализируйте их.

Создайте фильтр A-взвешивания с частотой дискретизации на 22,5 кГц. Проверьте, что фильтр стандартный совместимый, и визуализируйте проект фильтра.

aWeight = weightingFilter('A-weighting','SampleRate',22500);
complianceStatus = isStandardCompliant(aWeight,'class 1')
visualize(aWeight,'class 1')

Измените свою частоту дискретизации фильтра A-взвешивания на 44,1 кГц. Проверьте, что фильтр стандартный совместимый, и визуализируйте проект фильтра.

aWeight.SampleRate = 44100;
complianceStatus = isStandardCompliant(aWeight,'class 1')
visualize(aWeight,'class 1')

Используйте Систему weightingFilter object™, чтобы разработать фильтр A-weighted, и затем обработать звуковой сигнал с помощью взвешенного частотой проекта фильтра.

Создайте Системный объект dsp.AudioFileReader.

samplesPerFrame = 1024;
reader = dsp.AudioFileReader('Filename', ...
    'RockGuitar-16-44p1-stereo-72secs.wav', ...
    'SamplesPerFrame',samplesPerFrame, ...
    'PlayCount',Inf);

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

Fs = reader.SampleRate;
weightFilt = weightingFilter('A-weighting',Fs);

Визуализируйте ответ фильтра и проверьте, что он соответствует в маске класса 1 IEC 61672-1:2002 стандарту.

visualize(weightFilt,'class 1')

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

scope = dsp.SpectrumAnalyzer( ...
    'SampleRate',Fs, ...
    'PlotAsTwoSidedSpectrum',false, ...
    'FrequencyScale','Log', ...
    'FrequencyResolutionMethod','WindowLength', ...
    'WindowLength',samplesPerFrame, ...
    'Title','A-Weighted Filtering', ...
    'ShowLegend',true, ...
    'ChannelNames',{'Original signal','Filtered signal'});

Обработайте звуковой сигнал в цикле аудиопотока. Визуализируйте отфильтрованное аудио и исходное аудио. Как лучшая практика, выпустите Системные объекты, когда завершенный.

tic
while toc < 20
    x = reader();
    y = weightFilt(x);
    scope([x(:,1),y(:,1)])
end

release(weightFilt)
release(scope)
release(reader)

Сравните A-weighted, C-weighted и фильтрацию K-weighted звука механизма.

Создайте фильтр A-взвешивания, фильтр C-взвешивания и фильтр K-взвешивания. Визуализируйте фильтры для анализа и сравнения.

wF{1} = weightingFilter;
visualize(wF{1})

wF{2} = weightingFilter('C-weighting');
visualize(wF{2})

wF{3} = weightingFilter('K-weighting');
visualize(wF{3})

Создайте dsp.AudioFileReader и задайте звуковой файл. Создайте audioDeviceWriter со свойствами по умолчанию. В цикле аудиопотока проигрывайте белый шум, и затем слушайте его, проник в A-weighted, C-weighted и фильтры K-weighted, последовательно.

fileReader = dsp.AudioFileReader('Engine-16-44p1-stereo-20sec.wav');
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

fprintf('No filtering...')
for i = 1:400
    x = fileReader();
    if i==100
        index = 1;
        fprintf('A-weighted filtering...')
    elseif i==200
        index = 2;
        fprintf('C-weighted filtering...')
    elseif i==300
        index = 3;
        fprintf('K-weighted filtering...\n')
    end
    if i>99
        y = wF{index}(x);
    else
        y = x;
    end
    deviceWriter(y);
end

release(deviceWriter)
release(fileReader)
No filtering...A-weighted filtering...C-weighted filtering...K-weighted filtering...

Объект weightingFilter использует разделы второго порядка (SOS) для фильтрации. Чтобы извлечь проект фильтра взвешивания, используйте getFilter, чтобы возвратить объект dsp.BiquadFilter с набором свойств SOSMatrix и ScaleValues.

Используйте weightingFilter, чтобы создать C-weighted и объекты фильтра A-weighted. Используйте getFilter, чтобы возвратить соответствующие объекты dsp.BiquadFilter.

cFilt = weightingFilter('C-weighting');
aFilt = weightingFilter('A-weighting');
cSOSFilter = getFilter(cFilt);
aSOSFilter = getFilter(aFilt);

Создайте считывающее устройство звукового файла и средство записи аудио устройства для аудиовхода / вывод. Используйте частоту дискретизации своего читателя как частота дискретизации вашего средства записи.

fileReader = dsp.AudioFileReader('JetAirplane-16-11p025-mono-16secs.wav');
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);

В цикле аудиопотока проигрывайте неотфильтрованный сигнал. Выпустите свое средство чтения файлов так, чтобы в следующий раз вы вызвали его, оно читает с начала файла.

tic
while toc<8
    x = fileReader();
    deviceWriter(x);
end
release(fileReader)

Проигрывайте сигнал, обработанный фильтром A-weighted. Затем проигрывайте сигнал, обработанный фильтром C-weighted. Кэшируйте степень в каждом кадре исходных и отфильтрованных сигналов для анализа. Как лучшая практика, выпустите свое средство чтения файлов и средство записи устройства однажды завершенный.

y = [];
count = 1;
tic
while ~isDone(fileReader)
    x = fileReader();
    aFiltered = aSOSFilter(x);
    cFiltered = cSOSFilter(x);
    if toc>8
        deviceWriter(cFiltered);
    else
        deviceWriter(aFiltered);
    end
    xPower(count) = var(x);
    aPower(count) = var(aFiltered);
    cPower(count) = var(cFiltered);
    y = [y;x];
    count = count+1;
end

release(fileReader)
release(deviceWriter)

Постройте степень исходного сигнала, сигнала A-weighted и сигнала C-weighted в зависимости от времени.

subplot(2,1,1)
    spectrogram(y,512,256,4096,fileReader.SampleRate,'yaxis')
    title('Original Signal')
subplot(2,1,2)
    t = linspace(0,16.3468,count-1);
    plot(t,xPower,'r',t,aPower,'b',t,cPower,'g')
        legend('Original Signal','A-Weighted','C-Weighted')
        xlabel('Time (s)')
        ylabel('Power')

Алгоритмы

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

Ссылки

[1] Акустическое общество Америки. Разработайте ответ взвешивания сетей для акустических измерений. ANSI S1.42-2001. Нью-Йорк, Нью-Йорк: Американский национальный институт стандартов, 2001.

[2] Международная электротехническая комиссия. Часть 1 метров уровня звука электроакустики: спецификации. Первый выпуск. IEC 61672-1. 2002–2005.

[3] Международный союз электросвязи. Алгоритмы, чтобы измерить аудио громкость программы и истинно-пиковый уровень звука. ITU-R BS.1770-4. 2015.

[4] Мансбридж, Стюарт, Сирша Финн и Джошуа Д. Рейсс. "Реализация и Оценка Автономного Многодорожечного Управления Регулятором громкости". Доклад сделан в 132-м Соглашении Общества звукоинженеров, Будапеште, Венгрия, 2012.

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

Введенный в R2017b