weightingFilter

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

Описание

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

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

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

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

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

Создание

Описание

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

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

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

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

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

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

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

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

Описание

пример

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Запустите алгоритм Системного объекта

Примечание

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

Примеры

свернуть все

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

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

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

visualize(aWeight,'class 1')

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

aWeight.SampleRate = 44100;

complianceStatus = isStandardCompliant(aWeight,'class 1')
complianceStatus = logical
   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);

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

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

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

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

wF{1} = weightingFilter;
wF{2} = weightingFilter('C-weighting');
wF{3} = weightingFilter('K-weighting');

fvtool(wF{1},wF{2},wF{3},'FrequencyScale','Log','Fs',wF{1}.SampleRate)
legend('A-weighting','C-weighting','K-weighting','location','best')

weightingFilter поддержка объектов несколько методов анализа фильтра. Для получения дополнительной информации используйте help в командной строке:

help weightingFilter.helpFilterAnalysis
    The following analysis methods are available for discrete-time filter System objects:
 
    fvtool       -  Filter visualization tool
    info         -  Filter information
    freqz        -  Frequency response
    phasez       -  Phase response
    zerophase    -  Zero-phase response
    grpdelay     -  Group delay response
    phasedelay   -  Phase delay response
    impz         -  Impulse response
    impzlength   -  Length of impulse response
    stepz        -  Step response
    zplane       -  Pole/zero plot
    cost         -  Cost estimate for implementation of the filter System object
    measure      -  Measure characteristics of the frequency response   
 
    order        -  Filter order
    coeffs       -  Filter coefficients in a structure
    firtype      -  Determine the type (1-4) of a linear phase FIR filter System object
    tf           -  Convert to transfer function
    zpk          -  Convert to zero-pole-gain
    ss           -  Convert to state space representation
 
    isallpass    -  Verify if filter System object is allpass
    isfir        -  Verify if filter System object is FIR
    islinphase   -  Verify if filter System object is linear phase
    ismaxphase   -  Verify if filter System object is maximum phase
    isminphase   -  Verify if filter System object is minimum phase
    isreal       -  Verify if filter System object is minimum real
    issos        -  Verify if filter System object is in second-order sections form
    isstable     -  Verify if filter System object is stable
 
    realizemdl   -  Filter realization (Simulink diagram)   
 
    specifyall   -  Fully specify fixed-point filter System object settings  
 
    cascade      -  Create a FilterCascade System object  
 
    Second-order sections:
 
    scale        -  Scale second-order sections of BiquadFilter System object
    scalecheck   -  Check scaling of BiquadFilter System object
    reorder      -  Reorder second-order sections of BiquadFilter System object
    cumsec       -  Cumulative second-order section of BiquadFilter System object
    scaleopts    -  Create an options object for second-order section scaling
    sos          -  Convert to second-order-sections (for IIRFilter System objects only)
 
    Fixed-Point (Fixed-Point Designer Required):
 
    freqrespest  -  Frequency response estimate via filtering
    freqrespopts -  Create an options object for frequency response estimate
    noisepsd     -  Power spectral density of filter output due to roundoff noise
    noisepsdopts -  Create an options object for output noise PSD computation
 
    Multirate Analysis:
 
    polyphase                - Polyphase decomposition of multirate filter System object
    gain (CIC decimator)     - Gain of CIC decimator filter System object
    gain (CIC interpolator)  - Gain of CIC interpolator filter System object
 
    For decimator, interpolator, or rate change filter System objects
    the analysis tools perform computations relative to the rate at
    which the filter is running. If a sampling frequency is specified,
    it is assumed that the filter is running at that rate.

Help for weightingFilter.helpFilterAnalysis is inherited from superclass DSP.PRIVATE.FILTERANALYSIS

Создайте 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...')
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
A-weighted filtering...
C-weighted filtering...
K-weighted filtering...

Как лучшая практика, выпустите свои объекты, однажды сделанные.

release(deviceWriter)
release(fileReader)

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