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, один (s) добавлены, чтобы сделать размер L-by-5. Если знаменатель имеет размер L-by-5, первые значения столбцов проигнорированы и добавлены с 1 с. Размер этого свойства не может измениться, когда объект заблокирован. Однако значения могут быть изменены.

Типы данных: 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Информация о Системном объекте фильтра
coeffsОтфильтруйте коэффициенты
costОценить затраты на применение фильтра обьектов
grpdelayОтвет групповой задержки дискретного времени фильтрует Системный объект
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта
cloneСоздайте объект дублированной системы
isLockedОпределите, используется ли Системный объект

Примеры

свернуть все

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

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

Входной сигнал является суммой двух синусоид с частотами 100 Гц и 350 Гц. Частота дискретизации составляет 1 000 Гц.

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

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

Создайте БИХ-фильтр 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) lowpass с помощью fdesign функция. Используя этот фильтр, отфильтруйте шумный синусоидальный сигнал с двумя тонами, один на уровне 3 кГц, и другим на уровне 12 кГц.

Спроектируйте фильтр пятого порядка с помощью эллиптического метода в 'df2tsos' структура. Используйте L-норму-по-бесконечности, масштабирующуюся в частотном диапазоне. Задайте частоту полосы пропускания, чтобы быть 0.15pi рад/выборка и частота полосы задерживания, чтобы быть 0.25pi рад/выборка. Задайте 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);

Визуализируйте частотную характеристику lowpass спроектированного фильтра с помощью 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 кГц, и формат кадра установлен в 1 024 выборки.

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