dsp.FilterCascade

Создайте каскад фильтра Системных объектов

Описание

The dsp.FilterCascade создает многоступенчатую object™ System, которая позволяет создавать каскады Системных объектов, задержек и коэффициентов усиления скаляра. Этот объект действует аналогично cascade функция. Однако, cascade функция не поддерживает задержку как каскад фильтра.

Вы можете пройти dsp.FilterCascade Системный объект как этап другому dsp.FilterCascade Системный объект. Можно также пройти dsp.FilterCascade Системный объект как вход в cascade функция.

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

Для фильтрации сигнала с каскадом фильтров:

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

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

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

Также можно сгенерировать MATLAB® функция от каскадного объекта фильтра и вызов этой функции для фильтрации сигнала. Сгенерированная функция поддерживает генерацию кода C/C + +. Для получения дополнительной информации смотрите generateFilteringCode функция.

Создание

Описание

FC = dsp.FilterCascade возвращает Системный объект, FC который имеет одну стадию, dsp.FIRFilter Системный объект со свойствами по умолчанию.

пример

FC = dsp.FilterCascade(filt1,filt2,...,filtn) возвращает многоступенчатый системный объект, FC, с первой ступенью, установленной на filt1, второй этап установлен на filt2и так далее. Каждый этап может быть фильтрующим Системным объектом, dsp.FilterCascade Системный объект, dsp.Delay Системный объект или скалярное значение усиления.

Например, создайте каскад фильтра, который включает lowpass, highpass-фильтр и каскад усиления.

lpFilt = dsp.LowpassFilter('StopbandFrequency',15000,...
                           'PassbandFrequency',12000);
hpFilt = dsp.HighpassFilter('StopbandFrequency',5000,...
                            'PassbandFrequency',8000);
gain = 2;
bpFilt = dsp.FilterCascade(lpFilt,hpFilt,2);

Свойства

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

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

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

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

Каскад фильтра, заданный как Системный объект фильтра, Системный объект задержки или скалярное значение усиления. Чтобы увидеть, какие Системные объекты можно добавить в каскад фильтров, используйте:

dsp.FilterCascade.helpSupportedSystemObjects
Можно изменить существующий этап, изменив связанное свойство. Для примера:
FC = dsp.FilterCascade(dsp.FIRFilter,5)

FC = 

  dsp.FilterCascade with properties:

    Stage1: [1×1 dsp.FIRFilter]
    Stage2: 5

K>> FC.Stage2 = dsp.FIRDecimator

FC = 

  dsp.FilterCascade with properties:

    Stage1: [1×1 dsp.FIRFilter]
    Stage2: [1×1 dsp.FIRDecimator]
Чтобы изменить количество каскадов в каскаде, используйте addStage и removeStage функций.

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

Синтаксис

Описание

пример

y = FC(x) фильтрует входной сигнал x при помощи каскада фильтров, заданного в FC и возвращает отфильтрованные выходы y. Размер, тип данных и сложность входного сигнала должны поддерживаться всеми каскадами фильтра. Этот объект поддерживает сигналы переменного размера, если каскады фильтра в объекте поддерживают сигналы переменного размера.

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

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

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

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

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

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

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

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

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

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

release(obj)

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

addStageДобавьте фильтровальную ступень в каскад
generateFilteringCodeСгенерируйте код MATLAB для каскада фильтров
getNumStagesПолучите количество ступеней в каскаде фильтра
releaseStagesРазблокируйте каскадное состояние всех ступеней
removeStageСнимите ступень с каскада фильтра
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step синтаксис. Для примера, myObject(x) становится step(myObject,x).

Проектируйте полосно-пропускной фильтр путем каскадирования:

  • Высокочастотный фильтр с частотой стоповой полосы 5000 Гц и частотой полосы пропускания 8000 Гц

  • Lowpass с частотой полосы пропускания 12 000 Гц и частотой полосы остановки 15 000 Гц

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

lpFilt = dsp.LowpassFilter('StopbandFrequency',15000,...
    'PassbandFrequency',12000);
hpFilt = dsp.HighpassFilter('StopbandFrequency',5000,...
    'PassbandFrequency',8000);

bpFilt = dsp.FilterCascade(lpFilt,hpFilt);

fvtool(bpFilt);
legend('Bandpass filter');

Передайте шумную синусоиду как вход в полосно-пропускающий фильтр. Вход представляет собой сумму трёх синусоид с частотами на 3 кГц, 10 кГц и 15 кГц. Частота дискретизации составляет 48 кГц. Просмотрите вход и отфильтрованный выход на анализаторе спектра.

Тоны с частотой 3 кГц и 15 кГц ослабляются, а тон с частотой 10 кГц сохраняется полосно-пропускающим фильтром.

Sine1 = dsp.SineWave('Frequency',3e3,'SampleRate',48e3,'SamplesPerFrame',6000);
Sine2 = dsp.SineWave('Frequency',10e3,'SampleRate',48e3,'SamplesPerFrame',6000);
Sine3 = dsp.SineWave('Frequency',15e3,'SampleRate',48e3,'SamplesPerFrame',6000);

SpecAna = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum',false, ...
    'SampleRate',Sine1.SampleRate, ...
    'NumInputPorts',2,...
    'ShowLegend',true, ...
    'YLimits',[-160,60]);

SpecAna.ChannelNames = {'Original noisy signal','Filtered signal'};


