exponenta event banner

dsp. FourthOrderSectionFilter

Реализовать каскад фильтра секции четвертого порядка

Описание

dsp.FourthOrderSectionFilter реализует каскад фильтров секций четвертого порядка.

Создание

Описание

fos = dsp.FourthOrderSectionFilter возвращает FourthOrderSectionFilter объект, fos, который реализует каскад секций фильтра четвертого порядка.

пример

fos = dsp.FourthOrderSectionFilter(num,den) возвращает FourthOrderSectionFilter объект с Numerator свойство имеет значение num и Denominator свойство имеет значение den.

пример

fos = dsp.FourthOrderSectionFilter(Name,Value) возвращает FourthOrderSectionFilter для каждого указанного имени свойства задано заданное значение. Можно указать дополнительные аргументы пары имя-значение в любом порядке.

Пример: fos = dsp.FourthOrderSectionFilter('Numerator',num,'Denominator',den)

Свойства

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

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

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

Коэффициенты знаменателя фильтра, заданные как матрица L-by-5 или матрица L-by-4, где L - количество секций фильтра. Предполагается, что коэффициенты ведущего знаменателя 1 всегда. Если знаменатель имеет размер L-by-4, добавляется один (ые), чтобы сделать размер L-by-5. Если знаменатель имеет размер L-by-5, значения первого столбца игнорируются и добавляются с помощью 1s. Размер этого свойства не может изменяться, когда объект заблокирован. Однако значения могут быть изменены.

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

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

Синтаксис

Описание

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

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

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

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

Вход может представлять собой сигнал переменного размера, то есть размер кадра каждого канала (количество строк) может изменяться даже после блокировки объекта. Однако количество каналов (количество столбцов) не может изменяться.

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

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

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

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

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

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

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

fvtoolВизуализация частотной характеристики фильтров DSP
freqzЧастотная характеристика объекта системы дискретно-временного фильтра
impzИмпульсная характеристика объекта системы дискретно-временного фильтра
infoСведения об объекте filter System
coeffsВозвращает коэффициенты объекта System фильтра в структуре
costОценка затрат на внедрение фильтра Объект системы
grpdelayОтвет групповой задержки объекта System дискретно-временного фильтра
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System
cloneСоздать повторяющийся объект System
isLockedОпределить, используется ли объект System

Примеры

свернуть все

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

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

Входной сигнал представляет собой сумму двух синусоидальных волн с частотами 100 Гц и 350 Гц. Частота дискретизации составляет 1000 Гц.

frameSize = 1024;
fs = 1000;
SINE1 = dsp.SineWave(5,100,'SamplesPerFrame',1024,'SampleRate',fs);
SINE2 = dsp.SineWave(2,350,pi/2,'SamplesPerFrame',1024,...
    'SampleRate',fs);
x = SINE1() + SINE2();

Коэффициенты фильтра секции четвертого порядка (FOS)

Числительные и знаменательные коэффициенты для фильтра FOS получают с помощью designParamEq которая является частью панели инструментов Audio Toolbox:

%N = [2,4];
%gain = [5,10];
%centerFreq = [0.025,0.75];
%bandwidth = [0.025,0.35];
%mode = 'fos';
%[num,den] = designParamEQ(N,gain,centerFreq,bandwidth,mode);

num = [1.0223   -1.9368    0.9205         0         0
    1.5171    2.3980    1.4317    0.6416    0.2752];

den = [-1.9368    0.9428         0         0
    2.0136    1.9224    1.0260    0.3016];

Инициализация фильтра и анализатора спектра

Создайте фильтр IIR FOS с помощью num и den коэффициенты. Создайте анализатор спектра для визуализации исходного синусоидального сигнала и отфильтрованного сигнала.

fos = dsp.FourthOrderSectionFilter('Numerator',num,...
    'Denominator',den);
scope = dsp.SpectrumAnalyzer(...
    'SampleRate',fs,...
    'PlotAsTwoSidedSpectrum',false,...
    'FrequencyScale','Linear',...
    'FrequencyResolutionMethod','WindowLength',...
    'WindowLength',frameSize,...
    'Title','Original and Filtered Signals',...
    'ShowLegend',true,...
    'ChannelNames',{'Original Signal','Filtered Signal'});

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

y = fos(x);
scope([x,y]);
release(scope);

Проектирование низкочастотного фильтра секции четвертого порядка (FOS) с использованием fdesign функция. Используя этот фильтр, фильтруйте шумный синусоидальный сигнал двумя тонами, один на частоте 3 кГц, а другой на частоте 12 кГц.

Проектирование фильтра пятого порядка с использованием эллиптического метода в 'df2tsos' структура. Используйте масштабирование нормы L-бесконечности в частотной области. Укажите частоту полосы пропускания 0,15pi rad/sample и частоту полосы останова 0.25pi rad/sample. Укажите 1 дБ допустимой пульсации полосы пропускания и затухание полосы останова 60 дБ.

Fp = 0.15;
Fst = 0.25;
Ap = 1;
Ast = 60;

Коэффициенты фильтра масштабируются с использованием fdopts.sosscaling объект. Объект масштабирования определяется как не имеющий числительных ограничений, и ScaleValueConstraint имеет значение 'unit', указывая масштабирование как единичное масштабирование.

fdo = fdopts.sosscaling;
fdo.NumeratorConstraint='none';
fdo.ScaleValueConstraint='unit';

f = fdesign.lowpass('Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast);
hFilter = design(f,'ellip','SystemObject',true,...
    'FilterStructure','df2tsos','SOSScaleNorm','Linf',...
    'SOSScaleOpts',fdo);

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

fvtool(hFilter)

Извлеките матрицу SOS (представление секции второго порядка) фильтра.

sosV =  hFilter.SOSMatrix;

Извлеките числитель и знаменатель из матрицы SOS.

num = zeros(size(sosV,1),5);
den = zeros(size(sosV,1),5);

for i = 1:size(sosV,1)
    [num0,den0] = iirlp2bp(sosV(i,1:3),sosV(i,4:6),Fp,[0.25,0.75]);
    num(i,1:length(num0)) = num0;
    den(i,1:length(num0)) = den0;
end

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

fos = dsp.FourthOrderSectionFilter(num,den);

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

fvtool(fos);

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

fs = 44100;
FrameLength = 1024;

SINE1 = dsp.SineWave('SamplesPerFrame',FrameLength,'SampleRate',fs,'Frequency',3000);
SINE2 = dsp.SineWave('SamplesPerFrame',FrameLength,'SampleRate',fs,'Frequency',12000);

Инициализируйте анализатор спектра для визуализации спектров сигнала.

scope = dsp.SpectrumAnalyzer(...
    'SampleRate',fs,...
    'PlotAsTwoSidedSpectrum',false,...
    'Method','Filter bank',...
    'Title','Original and Filtered Signals',...
    'ShowLegend',true,...
    'YLimits',[-180 50],...
    'ChannelNames',{'Original Signal','Filtered Signal'});

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

for index = 1:1000
    x = SINE1() + SINE2()+ 0.001*randn(FrameLength,1);
    y = fos(x);
    scope([x,y]);
end

См. также

Объекты

Представлен в R2019a