exponenta event banner

weightingFilter

Фильтр с частотным взвешиванием

Описание

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

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

  1. Создать weightingFilter и задайте его свойства.

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

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

weightFilt = weightingFilter создает объект System, 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

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

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

release(obj)

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

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

Примечание

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

Примеры

свернуть все

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

Создайте фильтр A-weighting с частотой дискретизации 22,5 кГц. Убедитесь, что фильтр соответствует стандартам, и визуализируйте конструкцию фильтра.

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

visualize(aWeight,'class 1')

Измените частоту дискретизации фильтра A-weighting на 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.

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)

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

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

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)

Постройте график мощности исходного сигнала, А-взвешенного сигнала и С-взвешенного сигнала во времени.

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] Международный союз электросвязи. Алгоритмы измерения громкости аудиопрограмм и уровня звука истинного пика. BS.1770-4 ITU-R. 2015.

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

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

.
Представлен в R2016b