for i = 1:1000
    x = Sine1() + Sine2() + Sine3() + 0.1.*randn(Sine1.SamplesPerFrame,1);
    y = bpFilt(x);
    SpecAna(x,y);

end
release(SpecAna)

Создайте CIC дециматор. Каскадируйте дециматор с усилением.

cicdecim = dsp.CICDecimator('DecimationFactor',6,...
    'NumSections',6);
decimcasc = dsp.FilterCascade(cicdecim,1/gain(cicdecim));

Спроектируйте декиматор компенсации и каскадируйте его с каскадом фильтра, decimcasc. Эта операция вложяет dsp.FilterCascade объект как каскад в другом фильтре. Дециматор компенсации CIC имеет присущий ему коэффициент усиления gain(cicdecim). Коэффициент 1/gain(cicdecim) из каскада децимирующего фильтра, decimcasc, компенсирует коэффициент усиления фильтра компенсации.

fs = 16e3;     % Sampling frequency of input of compensation decimator
fPass = 4e3;   % Passband frequency
fStop = 4.5e3; % Stopband frequency
ciccomp = dsp.CICCompensationDecimator(cicdecim,...
    'DecimationFactor',2, ...
    'PassbandFrequency',fPass, ...
    'StopbandFrequency',fStop, ...
    'SampleRate',fs);
filtchain = dsp.FilterCascade(decimcasc,ciccomp);

Визуализируйте частотную характеристику каскада каскадов.

f = fvtool(decimcasc,ciccomp,filtchain,'Fs',[fs*6,fs,fs*6],...
    'Arithmetic','fixed');
legend(f,'CIC Decimator','CIC Compensation Decimator',...
    'Overall Response');

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 6 objects of type line. These objects represent CIC Decimator: Quantized, CIC Decimator: Reference, CIC Compensation Decimator: Quantized, CIC Compensation Decimator: Reference, Overall Response: Quantized, Overall Response: Reference.

Спроектируйте двухступенчатый дециматор с 100-Hz шириной перехода, частотой дискретизации 2-kHz и 60-dB ослаблением в полосе остановки. Дециматор должен быть понижен в 4 раза.

decimSpec = fdesign.decimator(4,'Nyquist',4,'Tw,Ast',100,60,2000);
filtCasc = design(decimSpec,'multistage','SystemObject',true);

Проверьте свой проект при помощи fvtool.

 info(filtCasc)
ans = 
    'Discrete-Time Filter Cascade
     ----------------------------
     Number of stages: 2
     
     Stage1: dsp.FIRDecimator
     -------
     Discrete-Time FIR Multirate Filter (real)               
     -----------------------------------------               
     Filter Structure   : Direct-Form FIR Polyphase Decimator
     Decimation Factor  : 2                                  
     Polyphase Length   : 10                                 
     Filter Length      : 19                                 
     Stable             : Yes                                
     Linear Phase       : Yes (Type 1)                       
                                                             
     Arithmetic         : double                             
     
     
     Stage2: dsp.FIRDecimator
     -------
     Discrete-Time FIR Multirate Filter (real)               
     -----------------------------------------               
     Filter Structure   : Direct-Form FIR Polyphase Decimator
     Decimation Factor  : 2                                  
     Polyphase Length   : 18                                 
     Filter Length      : 35                                 
     Stable             : Yes                                
     Linear Phase       : Yes (Type 1)                       
                                                             
     Arithmetic         : double                             
     
     '

 fvtool(filtCasc)

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 2 objects of type line.

Сгенерируйте код для фильтрации данных с помощью этого проекта. Вы не можете сгенерировать код C/C + + из dsp.FilterCascade объект непосредственно, но можно сгенерировать код C/C + + из сгенерированной функции. Функция определяет этапы фильтрации и вызывает их последовательно. Функция сохранена в файле под названием my Decimator.m в текущей директории.

 generateFilteringCode(filtCasc,'myDecimator');

Мои Decimator функция создает каскад фильтров и вызывает каждый объект сцены в свою очередь.

 type myDecimator
function y = myDecimator(x)
%MYDECIMATOR Construct filter cascade and process each stage

% MATLAB Code
% Generated by MATLAB(R) 9.10 and DSP System Toolbox 9.12.
% Generated on: 21-Apr-2021 05:18:31

% To generate C/C++ code from this function use the codegen command.
% Type 'help codegen' for more information.
%#codegen

%% Construction
persistent filter1 filter2
if isempty(filter1)
    filter1 = dsp.FIRDecimator(  ...
        'Numerator', [0.0021878514650437845 0 -0.010189095418136306 0 0.031140395225498115 0 -0.082785931644222821 0 0.30979571849010851 0.5 0.30979571849010851 0 -0.082785931644222821 0 0.031140395225498115 0 -0.010189095418136306 0 0.0021878514650437845]);
    filter2 = dsp.FIRDecimator(  ...
        'Numerator', [0.0011555011750488237 0 -0.0027482166351233102 0 0.0057681982289523072 0 -0.010736374060960912 0 0.018592020073668478 0 -0.031093723586671229 0 0.052603914610235683 0 -0.099130756073130377 0 0.31592697826202448 0.5 0.31592697826202448 0 -0.099130756073130377 0 0.052603914610235683 0 -0.031093723586671229 0 0.018592020073668478 0 -0.010736374060960912 0 0.0057681982289523072 0 -0.0027482166351233102 0 0.0011555011750488237]);
end

%% Process
y1 = filter1( x );
y  = filter2( y1);

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

.

См. также

Объекты

Функции

Введенный в R2014b