dsp.SOSFilter

Секция второго порядка биквадратичные структуры БИХ фильтра

Описание

The dsp.SOSFilter Система object™ реализует структуру БИХ, используя секции второго порядка (SOS).

Реализация структуры БИХ с использованием SOS:

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

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

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

Создание

Описание

пример

sos = dsp.SOSFilter возвращает биквадратичный фильтр БИХ Системного объекта, sos, который независимо фильтрует каждый канал (столбец) входа с течением времени с помощью заданной биквадратической структуры.

sos = dsp.SOSFilter(num,den) возвращает объект биквадратичного фильтра со Numerator значение свойства установлено в num и Denominator значение свойства установлено в den.

sos = dsp.SOSFilter(Name,Value) возвращает объект биквадратичного фильтра с каждым набором свойств заданное значение. Заключайте каждое имя свойства в одинарные кавычки.

Пример: sos = dsp.SOSFilter('CoefficientSource','Input port')

Свойства

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

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

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

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

Структура фильтра, заданная как одно из 'Direct form I', 'Direct form I transposed', 'Direct form II', или 'Direct form II transposed'.

Источник коэффициентов фильтра, заданный как один из следующих:

  • 'Property' - Коэффициенты фильтра заданы посредством Numerator, Denominator, и ScaleValues свойства.

  • 'Input port' - Коэффициенты числителя, коэффициенты знаменателя и значения шкалы заданы как входы объекта при запуске алгоритма. Для получения дополнительной информации см. раздел Использование.

Коэффициенты числителя фильтра, заданные как матрица N-на-3, где N - количество биквадратических сечений .

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

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

Зависимости

Чтобы включить это свойство, установите CoefficientSource свойство к 'Property'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Коэффициенты знаменателя фильтра, заданные как матрица N-на-3, где N - количество биквадратических сечений .

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

Размер этого свойства не может быть изменен после прохождения алгоритма. Однако значения знаменателя могут быть изменены, так как свойство настраивается.

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

Зависимости

Чтобы включить это свойство, задайте CoefficientSource свойство к 'Property'.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Укажите, имеет ли фильтр шкалы значения для каждого раздела. Когда установлено значение true, с использованием ScaleValues свойство можно задать значения шкалы, которые будут применяться до и после каждой секции биквадратического фильтра.

Масштабные значения для применения до и после каждой секции биквадратического фильтра, заданные как вектор. Длина ScaleValues вектор должен быть N + 1, где N - количество бикаудратических сечений. Если вы устанавливаете это свойство в скалярное значение, скалярное значение используется в качестве значения усиления только перед первой секцией фильтра. Остальные значения усиления установлены в 1. Если вы задаете это свойство в вектор N + 1 значений, каждое значение используется для отдельной секции фильтра.

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

Зависимости

Это свойство применяется только при установке CoefficientSource свойство к 'Property' и HasScaleValues свойство к true.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Свойства с фиксированной точкой

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

  • 'Floor'

  • 'Ceiling'

  • 'Convergent'

  • 'Nearest'

  • 'Round'

  • 'Simplest'

  • 'Zero'

Для получения дополнительной информации см. Раздел «Режимы округления»

Действие переполнения для операций с фиксированной точкой, заданное как одно из следующего:

  • 'Wrap' - Объект переносит результат своих операций с фиксированной точкой.

  • 'Saturate' - Объект насыщает результат своих операций с фиксированной точкой.

Для получения дополнительной информации о действиях по переполнению смотрите Обработку переполнения для операций с фиксированной точкой.

Входные обозначения слов и дробей в разделе, заданные как 'Same as input' или a numerictype (Fixed-Point Designer) объект.

Когда задан как a numerictype объект, тип данных должен быть подписан фиксированной точкой с степенью двойки и нулевым смещением.

Зависимости

Это свойство применяется только при установке HasScaleValues свойство к true.

Выходные обозначения слов и дробей в разделе, заданные как 'Same as section input' или a numerictype (Fixed-Point Designer) объект.

Когда задан как a numerictype объект, тип данных должен быть подписан фиксированной точкой с степенью двойки и нулевым смещением.

Зависимости

Это свойство применяется только при установке HasScaleValues свойство к true.

Коэффициенты числителя слово- и дробно-длинные обозначения, заданные как 'Same word length as input' или как numerictype объект.

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

Зависимости

Это свойство применяется только при установке CoefficientSource свойство к 'Property'.

Коэффициенты знаменателя, слово- и дробно-длинные обозначения, заданные как 'Same word length as input' или как numerictype объект.

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

Зависимости

Это свойство применяется только при установке CoefficientSource свойство к 'Property'.

Шкалы, слово- и обозначения длины дроби, заданные как 'Same word length as input' или как numerictype объект.

Когда задан как a numerictype объект, тип данных должен быть подписан фиксированной точкой с степенью двойки и нулевым смещением. Если не указано, длина дроби определяется на основе значений шкалы, чтобы получить максимально возможную точность.

