文档

dsp。FilterCascade

创建过滤器系统对象级联

描述

dsp。FilterCascade对象创建多级系统对象™,支持过滤系统对象、延迟和标量增益的级联。对象的操作类似于级联函数。然而,级联函数不支持将延迟作为筛选阶段。金宝app

你可以通过dsp。FilterCascade系统对象作为另一个阶段dsp。FilterCascade系统对象。你也可以通过dsp。FilterCascade对象的输入级联函数。

当调用对象时,输入信号的大小、数据类型和复杂性必须得到过滤器级联中的所有级联的支持。金宝app如果对象中的滤波器级支持金宝app可变大小的信号,则该对象支持可变大小的信号。

用级联滤波器对信号进行滤波:

  1. 创建dsp。FilterCascade对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?(MATLAB)。

或者,您可以生成一个MATLAB®函数,并调用该函数对信号进行过滤。生成的函数支持C/ c++代码生成。金宝app有关详细信息,请参见generateFilteringCode函数。

创建

描述

足球俱乐部= dsp。FilterCascade返回一个System对象,足球俱乐部它只有一个阶段,adsp。FIRFilter具有默认属性的系统对象。

例子

足球俱乐部= dsp.FilterCascade (filtn filt1, filt2,…)返回一个多级系统对象,足球俱乐部,第一阶段设置为filt1,第二阶段设定为filt2等等。每个阶段都可以是一个过滤系统对象dsp。FilterCascade系统对象,一个dsp。延迟系统对象,或标量增益值。

例如,创建一个包括低通滤波器、高通滤波器和增益级联的滤波器级联。

lpFilt = dsp。LowpassFilter (“StopbandFrequency”, 15000,...“PassbandFrequency”, 12000);hpFilt = dsp。HighpassFilter (“StopbandFrequency”, 5000,...“PassbandFrequency”, 8000);增益= 2;bpFilt = dsp.FilterCascade(lpFilt,hpFilt,2);

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计(MATLAB)。

过滤器阶段,指定为过滤器系统对象、延迟系统对象或标量增益值。要查看哪些系统对象可以添加到过滤器级联,请使用:

dsp.FilterCascade.help金宝appSupportedSystemObjects
您可以通过修改相关属性来修改现有的阶段。例如:
FC = dsp. filtercascade (dsp. firfilter,5) FC = dsp. filtercascade。带属性的FilterCascade: Stage1: [1×1 dsp.]FIRFilter] Stage2: 5 K>> FC。Stage2 = dsp。FIRDecimator FC = dsp。FilterCascadewith properties: Stage1: [1×1 dsp.FIRFilter] Stage2: [1×1 dsp.FIRDecimator]
要更改级联中的阶段数,请使用addStage而且removeStage功能。

使用

语法

描述

例子

