exponenta event banner

dsp. FilterCascade

Создание каскада объектов фильтра System

Описание

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

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

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

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

  1. Создать dsp.FilterCascade и задайте его свойства.

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

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

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

Создание

Описание

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

пример

FC = dsp.FilterCascade(filt1,filt2,...,filtn) возвращает многоступенчатый объект System, FC, с первым этапом, установленным на filt1, второй этап установлен в filt2и так далее. Каждый этап может быть объектом System фильтра, dsp.FilterCascade Системный объект, a 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 с использованием системных объектов.

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

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
Поддержка комплексного номера: Да

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

  • Фильтр верхних частот с частотой стоп-полосы 5000 Гц и частотой полосы пропускания 8000 Гц

  • Фильтр нижних частот с частотой полосы пропускания 12000 Гц и частотой стоп-полосы 15000 Гц

Визуализация частотной характеристики с помощью 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 + + из созданной функции. Функция определяет этапы фильтра и вызывает их последовательно. Функция сохраняется в файле с именем myDecimator.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