dsp. FilterCascade

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

Описание

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

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

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

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

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

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

Создание

Синтаксис

FC=dsp.FilterCascade
FC=dsp.FilterCascade(filt1,filt2,...)

Описание

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

пример

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

Например,

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

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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]
Чтобы изменить количество этапов в каскаде, используйте функции removeStage и addStage.

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

Для версий ранее, чем R2016b, используйте функцию step, чтобы запустить алгоритм Системного объекта. Аргументы к step являются объектом, который вы создали, сопровождаемый аргументами, показанными в этом разделе.

Например, y = step(obj,x) и y = obj(x) выполняют эквивалентные операции.

Синтаксис

y=FC(x)

Описание

пример

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

Разработайте полосовой фильтр путем расположения каскадом:

  • highpass фильтрует с частотой полосы задерживания 5 000 Гц и частотой полосы пропускания 8 000 Гц.

  • 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 кГц. Просмотрите вход и отфильтрованный вывод на спектре анализатор.

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)

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

Создайте CIC decimator. Расположите каскадом decimator с усилением.

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

Разработайте компенсацию decimator и расположите каскадом ее с каскадом фильтра, 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');

Компенсация CIC decimator имеет свойственное усиление, gain(cicdecim). Путем расположения каскадом с фактором 1/gain(cicdecim) каскад фильтра компенсирует это усиление.

Разработайте 2D этап decimator с шириной перехода на 100 Гц, частотой дискретизации на 2 кГц и затуханием на 60 дБ в полосе задерживания. decimator должен субдискретизировать фактором 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)

Сгенерируйте код, чтобы отфильтровать данные с помощью этого проекта. Код сохранен в файле под названием stepDecimator.m в текущем каталоге.

 generateFilteringCode(filtCasc, 'stepDecimator');

Функция stepDecimator создает каскад фильтра и вызывает метод step на каждом этапе.

 type stepDecimator
function y = stepDecimator(x)
%STEPDECIMATOR Construct filter cascade and process each stage

% MATLAB Code
% Generated by MATLAB(R) 9.6 and DSP System Toolbox 9.8.
% Generated on: 21-Feb-2019 23:17:33

% 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