y= FC (x滤波输入信号x中定义的过滤器级联足球俱乐部并返回过滤后的输出y.输入信号的大小、数据类型和复杂性必须被滤波器级联中的所有级所支持。金宝app如果对象中的滤波器级支持金宝app可变大小的信号,则该对象支持可变大小的信号。

输入参数

全部展开

数据输入,指定为向量或矩阵。当输入为矩阵时,矩阵的每一列表示一个独立的数据通道。

数据类型:|
复数支持:金宝app是的

输出参数

全部展开

过滤后的输出数据,作为向量或矩阵返回。输出信号的大小、数据类型和复杂性与输入信号相匹配。

数据类型:|
复数支持:金宝app是的

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

addStage 添加过滤级联
generateFilteringCode 生成滤波器级联的MATLAB代码
getNumStages 得到滤波器级联的级数
releaseStages 解除级联中所有阶段的锁定状态
removeStage 从过滤器级联中移除级
一步 运行系统对象算法
释放 释放资源并允许更改System对象属性值和输入特征
重置 重置System对象的内部状态

例子

全部展开

请注意:此示例仅在R2016b及以上版本运行。如果您正在使用较早的版本,请将对函数的每次调用替换为等效的调用一步语法。例如,myObject (x)就变成了步骤(myObject x)

级联设计带通滤波器:

  • 阻带频率为5000hz,通带频率为8000hz的高通滤波器

  • 低通滤波器,通频带频率为12000 Hz,阻频带频率为15000 Hz

可视化的频率响应使用fvtool

lpFilt = dsp。LowpassFilter (“StopbandFrequency”, 15000,...“PassbandFrequency”, 12000);hpFilt = dsp。HighpassFilter (“StopbandFrequency”, 5000,...“PassbandFrequency”, 8000);bpFilt = dsp.FilterCascade(lpFilt,hpFilt);fvtool (bpFilt);传奇(带通滤波器的);

将一个有噪声的正弦波作为带通滤波器的输入。输入是频率分别为3 kHz、10 kHz和15 kHz的三个正弦波的和。采样频率为48khz。在频谱分析仪上查看输入和过滤后的输出。

3 kHz和15 kHz的音调被衰减,10 kHz的音调被带通滤波器保留。

Sine1 = dsp。SineWave (“频率”3 e3,“SampleRate”48岁的e3,“SamplesPerFrame”, 6000);Sine2 = dsp。SineWave (“频率”, 10 e3,“SampleRate”48岁的e3,“SamplesPerFrame”, 6000);Sine3 = dsp。SineWave (“频率”15 e3,“SampleRate”48岁的e3,“SamplesPerFrame”, 6000);SpecAna = dsp。简介(“PlotAsTwoSidedSpectrum”假的,...“SampleRate”, Sine1。SampleRate,...“NumInputPorts”2,...“ShowLegend”,真的,...“YLimits”, -160, 60);SpecAna。ChannelNames = {“原始噪声信号”“过滤信号”};i = 1:1000 x = Sine1() + Sine2() + Sine3() + 0.1.*randn(Sine1. samplesperframe,1);y = bpFilt(x);SpecAna (x, y);结束发行版(SpecAna)

创建一个CIC小数。将小数级联为增益。

Cicdecim = dsp。CICDecimator (“DecimationFactor”6...“NumSections”6);decimcasc = dsp.FilterCascade(cicdecim,1/gain(cicdecim));

设计一个补偿decimator并将其与滤波器级联,decimcasc.此操作嵌套一个dsp。FilterCascade对象作为另一个筛选器级联中的阶段。中投公司的薪酬小数具有固有收益,获得(cicdecim).因子1 /增益(cicdecim)从抽取滤波器级联中,decimcasc,补偿补偿滤波器增益。

Fs = 16e3;%补偿十进制输入采样频率fPass = 4e3;%通频带频率fStop = 4.5e3;%阻带频率Ciccomp = dsp。CICCompensationDecimator (cicdecim...“DecimationFactor”2,...“PassbandFrequency”成就,...“StopbandFrequency”fStop,...“SampleRate”fs);filtchain = dsp.FilterCascade(decimcasc,ciccomp);

可视化级联的级联的频率响应。

F = fvtool(decimcasc,ciccomp,filtchain,“Fs”fs, [fs * 6日,fs * 6],...“算术”“固定”);传奇(f,“中投杀害多人者”“中投公司薪酬小数”...“总体响应”);

设计一个两级decimator,其过渡宽度为100hz,采样频率为2khz,阻带衰减为60db。decimator的意思是“小数”。

decimSpec = fdesign.decimator(4,“奈奎斯特”,4,“Tw, Ast”、100、2000);filtCasc =设计(decimSpec,“多级”“SystemObject”,真正的);

通过使用验证您的设计fvtool

信息(filtCasc)
ans = '离散滤波器级联  ---------------------------- 数量的阶段:2 Stage1: dsp。FIRDecimator -------离散时间FIR多速率滤波器(实)-----------------------------------------滤波器结构:直接形式FIR多相Decimator抽取因子:2多相长度:10滤波器长度:19稳定:是线性相位:是(类型1)算术:双Stage2: dsp。FIRDecimator -------离散时间FIR多速率滤波器(实)-----------------------------------------滤波器结构:直接形式FIR多相Decimator抽取因子:2多相长度:18滤波器长度:35稳定:是线性相位:是(类型1)算术:双'
fvtool (filtCasc)

使用此设计生成筛选数据的代码。中不能生成C/ c++代码dsp。FilterCascade对象,但是可以从生成的函数生成C/ c++代码。该函数定义筛选器阶段并按顺序调用它们。该函数保存在一个名为my的文件中Decimator.m在当前目录。

generateFilteringCode (filtCasc“myDecimator”);

我的杀害多人者函数创建筛选器级联,并依次调用每个stage对象。

类型myDecimator
函数y = myDecimator(x) % myDecimator构造滤波器级联并处理每个阶段% MATLAB代码%由MATLAB(R) 9.7和DSP System Toolbox 9.9生成。使用codegen命令从该函数生成C/ c++代码。键入“帮助代码原”以获取更多信息。构造持久filter1 filter2 if isempty(filter1) filter1 = dsp。FIRDecimator(…'分子',[0.0021878514650437845 0 -0.010189095418136306 0 0.031140395225498115 0 - 0.30979571849010851 0.5 0.30979571849010851 0 -0.082785931644222821 0 0.031140395225498115 0 -0.010189095418136306 0 0.0021878514650437845]);Filter2 = dsp。FIRDecimator(…“分子”,[0.0011555011750488237 0.018592020073668478 -0.010736374060960912 -0.0027482166351233102 0.0057681982289523072 0 0 0 0 0 0 0 0.31592697826202448 0.5 0.31592697826202448 -0.099130756073130377 0.052603914610235683 -0.031093723586671229 -0.010736374060960912 -0.099130756073130377 0.018592020073668478 0.052603914610235683 -0.031093723586671229 0 0 0 0 0 0 -0.0027482166351233102 0.0011555011750488237 0.0057681982289523072]);进程y1 = filter1(x);Y = filter2(Y);

扩展功能

另请参阅

系统对象

功能

在R2014b中引入