weightingFilter

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

Описание

The 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) создает фильтр С-взвешиванием со скоростью дискретизации 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Возврат объекта биквадного фильтра с набором расчётных параметров
createAudioPluginClassСоздайте класс аудиоплагина, который реализует функциональность Системного объекта
isStandardCompliantПроверьте соответствие создания фильтра IEC 61672-1: 2002
cloneСоздайте повторяющийся системный объект
isLockedОпределите, используется ли системный объект
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта
stepЗапуск алгоритма системного объекта

Примечание

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

Примеры

свернуть все

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

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

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

visualize(aWeight,'class 1')

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

aWeight.SampleRate = 44100;

complianceStatus = isStandardCompliant(aWeight,'class 1')
complianceStatus = logical
   1

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

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

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title A-Weighted Filtering contains 2 objects of type line. These objects represent Original signal, Filtered signal.

Сравните 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')

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 3 objects of type line. These objects represent A-weighting, C-weighting, K-weighting.

The 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-взвешенный, C-взвешенный и K-взвешенный фильтры, последовательно.

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)

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

Использование weightingFilter для создания объектов фильтра С-взвешенным и А-взвешенным. Использование getFilter для возврата соответствующих dsp.BiquadFilter объекты.

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

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

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-взвешенным фильтром. Затем воспроизведите сигнал, обработанный С-взвешенным фильтром. Кэшируйте степень в каждой системе координат исходных и отфильтрованных сигналов для анализа. В качестве наилучшей практики отпустите устройство чтения файлов и средство записи после завершения.

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-взвешенного сигнала и C-взвешенного сигнала с течением времени.

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

Figure contains 2 axes. Axes 1 with title Original Signal contains an object of type image. Axes 2 contains 3 objects of type line. These objects represent Original Signal, A-Weighted, C-Weighted.

Алгоритмы

расширить все

Ссылки

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

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

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

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

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

.
Введенный в R2016b