主要内容

dsp.FilterCascade

创建过滤系统对象的级联

描述

dsp.FilterCascade对象创建一个多级系统对象™,使过滤系统对象的级联,延迟,标量收益。这个对象操作类似级联函数。然而,级联功能不支持延迟作为一个过滤阶段。金宝app

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

当你调用对象,大小,数据类型,输入信号的复杂性必须支持的所有阶段的滤波器级联。金宝app这个对象支持适应信号如果金宝app对象内的过滤阶段支持适应信号。

过滤信号级联的过滤器:

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

  2. 调用对象的参数,就好像它是一个函数。

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

或者,您可以生成一个MATLAB®函数从滤波器级联对象,调用这个函数来过滤信号。生成的函数支持C / c++代码生成。金宝app更多细节,请参阅generateFilteringCode函数。

创建

描述

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

例子

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

例如,创建一个滤波器级联,包括一个低通滤波器,高通滤波器,获得阶段。

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

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

过滤阶段,指定为一个过滤系统对象,延迟系统对象,或一个标量值。看到哪个系统对象可以添加到一个滤波器级联,使用:

dsp.FilterCascade.help金宝appSupportedSystemObjects
您可以修改现有的阶段通过修改相关的属性。例如:
FC = dsp.FilterCascade dsp.FIRFilter 5 FC = dsp。FilterCascade属性:Stage1:(1×1 dsp。FIRFilter] Stage2: 5 K > > FC。Stage2 = dsp。FIRDecimator FC = dsp。FilterCascade属性:Stage1:(1×1 dsp。FIRFilter] Stage2 (1×1 dsp.FIRDecimator):
改变阶段的数量在一个级联使用addStageremoveStage功能。

使用

语法

描述

例子

y= FC (x)过滤输入信号x通过使用滤波器级联中定义足球俱乐部并返回输出过滤y。大小、数据类型和输入信号的复杂性必须支持的所有阶段的滤波器级联。金宝app这个对象支持适应信号如果金宝app对象内的过滤阶段支持适应信号。

输入参数

全部展开

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

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

输出参数

全部展开

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

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

对象的功能

使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

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

例子

全部折叠

请注意:如果您使用的是R2016a或更早的版本中,用相同的步骤替换每个调用对象的语法。例如,obj (x)就变成了步骤(obj, 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);hvft = fvtool (bpFilt);传奇(hvft带通滤波器的);

图级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含一个类型的对象。该对象代表了带通滤波器。

通过一个嘈杂的正弦波作为输入到带通滤波器。输入是一笔3千赫的三个正弦波频率10 kHz, 15 kHz。采样频率是48 kHz。查看输入和过滤后的输出频谱分析仪。

3千赫的音调和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 =简介(“PlotAsTwoSidedSpectrum”假的,“SampleRate”Sine1.SampleRate,“ShowLegend”,真的,“YLimits”,-160,60);SpecAna。ChannelNames = {“原始噪声信号”,“过滤信号”};我= 1:1000 x = Sine1 () + Sine2 Sine3 () + () + 0.1。* randn (Sine1.SamplesPerFrame, 1);y = bpFilt (x);SpecAna (x, y);结束发行版(SpecAna)

创建一个中投杀害多人者。级联杀害多人者的利益。

cicdecim = dsp.CICDecimator (“DecimationFactor”6“NumSections”6);decimcasc = dsp.FilterCascade (cicdecim,1 /增益(cicdecim));

设计一个补偿杀害多人者和级联滤波器级联,decimcasc。这个操作的巢穴dsp.FilterCascade物体在另一个滤波器级联的舞台。中投补偿杀害多人者有一个固有的增益,获得(cicdecim)。的因素1 /增益(cicdecim)从大量毁灭滤波器级联,decimcasc补偿,补偿滤波器增益。

%样本的输入速度补偿杀害多人者fs = 16 e3;%通带频率成就= 4 e3;%阻带频率fStop = 4.5 e3;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,“中投杀害多人者”,“中投公司补偿杀害多人者”,“总体响应”);

图级响应(dB)包含一个坐标轴对象。坐标轴对象与标题级响应(dB)包含6行类型的对象。这些对象代表中投杀害多人者:量化,中投杀害多人者:参考,中投公司补偿杀害多人者:量化,中投公司补偿杀害多人者:参考,总体响应:量化,总体响应:参考。

设计一个两阶段杀害多人者100 hz过渡宽度,2-kHz采样频率,60-dB阻带衰减。杀害多人者需要downsample 4倍。

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

验证您的设计使用fvtool

信息(filtCasc)
ans = '离散滤波器级联- - - - - - - - - - - - - - - - - - - - - - - - - - - - -数量的阶段:2克隆阶段:启用Stage1: dsp。FIRDecimator - - - - - - -离散冷杉多重速率的过滤器(真正的)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -滤波器结构:直接形式冷杉多相杀害多人者大量毁灭因素:2多相长度:10滤波器长度:19稳定:是的线性相位:是的(1型)算术:双重Stage2: dsp。FIRDecimator - - - - - - -离散冷杉多重速率的过滤器(真正的)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -滤波器结构:直接形式冷杉多相杀害多人者大量毁灭因素:2多相长度:18滤波器长度:35稳定:是的线性相位:是的(类型1)算术:双
fvtool (filtCasc)

图级响应(dB)包含一个坐标轴对象。坐标轴对象2级响应(dB)包含标题行类型的对象。

使用这种设计生成代码来过滤数据。你不能从生成C / c++代码dsp.FilterCascade直接对象,但您可以生成C / c++代码生成的函数。函数定义过滤阶段和调用序列。函数是保存在一个文件给我Decimator.m在当前目录中。

generateFilteringCode (filtCasc“myDecimator”);

我的杀害多人者函数创建一个滤波器级联,依次调用每个阶段对象。

类型myDecimator
函数y = myDecimator (x) % myDecimator构造滤波器级联过程每个阶段% MATLAB代码%由MATLAB 9.12 (R)和DSP系统工具箱9.14。%上生成:26 - 2月- 2022 15:18:38 %生成C / c++代码从这个函数使用codegen命令。%类型“帮助codegen”获得更多信息。% # codegen % %建设持久filter1 filter2如果isempty (filter1) filter1 = dsp。FIRDecimator (…“分子”,[0.0021878514650437845 0 0 0 0 0.031140395225498115 -0.082785931644222821 -0.010189095418136306 -0.010189095418136306 0.031140395225498115 -0.082785931644222821 0.30979571849010851 0.5 0.30979571849010851 0 0 0 0 0.0021878514650437845]);filter2 = dsp。FIRDecimator (…“分子”,[0.0011555011750488237 0.018592020073668478 -0.010736374060960912 -0.0027482166351233102 0.0057681982289523072 0 0 0 0 0 0 0 -0.099130756073130377 0.31592697826202448 0.5 0.31592697826202448 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]);% %过程结束日元= filter1 (x);y = filter2 (y1);

扩展功能

版本历史

介绍了R2014b

另请参阅

对象

功能