Зависимости

Это свойство применяется только при установке CoefficientSource свойство к 'Property' и HasScaleValues свойство к true.

Множительные обозначения слов и дробей, заданные как 'Same as output' или как numerictype объект.

Когда задан как a numerictype объект, тип данных должен быть подписан фиксированной точкой с степенью двойки и нулевым смещением.

Зависимости

Это свойство применяется только при установке Structure свойство к 'Direct form I transposed'.

Состояния обозначений длин слов и дробей, заданные как 'Full precision' или как numerictype объект.

Когда задан как a numerictype объект, тип данных должен быть подписан фиксированной точкой с степенью двойки и нулевым смещением.

Зависимости

Это свойство применяется только при установке Structure свойство к 'Direct form II'.

Обозначения слов и длин дробей аккумулятора знаменателя, заданные как numerictype объект.

Выходные обозначения длин слов и дробей, заданные как 'Full precision' или как numerictype объект.

Когда задан как a numerictype объект, тип данных должен быть подписан фиксированной точкой с степенью двойки и нулевым смещением.

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

Описание

пример

y = sos(x) фильтрует входной сигнал x и выводит отфильтрованные значения y. Объект фильтра sos фильтрует каждый канал (столбец) входного сигнала независимо от последовательных вызовов алгоритма.

Этот синтаксис действителен только тогда, когда CoefficientSource для свойства задано значение 'Property'.

y = sos(x,num,den) фильтрует вход с помощью num как коэффициенты и den числителя как коэффициенты знаменателя фильтра sos.

Этот синтаксис действителен только тогда, когда CoefficientSource для свойства задано значение 'Input port' и HasScaleValues для свойства задано значение false.

y = sos(x,num,den,g) задает значения шкалы g фильтра sos.

Этот синтаксис действителен только тогда, когда CoefficientSource для свойства задано значение 'Input port' и HasScaleValues для свойства задано значение true.

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

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

Вход данных, заданный как вектор или матрица.

Этот объект также принимает входы переменного размера. После запуска алгоритма Системного объекта можно изменить размер каждого входного канала, но вы не можете изменить количество каналов.

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

Тип данных всех входов должен быть одинаковым.

Типы данных: single | double | int8 | int16 | int32 | int64 | fi
Поддержка комплексного числа: Да

Коэффициенты числителя, заданные как матрица N -на-3, где N - количество биквадратических сечений.

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

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

Тип данных всех входов должен быть одинаковым.

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

Зависимости

Этот вход применяется только, когда вы устанавливаете CoefficientSource свойство к 'Input port'.

Типы данных: single | double | int8 | int16 | int32 | int64 | fi

Коэффициенты знаменателя фильтра, заданные как матрица N-на-3, где N - количество биквадратических сечений .

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

Размер этого входа не может быть изменен, когда вы проходите алгоритм. Однако значения знаменателя могут быть изменены, когда вход настраивается.

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

Тип данных всех входов должен быть одинаковым.

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

Зависимости

Этот вход применяется только, когда вы устанавливаете CoefficientSource свойство к 'Input port'.

Типы данных: single | double | int8 | int16 | int32 | int64 | fi

Шкалы значений биквадратичного фильтра, заданные как вектор 1 бай- (N + 1), где N количество биквадратичных фильтров.

Если g является фиксированной точкой, она должна быть подписана фиксированной точкой с степенью наклона два и нулевым смещением. Когда длина дроби не задана, объект определяет длину дроби на основе значений шкалы, чтобы получить максимально возможную точность.

Тип данных всех входов должен быть одинаковым.

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

Зависимости

Этот вход применяется только, когда вы устанавливаете CoefficientSource свойство к 'Input port' и HasScaleValues свойство к true.

Типы данных: single | double | int8 | int16 | int32 | int64 | fi

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

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

Отфильтрованный выход, возвращенный как вектор или матрица. Размер и сложность выходного сигнала совпадают с размером и сложностью входного сигнала.

Тип данных выхода определяется на основе значения OutputDataType свойство. Если установлено значение 'Full precision'тип данных выходов вычисляется на основе потока сигналов схем, показанных в разделе «Преобразование с фиксированной точкой». Если установить пользовательский числовой тип, то выход данных будет приведен к указанному числовому типу.

Типы данных: single | double | int8 | int16 | int32 | int64 | fi
Поддержка комплексного числа: Да

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

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

release(obj)

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

freqzЧастотная характеристика фильтра в дискретном времени Системного объекта
fvtoolВизуализация частотной характеристики фильтров DSP
impzИмпульсная характеристика фильтра в дискретном времени Системного объекта
infoИнформация о фильтре Системный объект
coeffsВозвращает фильтрация коэффициентов системного объекта в структуре
costОценка стоимости реализации фильтра Системный объект
scaleМасштабируйте секции второго порядка
scaleoptsСоздайте объект опции для масштабирования секции второго порядка
scalecheckПроверяйте масштабирование биквадратичного фильтра
cumsecКумулятивная секция второго порядка биквадратичного фильтра
tfПреобразуйте Системный объект фильтра в дискретном времени в передаточную функцию
reorderПереупорядочить секции второго порядка биквадратичного фильтра Системного объекта
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Lowpass фильтрация шумного синусоидального сигнала с помощью dsp.SOSFilter Системный объект. Визуализируйте исходные и отфильтрованные сигналы с помощью анализатора спектра.

Входной сигнал

Входной сигнал является синусоидальным сигналом с двумя тонами, один на 1 кГц, а другой на 3 кГц. Частота дискретизации составляет 8 кГц.

f1 = 1000;
f2 = 3000;
Fs = 8000;
sine = dsp.SineWave('Frequency',[f1,f2],'SampleRate',Fs,...
'SamplesPerFrame',1024);

Создайте фильтр Biquad SOS

Разработайте lowpass Butterworth БИХ фильтра 10-го порядка с частотой отключения 2 кГц. Коэффициенты числителя и знаменателя извлекаются из спроектированной матрицы SOS.

Fcutoff = 2000;
[z,p,k] = butter(10,Fcutoff/(Fs/2));
[s, g]  = zp2sos(z,p,k);
num = s(:,1:3);
den = s(:,4:6);
    
sosFilter = dsp.SOSFilter(num, den,'HasScaleValues',true,'ScaleValues',g)
sosFilter = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II transposed'
    CoefficientSource: 'Property'
            Numerator: [5x3 double]
          Denominator: [5x3 double]
       HasScaleValues: true
          ScaleValues: [0.0029 1 1 1 1 1]

  Show all properties

Визуализация частотной характеристики проектируемого фильтра SOS.

fvtool(sosFilter,'Fs',8000)

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 an object of type line.

Вытекание

Добавьте средний белый Гауссов шум со стандартным отклонением 0,1 к сумме синусоид. Фильтрация шумного синусоидального сигнала с помощью разработанного фильтра SOS.

Во время симуляции спектральный анализатор показывает, что высокочастотный тон выше 2 кГц в исходном сигнале ослаблен. Полученный сигнал поддерживает пик на 1 кГц, потому что он падает в полосе пропускания фильтра lowpass.

SA = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum',false, ...
    'SampleRate',Fs, ...
    'NumInputPorts',2,...
    'ShowLegend',true,...
    'YLimits',[-200 100],...
    'ChannelNames',{'Input signal', 'Filtered signal'});

    % Stream processing loop
for k = 1:100
    input = sum(sine(),2) + 0.1.*randn(sine.SamplesPerFrame,1);
    filteredOutput = sosFilter(input);
    SA(input,filteredOutput);
end

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. These objects represent Input signal, Filtered signal.

Создайте lowpass biquadratic SOS фильтр с изменяющимися во времени коэффициентами. Визуализируйте амплитудную характеристику фильтра с помощью динамического фильтра-визуализатора.

dfv = dsp.DynamicFilterVisualizer('YLimits',[-120 10])
dfv = 
  DynamicFilterVisualizer with properties:

           FFTLength: 2048
          SampleRate: 44100
      FrequencyRange: [0 22050]
              XScale: 'Linear'
    MagnitudeDisplay: 'Magnitude (dB)'

   Visualization
                Name: 'Dynamic Filter Visualizer'
               Title: 'Magnitude Response'
             YLimits: [-120 10]
          ShowLegend: 0
         FilterNames: {''}
           UpperMask: Inf
           LowerMask: -Inf
            Position: [240 262 800 500]

Создайте dsp.SOSFilter объект.

sosfilt = dsp.SOSFilter
sosfilt = 
  dsp.SOSFilter with properties:

            Structure: 'Direct form II transposed'
    CoefficientSource: 'Property'
            Numerator: [0.0975 0.1950 0.0975]
          Denominator: [1 -0.9428 0.3333]
       HasScaleValues: false

  Show all properties

Используйте maxflat функция для разработки lowpass максимально плоского фильтра. Установите порядок числителя и знаменателя фильтра равным 2, так как SOS-фильтр является биквадратичным. Измените частоту отключения с шагом 0,001 и спроектируйте фильтр для каждого шага. Передайте вычисленные коэффициенты в фильтр SOS. Визуализируйте изменяющуюся во времени величину реакцию фильтра SOS с помощью dsp.DynamicFilterVisualizer объект.

for Wn = 0.1:0.001:0.6
 [b,a] = maxflat(2,2,Wn);
 sosfilt.Numerator = b;
 sosfilt.Denominator = a;
 dfv(sosfilt)
end

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

.

См. также

Функции

Объекты

Блоки

Введенный в R2020a