MATLAB函数——designfilt
designfilt:设计数字滤波器
文章目录
- 语法
- 说明
- 举例
- 输入参数
- `resp` - 滤波器响应和类型
- `d` - 数字滤波器
- 名称-值对参数
- 滤波器阶数
- 频率约束
- `'PassbandFrequency'`,`'PassbandFrequency1'`,`'PassbandFrequency2'` - 通带频率
- `'StopbandFrequency'`,`'StopbandFrequency1'`,`'StopbandFrequency2'` - 阻带频率
- `'CutoffFrequency'`,`'CutoffFrequency1'`,`'CutoffFrequency2'` - 6-dB 频率
- `'HalfPowerFrequency'`,`'HalfPowerFrequency1'`,`'HalfPowerFrequency2'` - 3-dB 频率
- `'TransitionWidth'` - 过渡带宽
- `'Frequencies'` - 响应频率
- `'NumBands'` - 频段的数量
- `'BandFrequencies1'`,`'...'`,`'BandFrequenciesN'` - 多频段响应频率
- 幅度约束
- 设计方法
- 设计方法选项
- `Window` - 窗
- `'MatchExactly'` - 与频段精确匹配
- `'PassbandOffset'` - 通带偏移
- `'ScalePassband'` - 通带缩放
- `'ZeroPhase'` - 零相位
- `'PassbandWeight'`,`'PassbandWeight1'`,`'PassbandWeight2'` - 通带优化权重
- `'StopbandWeight'`,`'StopbandWeight1'`,`'StopbandWeight2'` - 阻带优化权重
- `Weights` - 优化权重
- `'BandWeights1'`,`'...'`,`'BandWeightsN'` - 多频段权重
- 采样率
- 输出参数
- 更多相关
- 另请参阅
designfilt
:设计数字滤波器
语法
d = designfilt(resp,Name,Value)
说明
d = designfilt(resp,Name,Value)
设计一个响应类型为 resp
的 digitalFilter
对象 d
。使用一组 Name,Value
对进一步指定滤波器参数。允许的滤波器设计规范集取决于响应类型 resp
,并需要满足以下各项要求:
-
频率约束对应于所需滤波器的工作频率。示例中包括
'PassbandFrequency'
和'CutoffFrequency'
。(请参阅“名称-值对参数”下的完整列表。)您必须始终指定频率约束。 -
幅度约束描述了特定频率范围内的滤波器行为。示例中包括
'PassbandRipple'
和'StopbandAttenuation'
。(请参阅“名称-值对参数”下的完整列表。)designfilt
提供了未指定幅度约束时的默认值。 在任意幅度的设计中,必须始终指定所需幅度的向量。 -
'FilterOrder'
。一些设计方法可让您指定阶数,其他设计方法则生成最小阶数滤波器设计。即它们生成满足指定约束的最小滤波器。 -
'DesignMethod'
是用于设计滤波器的算法。示例中包括约束最小二乘法('cls'
)和 Kaiser 窗法('kaiserwin'
)。 对于某些规范集,有多种设计方法可供选择。 在其他情况下,只能使用一种方法来满足所需的规格。 -
设计选项是设计方法对应的参数。 示例中包括用于窗函数
'window'
法的'Window'
和用于任意幅值等波纹设计的优化'Weight'
。(请参阅“名称-值对参数”下的完整列表。)designfilt
为未指定的设计选项提供默认值。 -
'SampleRate'
是滤波器运行的频率。designfilt
的默认采样率为 2 Hz。使用此值等效于使用归一化频率。
注意:
如果在命令行中指定了一组不完整或不一致的名称-值对,designfilt
会提供打开滤波器设计助手 功能。它可以帮助您设计滤波器,并将校正后的 MATLAB® 代码粘贴到命令行上。
如果您从脚本或函数中使用一组错误的规范来调用designfilt
,designfilt
会发出一条错误消息,并带有一个链接以打开滤波器设计助手。它可以帮助您设计滤波器,注释掉函数或脚本中的错误代码,并将校正后的 MATLAB 代码粘贴到下一行。
-
使用
dataOut = filter(d,dataIn)
形式的filter
函数来通过digitalFilter
类型的对象d
来对信号进行滤波。 -
使用 FVTool 将
digitalFilter
类型的对象d
可视化。 -
输入
d.Coefficients
以获取digitalFilter
类型的对象d
的系数。 对于IIR滤波器,系数表示为二阶节。 -
有关可与
digitalFilter
对象一起使用的滤波和分析功能的列表,请参见digitalFilter
。
designfilt(d)
使您可以编辑现有的数字滤波器 d
。它会打开滤波器设计助手,其中显示了现有滤波器的规格,您可以对其进行修改。 这是编辑 digitalFilter
对象的唯一方法。 否则,它的属性是只读的。
举例
低通 FIR 滤波器
设计一个最小阶低通 FIR 滤波器,其归一化通带频率为 0.25 π \pi π rad / s,阻带频率为 0.35 π \pi π rad / s,通带纹波为 0.5 dB,阻带衰减为 65 dB。使用 Kaiser 窗设计滤波器。将其幅度响应可视化。用它对随机数据向量进行滤波。
lpFilt = designfilt('lowpassfir','PassbandFrequency',0.25, ...
'StopbandFrequency',0.35,'PassbandRipple',0.5, ...
'StopbandAttenuation',65,'DesignMethod','kaiserwin');
fvtool(lpFilt)
dataIn = rand(1000,1);
dataOut = filter(lpFilt,dataIn);
低通 IIR 滤波器
设计一个低通 IIR 滤波器,其阶数为 8,通带频率为 35 kHz,通带纹波为 0.2 dB。 指定 200 kHz 的采样率。 将滤波器的幅度响应可视化。
lpFilt = designfilt('lowpassiir','FilterOrder',8, ...
'PassbandFrequency',35e3,'PassbandRipple',0.2, ...
'SampleRate',200e3);
fvtool(lpFilt)
使用您设计的滤波器对 1000 个样本的随机信号进行滤波。
dataIn = randn(1000,1);
dataOut = filter(lpFilt,dataIn);
输出滤波器系数,表示为二阶节。
sos = lpFilt.Coefficients
sos = 4×6
0.2666 0.5333 0.2666 1.0000 -0.8346 0.9073
0.1943 0.3886 0.1943 1.0000 -0.9586 0.7403
0.1012 0.2023 0.1012 1.0000 -1.1912 0.5983
0.0318 0.0636 0.0318 1.0000 -1.3810 0.5090
高通 FIR 滤波器
设计一个最小阶高通 FIR 滤波器,其归一化阻带频率为 0.25 π \pi π rad / s,通带频率为 0.35 π \pi π rad / s,通带纹波为 0.5 dB,阻带衰减为 65 dB。 使用 Kaiser 窗设计滤波器。 将其幅度响应可视化。 用它对 1000 个随机数据样本进行滤波。
hpFilt = designfilt('highpassfir','StopbandFrequency',0.25, ...
'PassbandFrequency',0.35,'PassbandRipple',0.5, ...
'StopbandAttenuation',65,'DesignMethod','kaiserwin');
fvtool(hpFilt)
dataIn = randn(1000,1);
dataOut = filter(hpFilt,dataIn);
高通 IIR 滤波器
设计一个高通 IIR 滤波器,其阶数为 8,通带频率为 75 kHz,通带纹波为 0.2 dB。 指定 200 kHz 的采样率。将滤波器的幅度响应可视化。 将滤波器应用于随机数据的 1000个 样本矢量。
hpFilt = designfilt('highpassiir','FilterOrder',8, ...
'PassbandFrequency',75e3,'PassbandRipple',0.2, ...
'SampleRate',200e3);
fvtool(hpFilt)
dataIn = randn(1000,1);
dataOut = filter(hpFilt,dataIn);
带通 FIR 滤波器
设计一个具有下截止频率 500 Hz 和上截止频率 560 Hz 的 20 阶带通 FIR 滤波器。 采样率为 1500 Hz。将滤波器的幅度响应可视化。 用它对包含 1000 个样本的随机信号进行滤波。
bpFilt = designfilt('bandpassfir','FilterOrder',20, ...
'CutoffFrequency1',500,'CutoffFrequency2',560, ...
'SampleRate',1500);
fvtool(bpFilt)
dataIn = randn(1000,1);
dataOut = filter(bpFilt,dataIn);
输出滤波器系数。
b = bpFilt.Coefficients
b = 1×21
-0.0113 0.0067 0.0125 -0.0445 0.0504 0.0101 -0.1070 0.1407 -0.0464 -0.1127 0.1913 -0.1127 -0.0464 0.1407 -0.1070 0.0101 0.0504 -0.0445 0.0125 0.0067 -0.0113
带通 IIR 滤波器
设计一个 20 阶带通 IIR 滤波器,其下 3-dB 频率为 500 Hz,上 3-dB 频率为 560 Hz。 采样率为1500 Hz。 将滤波器的频率响应可视化。用它对包含 1000 个样本的随机信号进行滤波。
bpFilt = designfilt('bandpassiir','FilterOrder',20, ...
'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ...
'SampleRate',1500);
fvtool(bpFilt)
dataIn = randn(1000,1);
dataOut = filter(bpFilt,dataIn);
带阻 FIR 滤波器
设计一个具有下截止频率 500 Hz 和上截止频率 560 Hz 的 20 阶带阻 FIR 滤波器。 采样率为 1500 Hz。将滤波器的幅度响应可视化。用它对包含 1000 个样本的随机信号进行滤波。
bsFilt = designfilt('bandstopfir','FilterOrder',20, ...
'CutoffFrequency1',500,'CutoffFrequency2',560, ...
'SampleRate',1500);
fvtool(bsFilt)
dataIn = randn(1000,1);
dataOut = filter(bsFilt,dataIn);
带阻 IIR 滤波器
设计一个 20 阶带阻 IIR 滤波器,其下 3-dB 频率为 500 Hz,上 3-dB较高频率为 560 Hz。采样率为 1500 Hz。可视化滤波器的幅度响应。用它对包含 1000 个样本的随机信号进行滤波。
bsFilt = designfilt('bandstopiir','FilterOrder',20, ...
'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ...
'SampleRate',1500);
fvtool(bsFilt)
dataIn = randn(1000,1);
dataOut = filter(bsFilt,dataIn);
FIR 微分器
设计一个 7 阶的全频段微分滤波器。显示其零相位响应。用它对包含 1000 个样本的随机信号进行滤波。
dFilt = designfilt('differentiatorfir','FilterOrder',7);
fvtool(dFilt,'MagnitudeDisplay','Zero-phase')
dataIn = randn(1000,1);
dataOut = filter(dFilt,dataIn);
FIR 希尔伯特变换器
设计一个 18 阶的希尔伯特变换器。指定归一化的过渡带宽为 0.25 π \pi π rad / s。以线性单位显示滤波器的幅度响应。用它对包含 1000 个样本的随机信号进行滤波。
hFilt = designfilt('hilbertfir','FilterOrder',18,'TransitionWidth',0.25);
fvtool(hFilt,'MagnitudeDisplay','magnitude')
dataIn = randn(1000,1);
dataOut = filter(hFilt,dataIn);
任意幅度 FIR 滤波器
给定一个以 1 kHz 采样的信号。设计一个滤波器,使其阻止 100 Hz 至 350 Hz 之间的频率以及大于 400 Hz 的频率。 指定的滤波器阶数为 60。将滤波器的频率响应可视化。用它对包含 1000 个样本的随机信号进行滤波。
mbFilt = designfilt('arbmagfir','FilterOrder',60, ...
'Frequencies',0:50:500,'Amplitudes',[1 1 1 0 0 0 0 1 1 0 0], ...
'SampleRate',1000);
fvtool(mbFilt)
dataIn = randn(1000,1);
dataOut = filter(mbFilt,dataIn);
输入参数
resp
- 滤波器响应和类型
滤波器响应和类型,指定为字符向量或字符串标量,指定为 'lowpassfir'
、 'lowpassiir'
、 'highpassfir'
、 'highpassiir'
、 'bandpassfir'
、 'bandpassiir'
、 'bandstopfir'
、 'bandstopiir'
、 'differentiatorfir'
、 'hilbertfir'
或 'arbmagfir'
'lowpassfir
选择此选项可设计有限脉冲响应(FIR)低通滤波器。 本示例使用下表中的第五个规范集。
d = designfilt('lowpassfir', ... % 响应类型
'FilterOrder',25, ... % 滤波器阶数
'PassbandFrequency',400, ... % 频率约束
'StopbandFrequency',550, ...
'DesignMethod','ls', ... % 设计方法
'PassbandWeight',1, ... % 设计方法选项
'StopbandWeight',2, ...
'SampleRate',2000) % 采样率
-
如果省略
'FilterOrder'
(必要时)或任何频率约束,designfilt
会抛出错误。 -
如果省略幅度约束,
designfilt
将使用默认值。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
N/A(最小阶设计) | 'PassbandFrequency' 'StopbandFrequency' | 'PassbandRipple' 'StopbandAttenuation' | 以下二选一:'equiripple' (默认)'kaiserwin' | N/A(当使用 'equiripple' 设计方法)'ScalePassband' (当使用 'kaiserwin' 设计方法) |
'FilterOrder' | 'HalfPowerFrequency' | N/A | 'maxflat' | N/A |
'FilterOrder' | 'CutoffFrequency' | N/A | 'window' | 'Window' 'ScalePassband' |
'FilterOrder' | 'CutoffFrequency' | 'PassbandRipple' 'StopbandAttenuation' | ‘cls’ | 'PassbandOffset' 'ZeroPhase' |
'FilterOrder' | 'PassbandFrequency' 'StopbandFrequency' | N/A | 以下二选一:'equiripple' (默认)'ls' | 'PassbandWeight' 'StopbandWeight' |
################ | ##################### |
'lowpassiir'
选择此选项可设计无限脉冲响应(IIR)低通滤波器。 本示例使用下表中的第一个规范集。
d = designfilt('lowpassiir', ... % 响应类型
'PassbandFrequency',400, ... % 频率约束
'StopbandFrequency',550, ...
'PassbandRipple',4, ... % 幅度约束
'StopbandAttenuation',55, ...
'DesignMethod','ellip', ... % 设计方法
'MatchExactly','passband', ... % 设计方法选项
'SampleRate',2000) % 采样率
-
如果省略
'FilterOrder'
(必要时)或任何频率约束,designfilt
会抛出错误。 -
如果省略幅度约束,
designfilt
将使用默认值。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
N/A(最小阶设计) | 'PassbandFrequency' 'StopbandFrequency' | 'PassbandRipple' 'StopbandAttenuation' | 以下四选一:'butter' (默认)'cheby1' 'cheby2' 'ellip' | 'MatchExactly' |
'FilterOrder' | 'HalfPowerFrequency' | N/A | 'butter' | N/A |
'FilterOrder' | 'PassbandFrequency' | 'PassbandRipple' | 'cheby1' | N/A |
'FilterOrder' | 'PassbandFrequency' | 'PassbandRipple' 'StopbandAttenuation' | 'ellip' | N/A |
'FilterOrder' | 'StopbandFrequency' | 'StopbandAttenuation' | 'cheby2' | N/A |
'NumeratorOrder' 'DenominatorOrder' | 'HalfPowerFrequency' | N/A | 'butter' | N/A |
'highpassfir'
选择此选项可设计有限脉冲响应(FIR)高通滤波器。 本示例使用下表中的第一个规范集。
d = designfilt('highpassfir', ... % 响应类型
'StopbandFrequency',400, ... % 频率约束
'PassbandFrequency',550, ...
'StopbandAttenuation',55, ... % 幅度约束
'PassbandRipple',4, ...
'DesignMethod','kaiserwin', ... % 设计方法
'ScalePassband',false, ... % 设计方法选项
'SampleRate',2000) % 采样率
-
如果省略
'FilterOrder'
(必要时)或任何频率约束,designfilt
会抛出错误。 -
如果省略幅度约束,
designfilt
将使用默认值。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
N/A(最小阶设计) | 'StopbandFrequency' 'PassbandFrequency' | 'StopbandAttenuation' 'PassbandRipple' | 以下二选一:'equiripple' (默认)'kaiserwin' | N/A(当使用 'equiripple' 设计方法)'ScalePassband' (当使用 'kaiserwin' 设计方法) |
'FilterOrder' | 'CutoffFrequency' | N/A | 'window' | 'Window' 'ScalePassband' |
'FilterOrder' | 'CutoffFrequency' | 'StopbandAttenuation' 'PassbandRipple' | 'cls' | 'PassbandOffset' 'ZeroPhase' |
'FilterOrder' | 'StopbandFrequency' 'PassbandFrequency' | N/A | 以下二选一:'equiripple' (默认)'ls' | 'PassbandWeight' 'StopbandWeight' |
################ | ##################### |
'highpassiir'
选择此选项可设计无限脉冲响应(IIR)高通滤波器。 本示例使用下表中的第一个规范集。
d = designfilt('highpassiir', ... % 响应类型
'StopbandFrequency',400, ... % 频率约束
'PassbandFrequency',550, ...
'StopbandAttenuation',55, ... % 幅度约束
'PassbandRipple',4, ...
'DesignMethod','cheby1', ... % 设计方法
'MatchExactly','stopband', ... % 设计方法约束
'SampleRate',2000) % 采样率
-
如果省略
'FilterOrder'
(必要时)或任何频率约束,designfilt
会抛出错误。 -
如果省略幅度约束,
designfilt
将使用默认值。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
N/A(最小阶设计) | 'StopbandFrequency' 'PassbandFrequency' | 'StopbandAttenuation' 'PassbandRipple' | 以下四选一:'butter' (默认)'cheby1' 'cheby2' 'ellip' | 'MatchExactly' |
'FilterOrder' | 'HalfPowerFrequency' | N/A | 'butter' | N/A |
'FilterOrder' | 'PassbandFrequency' | 'PassbandRipple' | 'cheby1' | N/A |
'FilterOrder' | 'PassbandFrequency' | 'StopbandAttenuation' 'PassbandRipple' | 'ellip' | N/A |
'FilterOrder' | 'StopbandFrequency' | 'StopbandAttenuation' | 'cheby2' | N/A |
'NumeratorOrder' 'DenominatorOrder' | 'HalfPowerFrequency' | N/A | 'butter' | N/A |
'bandpassfir'
选择此选项可设计有限脉冲响应(FIR)带通滤波器。 本示例使用下表中的第四个规范集。
d = designfilt('bandpassfir', ... % 响应类型
'FilterOrder',86, ... % 滤波器阶数
'StopbandFrequency1',400, ... % 频率约束
'PassbandFrequency1',450, ...
'PassbandFrequency2',600, ...
'StopbandFrequency2',650, ...
'DesignMethod','ls', ... % 设计方法
'StopbandWeight1',1, ... % 设计方法选项
'PassbandWeight', 2, ...
'StopbandWeight2',3, ...
'SampleRate',2000) % 采样率
-
如果省略
'FilterOrder'
(必要时)或任何频率约束,designfilt
会抛出错误。 -
如果省略幅度约束,
designfilt
将使用默认值。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
N/A(最小阶设计) | 'StopbandFrequency1' 'PassbandFrequency1' 'PassbandFrequency2' 'StopbandFrequency2' | 'StopbandAttenuation1' 'PassbandRipple' 'StopbandAttenuation2' | 以下二选一:'equiripple' (默认)'kaiserwin' | N/A(当使用 'equiripple' 设计方法)'ScalePassband' (当使用 'kaiserwin' 设计方法) |
'FilterOrder' | 'CutoffFrequency1' 'CutoffFrequency2' | N/A | 'window' | 'Window' 'ScalePassband' |
'FilterOrder' | 'CutoffFrequency1' 'CutoffFrequency2' | 'StopbandAttenuation1' 'PassbandRipple' 'StopbandAttenuation2' | 'cls' | 'PassbandOffset' 'ZeroPhase' |
'FilterOrder' | 'StopbandFrequency1' 'PassbandFrequency1' 'PassbandFrequency2' 'StopbandFrequency2' | N/A | 以下二选一:'equiripple' (默认)'ls' | 'PassbandWeight1' 'StopbandWeight' 'PassbandWeight2' |
################ | ##################### |
'bandpassiir'
选择此选项可设计无限脉冲响应(IIR)带通滤波器。 本示例使用下表中的第一个规范集。
d = designfilt('bandpassiir', ... % 响应类型
'StopbandFrequency1',400, ... % 频率约束
'PassbandFrequency1',450, ...
'PassbandFrequency2',600, ...
'StopbandFrequency2',650, ...
'StopbandAttenuation1',40, ... % 幅度约束
'PassbandRipple',1, ...
'StopbandAttenuation2',50, ...
'DesignMethod','ellip', ... % 设计方法
'MatchExactly','passband', ... % 设计方法选项
'SampleRate',2000) % 采样率
-
如果省略
'FilterOrder'
(必要时)或任何频率约束,designfilt
会抛出错误。 -
如果省略幅度约束,
designfilt
将使用默认值。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
N/A(最小阶设计) | 'StopbandFrequency1' 'PassbandFrequency1' 'PassbandFrequency2' 'StopbandFrequency2' | 'StopbandAttenuation1' 'PassbandRipple' 'StopbandAttenuation2' | 以下四选一:'butter' (默认)'cheby1' 'cheby2' 'ellip' | 'MatchExactly' |
'FilterOrder' | 'HalfPowerFrequency1' 'HalfPowerFrequency2' | N/A | 'butter' | N/A |
'FilterOrder' | 'PassbandFrequency1' 'PassbandFrequency2' | 'PassbandRipple' | 'cheby1' | N/A |
'FilterOrder' | 'PassbandFrequency1' 'PassbandFrequency2' | 'StopbandAttenuation1' 'PassbandRipple' 'StopbandAttenuation2' | 'ellip' | N/A |
'FilterOrder' | 'StopbandFrequency1' 'StopbandFrequency2' | 'StopbandAttenuation' | 'cheby2' | N/A |
'bandstopfir'
选择此选项可设计有限脉冲响应(FIR)带阻滤波器。 本示例使用下表中的第四个规范集。
d = designfilt('bandstopfir', ... % 响应类型
'FilterOrder',32, ... % 滤波器阶数
'PassbandFrequency1',400, ... % 频率约束
'StopbandFrequency1',500, ...
'StopbandFrequency2',700, ...
'PassbandFrequency2',850, ...
'DesignMethod','ls', ... % 设计方法
'PassbandWeight1',1, ... % 设计方法选项
'StopbandWeight', 3, ...
'PassbandWeight2',5, ...
'SampleRate',2000) % 采样率
-
如果省略
'FilterOrder'
(必要时)或任何频率约束,designfilt
会抛出错误。 -
如果省略幅度约束,
designfilt
将使用默认值。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
N/A(最小阶设计) | 'PassbandFrequency1' 'StopbandFrequency1' 'StopbandFrequency2' 'PassbandFrequency2' | 'PassbandRipple1' 'StopbandAttenuation' 'PassbandRipple2' | 以下二选一:'equiripple' (默认)'kaiserwin' | N/A(当使用 'equiripple' 设计方法)'ScalePassband' (当使用 'kaiserwin' 设计方法) |
'FilterOrder' | 'CutoffFrequency1' 'CutoffFrequency2' | N/A | 'window' | 'Window' 'ScalePassband' |
'FilterOrder' | 'CutoffFrequency1' 'CutoffFrequency2' | 'PassbandRipple1' 'StopbandAttenuation' 'PassbandRipple2' | 'cls' | 'PassbandOffset' 'ZeroPhase' |
'FilterOrder' | 'PassbandFrequency1' 'StopbandFrequency1' 'StopbandFrequency2' 'PassbandFrequency2' | N/A | 以下二选一:'equiripple' (默认)'ls' | 'PassbandWeight1' 'StopbandWeight' 'PassbandWeight2' |
################ | ##################### |
'bandstopiir'
选择此选项可设计无限脉冲响应(IIR)带阻滤波器。 本示例使用下表中的第一个规范集。
d = designfilt('bandstopiir', ... % 响应类型
'PassbandFrequency1',400, ... % 频率约束
'StopbandFrequency1',500, ...
'StopbandFrequency2',700, ...
'PassbandFrequency2',850, ...
'PassbandRipple1',1, ... % 幅度约束
'StopbandAttenuation',55, ...
'PassbandRipple2',1, ...
'DesignMethod','ellip', ... % 设计方法
'MatchExactly','both', ... % 设计方法选项
'SampleRate',2000) % 采样率
-
如果省略
'FilterOrder'
(必要时)或任何频率约束,designfilt
会抛出错误。 -
如果省略幅度约束,
designfilt
将使用默认值。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
SampleRate
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
N/A(最小阶设计) | 'PassbandFrequency1' 'StopbandFrequency1' 'StopbandFrequency2' 'PassbandFrequency2' | 'PassbandRipple1' 'StopbandAttenuation' 'PassbandRipple2' | 以下四选一:'butter' (默认)'cheby1' 'cheby2' 'ellip' | 'MatchExactly' |
'FilterOrder' | 'HalfPowerFrequency1' 'HalfPowerFrequency2' | N/A | 'butter' | N/A |
'FilterOrder' | 'PassbandFrequency1' 'PassbandFrequency2' | 'PassbandRipple' | 'cheby1' | N/A |
'FilterOrder' | 'PassbandFrequency1' 'PassbandFrequency2' | 'PassbandRipple' 'StopbandAttenuation' | 'ellip' | N/A |
'FilterOrder' | 'StopbandFrequency1' 'StopbandFrequency2' | 'StopbandAttenuation' | 'cheby2' | N/A |
'differentiatorfir'
选择此选项可设计有限脉冲响应(FIR)微分滤波器。 本示例使用下表中的第二个规范集。
d = designfilt('differentiatorfir', ... % 响应类型
'FilterOrder',42, ... % 滤波器阶数
'PassbandFrequency',400, ... % 频率约束
'StopbandFrequency',500, ...
'DesignMethod','equiripple', ... % 设计方法
'PassbandWeight',1, ... % 设计方法选项
'StopbandWeight',4, ...
'SampleRate',2000) % 采样率
-
如果在设计部分频段微分器时省略
'FilterOrder'
或任何频率约束,designfilt
会抛出错误。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
'FilterOrder' | N/A | N/A | 以下二选一:'equiripple' (默认)'ls' | N/A |
'FilterOrder' | 'PassbandFrequency' 'StopbandFrequency' | N/A | 以下二选一:'equiripple' (默认)'ls' | 'PassbandWeight' 和 'StopbandWeight' (当使用 'equiripple' 设计方法)N/A(当使用 'ls' 设计方法) |
################ | ############# | ##################### |
'hilbertfir'
选择此选项可设计有限脉冲响应(FIR)希尔伯特变压器滤波器。 本示例使用下表中的规范集。
d = designfilt('hilbertfir', ... % R响应类型
'FilterOrder',12, ... % 滤波器阶数
'TransitionWidth',400, ... % 频率约束
'DesignMethod','ls', ... % 设计方法
'SampleRate',2000) % 采样率
如果省略 'FilterOrder'
或 'TransitionWidth'
,designfilt
会抛出错误。
如果省略 'DesignMethod'
,designfilt
将使用默认的希尔伯特变换器的设计方法。
如果省略 'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
'FilterOrder' | 'TransitionWidth' | N/A | 以下二选一:'equiripple' (默认)'ls' | N/A |
'arbmagfir'
选择此选项可以设计任意幅度响应的有限脉冲响应(FIR)滤波器。 本示例使用下表中的第二个规范集。
d = designfilt('arbmagfir', ... % 响应类型
'FilterOrder',88, ... % 滤波器阶数
'NumBands',4, ... % 频率约束
'BandFrequencies1',[0 20], ...
'BandFrequencies2',[25 40], ...
'BandFrequencies3',[45 65], ...
'BandFrequencies4',[70 100], ...
'BandAmplitudes1',[2 2], ... % 幅度约束
'BandAmplitudes2',[0 0], ...
'BandAmplitudes3',[1 1], ...
'BandAmplitudes4',[0 0], ...
'DesignMethod','ls', ... % 设计方法
'BandWeights1',[1 1]/10, ... % 设计方法选项
'BandWeights2',[3 1], ...
'BandWeights3',[2 4], ...
'BandWeights4',[5 1], ...
'SampleRate',200) % 采样率
-
如果省略
'FilterOrder'
或任何频率、幅度约束,designfilt
会抛出错误。 -
如果省略
'DesignMethod'
,designfilt
将对规范集使用默认的设计方法。 -
如果省略设计方法选项,
designfilt
将使用默认值作为选择的设计方法。 -
如果省略
'SampleRate'
,designfilt
将其设置为 2 Hz。
滤波器阶数参数名 | 频率约束参数名 | 幅度约束参数名 | 'DesignMethod' 参数值 | 设计选项参数名 |
---|---|---|---|---|
'FilterOrder' | 'Frequencies' | 'Amplitudes' | 以下三选一:'freqsamp' (默认)'equiripple' 'ls' | 'Window' (当使用 'freqsamp' 设计方法)'Weights' (当使用 'equiripple' 或 'ls' 设计方法) |
'FilterOrder' 'NumBands' | 'BandFrequencies1' … 'BandFrequenciesN' | 'BandAmplitudes1' … 'BandAmplitudesN' | 以下二选一:'equiripple' (默认)'ls' | 'BandWeights1' … 'BandWeightsN' |
################ | ##################### |
数据类型:char
| string
d
- 数字滤波器
数字滤波器,指定为由 designfilt
生成的 digitalFilter
对象。 使用此输入可更改现有 digitalFilter
的规格。
名称-值对参数
指定可选的逗号分隔的 Name,Value
参数对。Name
是参数名称,Value
是相应的值。 Name
必须出现在引号中。您可以按任意顺序指定多个名称和值对参数,例如 Name1,Value1,…NameN,ValueN
。
举例:'FilterOrder',20,'CutoffFrequency',0.4
足以指定一个低通FIR滤波器。
并非所有 Name,Value
参数对的组合都是有效的。有效的组合取决于所需的滤波器响应以及设计的频率和幅度约束。
滤波器阶数
'FilterOrder'
- 滤波器阶数
滤波器阶数,指定为以逗号分隔的,由 FilterOrder
和一个正整数标量组成的一对参数。
数据类型:double
'NumeratorOrder'
- 分子阶数
IIR 滤波器的分子阶数,指定为以逗号分隔的,由 'NumeratorOrder'
和一个正整数标量组成的一对参数。
数据类型:double
'DenominatorOrder'
- 分母阶数
IIR 滤波器的分母阶数,指定为以逗号分隔的,由 'DenominatorOrder'
和一个正整数标量组成的一对参数。
数据类型:double
频率约束
'PassbandFrequency'
,'PassbandFrequency1'
,'PassbandFrequency2'
- 通带频率
通带频率,指定为以逗号分隔的,由 PassbandFrequency
和一个正标量组成的一对参数。频率值必须在奈奎斯特范围内。
'PassbandFrequency1'
是带通或带阻滤波器的较低通带频率。
'PassbandFrequency2'
是带通或带阻滤波器的较高通带频率。
数据类型:double
'StopbandFrequency'
,'StopbandFrequency1'
,'StopbandFrequency2'
- 阻带频率
阻带频率,指定为以逗号分隔的,由 StopbandFrequency
和一个正标量组成的一对参数。频率值必须在奈奎斯特范围内。
'StopbandFrequency1'
是带通或带阻滤波器的较低阻带频率。
'StopbandFrequency2'
是带通或带阻滤波器的较高阻带频率。
数据类型:double
'CutoffFrequency'
,'CutoffFrequency1'
,'CutoffFrequency2'
- 6-dB 频率
6-dB 频率,指定为以逗号分隔的,由 CutoffFrequency
和一个正标量组成的一对参数。频率值必须在奈奎斯特范围内。
'CutoffFrequency1'
是带通或带阻滤波器较低的 6-dB 频率。
'CutoffFrequency2'
是带通或带阻滤波器较高的 6-dB 频率。
数据类型:double
'HalfPowerFrequency'
,'HalfPowerFrequency1'
,'HalfPowerFrequency2'
- 3-dB 频率
3-dB 频率,指定为以逗号分隔的,由 HalfPowerFrequency
和一个正标量组成的一对参数。频率值必须在奈奎斯特范围内。
'HalfPowerFrequency1'
是带通或带阻滤波器较低的 3-dB 频率。
'HalfPowerFrequency2'
是带通或带阻滤波器较高的 3-dB 频率。
数据类型:double
'TransitionWidth'
- 过渡带宽
希尔伯特变换器的通带和阻带之间的过渡带宽,指定为以逗号分隔的,由 'TransitionWidth'
和一个正标量组成的一对参数。
数据类型:double
'Frequencies'
- 响应频率
响应频率,指定为以逗号分隔的,由 'Frequencies'
和一个向量组成的一对参数。
使用此变量列出任意幅度响应的滤波器具有期望振幅的频率。频率必须是单调递增的,且在奈奎斯特范围内。向量的第一个元素必须为 0 或
−
f
s
/
2
-f_s/2
−fs/2,其中
f
s
f_s
fs 为采样率,其最后一个元素必须为
f
s
/
2
f_s/2
fs/2。如果没有指定采样率,则 designfilt
使用默认值 2 Hz。
数据类型:double
'NumBands'
- 频段的数量
多频段设计中的频段数,指定为以逗号分隔的,由 'NumBands'
和不大于 10 的正整数标量组成的一对参数。
数据类型:double
'BandFrequencies1'
,'...'
,'BandFrequenciesN'
- 多频段响应频率
多频段响应频率,指定以逗号分隔的,由 'BandFrequenciesi'
和一个数值向量组成的一对参数。
'BandFrequenciesi'
包含多频段设计的第
i
i
i 个频段所需振幅值 'BandAmplitudesi'
对应的频率,其中
i
i
i 的范围从1 到 NumBands
。numband
最多可以是 10。频率必须在奈奎斯特范围内,且是单调递增的。相邻的频段在其交点处必须有相同的振幅。
数据类型:double
幅度约束
'PassbandRipple'
,'PassbandRipple1'
,'PassbandRipple2'
- 通带纹波
通带纹波,指定为以逗号分隔的,由 'PassbandRipple'
和一个以分贝表示的正标量(默认为 1)组成的一对参数。
'PassbandRipple1'
是带阻滤波器的较低频带通带纹波。
'PassbandRipple2'
是带阻滤波器的较高频带通带纹波。
数据类型:double
'StopbandAttenuation'
,'StopbandAttenuation1'
,'StopbandAttenuation2'
- 阻带衰减
通带纹波,指定为以逗号分隔的,由 'StopbandAttenuation'
和一个以分贝表示的正标量(默认为 60)组成的一对参数。
'StopbandAttenuation1'
是带通滤波器的较低频带通带纹波。
'StopbandAttenuation2'
是带通滤波器的较高频带通带纹波。
数据类型:double
'Amplitudes'
- 期望响应幅度
任意幅度响应滤波器的期望响应幅度,指定为以逗号分隔的,由 'Amplitudes'
和一个向量组成的一对参数。幅度以线性单位表示。向量的长度必须与 'Frequencies'
相同。
数据类型:double
'BandAmplitudes1'
,'...'
,'BandAmplitudesN'
- 多频段响应幅度
多频段响应幅度,指定以逗号分隔的,由 BandAmplitudesi
和一个数值向量组成的一对参数。
'BandAmplitudesi'
包含多频段设计的第
i
i
i 个频段的所需振幅值,其中
i
i
i 的范围从1 到 NumBands
。numband
最多可以是 10。幅度以线性单位表示。'BandAmplitudesi'
的长度必须与 'BandFrequenciesi'
相同。相邻的频段在其交点处必须有相同的振幅。
数据类型:double
设计方法
'DesignMethod'
- 设计方法
设计方法,指定为以逗号分隔的,由 'DesignMethod'
和字符向量或字符串标量组成的一对参数。后者可指定为 'butter'
、 'cheby1'
、 'cheby2'
、 'cls'
、 'ellip'
、 'equiripple'
、 'freqsamp'
、 'kaiserwin'
、 'ls'
、 'maxflat'
或 'window'
。设计方法的选择取决于您指定的一组频率和幅度约束。
-
'butter'
设计一个巴特沃斯 IIR 滤波器。巴特沃斯滤波器具有平滑的单调频率响应,该频率响应在通带中最大平坦。巴特沃斯滤波器牺牲了滚降的陡度以获得通带的平坦度。 -
'cheby1'
设计一个切比雪夫 I 型 IIR 滤波器。切比雪夫 I 型滤波器的频率响应在通带中相等,在阻带中最大平坦。其通带纹波随着滚降陡度的增加而增加。 -
'cheby2'
设计一个切比雪夫 II 型 IIR 滤波器。切比雪夫 II 型滤波器的频率响应在通带中最大为平坦,在阻带中为等波纹。 -
'cls'
使用约束最小二乘法设计 FIR 滤波器。该方法将指定的任意分段线性函数与滤波器的幅度响应之间的差异最小化。同时,它允许您设置通带纹波和阻带衰减。 -
'ellip'
设计一个椭圆 IIR 滤波器。椭圆滤波器的频率响应在通带和阻带中均相等。 -
'equiripple'
使用 Parks-McClellan 算法设计一个等波纹 FIR 滤波器。等波纹滤波器的频率响应可使所有频带上的最大纹波幅度最小。 -
'freqsamp'
通过对频率响应进行均匀采样并进行傅立叶逆变换来设计任意幅度响应的 FIR 滤波器。 -
'kaiserwin'
使用 Kaiser 窗法设计 FIR 滤波器。该方法会截断理想滤波器的脉冲响应,并使用 Kaiser 窗使得由截断产生振荡衰减。 -
'ls'
使用最小二乘法设计 FIR 滤波器。该方法将指定的任意分段线性函数与滤波器的幅度响应之间的差异最小化。 -
'maxflat'
设计一个最大平坦的 FIR 滤波器。这些滤波器具有平滑的单调频率响应,在通带中最大程度平坦。 -
window''
使用最小二乘近似来计算滤波器系数,然后使用'Window'
平滑脉冲响应。
数据类型:char
| string
设计方法选项
Window
- 窗
窗,指定为以逗号分隔的,由 Window
和长度为
N
+
1
N + 1
N+1 的一个向量组成的一对参数,其中
N
N
N 为滤波器阶数。后者可指定为数值向量,窗名,函数句柄(function handle)或元胞数组(cell array)。对于 'freqsamp'
设计方法,Window
是默认为一个空向量;对于 window
设计方法,Window
默认为 @hamming
。
Window
可以与指定用于生成窗的函数的窗名称或函数句柄匹配。任何此类功能必须以
N
+
1
N +1
N+1 作为第一个输入。可以通过指定元胞数组来传递其他输入。
有关可用窗口的列表,请参见窗。
举例:'Window',hann(N+1)
和 'Window',(1-cos(2*pi*(0:N)'/N))/2
都指定要与 N 阶滤波器一起使用的汉宁窗。
举例:'Window','hamming'
指定所需阶数的汉明窗。
举例:'Window',@mywindow
让您定义自己的窗函数。
举例:'Window',{@kaiser,0.5}
指定一个成型参数为 0.5 的所需阶数的 Kaiser 窗。
数据类型:double
| char
| string
| function_handle
| cell
'MatchExactly'
- 与频段精确匹配
与频段精确匹配,指定为以逗号分隔的,由 'MatchExactly'
和 'stopband'
,'passband'
或 'both'
组成的一对参数。'both'
仅适用于椭圆设计方法,且为默认值。'butter'
和 'cheby2'
方法的默认值为 'stopband'
。passband
是 'cheby1'
的默认值。
数据类型:char
| string
'PassbandOffset'
- 通带偏移
通带偏移,指定为以逗号分隔的,由 'PassbandOffset'
和以分贝表示的一个正标量(默认为 0)组成的一对参数。'PassbandOffset'
指定通带中的滤波器增益。
举例:'PassbandOffset',0
产生通带具有单位增益的滤波器。
举例:'PassbandOffset',2
产生通带增益为 2 dB 或 1.259 的滤波器。
数据类型:double
'ScalePassband'
- 通带缩放
通带标准化,指定为以逗号分隔的,由 'ScalePassband'
和一个逻辑标量(默认为 true)组成的一对参数。 将 'ScalePassband'
设置为 true 时,在通过窗后缩放通带,以使滤波器在零频率处具有单位增益。
举例:'Window',{@kaiser,0.1},'ScalePassband',true
帮助指定一个滤波器,其在零频率时的幅度响应恰好为 0 dB。 当您指定 'ScalePassband',false
时不是这种情况。要进行验证,请使用 fvtool
将过滤器可视化后放大观察。
数据类型:logical
'ZeroPhase'
- 零相位
零相位,指定为以逗号分隔的,由 'ZeroPhase'
和一个逻辑标量组成的一对参数。 当您将 'ZeroPhase'
设置为 true
时,所得滤波器的零相响应始终为正。这使您可以对结果执行频谱分解并从中获得最小相位滤波器。
数据类型:logical
'PassbandWeight'
,'PassbandWeight1'
,'PassbandWeight2'
- 通带优化权重
通带优化权重,指定为以逗号分隔的,由 'PassbandWeight'
和一个正标量(默认为 1)组成的一对参数。
'PassbandWeight1'
是带阻 FIR 滤波器的较低频的通带优化权重。
'PassbandWeight2'
是带阻 FIR 滤波器的较高频的通带优化权重。
数据类型:double
'StopbandWeight'
,'StopbandWeight1'
,'StopbandWeight2'
- 阻带优化权重
阻带优化权重,指定为以逗号分隔的,由 'StopbandWeight'
和一个正标量(默认为 1)组成的一对参数。
'StopbandWeight1'
是带通 FIR 滤波器的较低频的阻带优化权重。
'StopbandWeight2'
是带通 FIR 滤波器的较高频的阻带优化权重。
数据类型:double
Weights
- 优化权重
优化权重,指定为以逗号分隔的,由 Weights
和一个正标量(默认为 1),或与 'Amplitudes'
长度相同的向量组成的一对参数。
数据类型:double
'BandWeights1'
,'...'
,'BandWeightsN'
- 多频段权重
多频段权重,指定为以逗号分隔的,由 'BandWeightsi'
和一组正标量(默认为 1)或向量组成的一对参数。'BandWeightsi'
是一个包含多频段设计中第
i
i
i 个频段优化权重的标量或向量,其中
i
i
i 的范围从1 到 NumBands
。如果指定为向量,'BandWeightsi'
的长度必须与 'BandAmplitudesi'
的长度相同。
数据类型:double
采样率
'SampleRate'
- 采样率
采样率,指定为以逗号分隔的,由 'SampleRate'
和一个以赫兹表示的正标量(默认为 2)组成的一对参数。要使用归一化的频率,请将 'SampleRate'
设置为 2,或者将其忽略即可。
输出参数
d
- 数字滤波器
数字滤波器,以 digitalFilter
对象的形式返回。
更多相关
滤波器设计助手(Filter Design Assistant)
如果指定的设计参数集不完整或不一致,designfilt
会打开滤波器设计助手功能。
(在参数 resp
的描述中,包含所有可用响应类型的有效规范集的完整列表。)
如果您在命令行或脚本或函数中调用 designfilt
,则助手的行为会有所不同。
在命令行使用滤波器设计助手
给定一个采样率为 2 kHz 的信号。需要设计一个低通 FIR 滤波器,该滤波器可以抑制高于 650 Hz 的频率分量。由此,规范的参数应为“截止频率”。在 MATLAB 命令行中,键入以下内容。
Fsamp = 2e3;
Fctff = 650;
dee = designfilt('lowpassfir','CutoffFrequency',Fctff, ...
'SampleRate',Fsamp);
输入有误,因为此对话框出现在屏幕上。
单击是,并打开一个生成代码的新对话框。您会看到之前定义的变量已被写入到相应的位置。
浏览了提供的某些选项之后,您决定测试更正的过滤器。单击“OK”,并在命令行上获取以下代码。
dee = designfilt('lowpassfir', 'FilterOrder', 10, ...
'CutoffFrequency', Fctff, 'SampleRate', Fsamp);
输入过滤器的名称可重复对话框中的信息。
dee
dee =
digitalFilter with properties:
Coefficients: [-0.0036 0.0127 -0.0066 -0.0881 0.2595 0.6521 0.2595 -0.0881 -0.0066 0.0127 -0.0036]
Specifications:
FrequencyResponse: 'lowpass'
ImpulseResponse: 'fir'
SampleRate: 2000
FilterOrder: 10
CutoffFrequency: 650
DesignMethod: 'window'
使用 fvtool 可视化滤波器
使用 designfilt 编辑滤波器
使用 filter 对数据进行滤波
调用 FVTool 并获得 dee
的频率响应图。
截止部分看起来并不特别陡峭。 对于大多数频率,响应高于 40 dB。如前述,助手可以选择设置名为“阻带衰减”的“幅度限制”。 通过调用以滤波器名称作为输入的 designfilt
打开助手。
designfilt(dee)
单击“幅度约束”下拉菜单,然后选择“通带纹波和阻带衰减”。您会看到设计方法已从“窗”更改为“FIR 约束的最小二乘法”。衰减的默认值为 60 dB(高于 40)。单击“OK”并使显示的滤波器可见。
dee = designfilt('lowpassfir', 'FilterOrder', 10, ...
'CutoffFrequency', Fctff, ...
'PassbandRipple', 1, 'StopbandAttenuation', 60, ...
'SampleRate', Fsamp);
fvtool(dee)
截止部分看起来仍然不陡峭。衰减确实为 60 dB,除了频率超过 900 Hz。
再次调用 designfilt
,并将过滤器作为输入。
designfilt(dee)
助手重新出现。
为了缩小接受频率和拒绝频率之间的差,增加滤波器的阶数或将频率约束从“截止(6dB)频率”更改为“通带和阻带频率”。如果将过滤器阶数从 10 更改为 50,则可获得更陡峭的过滤器。
稍作实验后,您可以通过将通带和阻带频率分别设置为 600 Hz 和 700 Hz 来获得类似的滤波器。
在脚本或函数中使用滤波器设计助手
给定一个采样率为 2 kHz的信号。您需要设计一个高通滤波器,以阻止低于 700 Hz 的频率。您无需关心信号的相位,但需要使用低阶滤波器。因此,IIR 滤波器似乎已足够。 您不确定哪种过滤器阶数最好,因此您编写了一个使用阶数作为输入的函数。打开 MATLAB 编辑器并创建文件。
function dataOut = hipassfilt(N,dataIn)
hpFilter = designfilt('highpassiir','FilterOrder',N);
dataOut = filter(hpFilter,dataIn);
end
要测试您的函数,创建一个由两个频率为 500 和 800 Hz 的正弦波组成的信号,并生成 0.1 s 的样本。最初的猜测似乎是 5 阶滤波器。创建一个名为 driveHPfilt.m
的脚本。
% script driveHPfilt.m
Fsamp = 2e3;
Fsm = 500;
Fbg = 800;
t = 0:1/Fsamp:0.1;
sgin = sin(2*pi*Fsm*t)+sin(2*pi*Fbg*t);
Order = 5;
sgout = hipassfilt(Order,sgin);
在命令行上运行脚本时,会出现错误消息。
错误消息使您可以选择打开助手来更正 MATLAB 代码。 单击“Click here”以在屏幕上显示滤波器设计助手。
您看到问题:您未指定频率约束。 您还忘记了设置采样率。经过实验后,您发现可以将“频率单位”指定为 Hz,“通带频率”等于 700 Hz,“输入采样率”等于 2000 Hz。设计方法从 “Butterworth” 更改为 “Chebyshev I 型”。单击“OK”并获得以下信息。
当您调用 designfilt
时,助手已正确识别文件。 单击“是”接受更改。该函数具有更正后的 MATLAB 代码。
function dataOut = hipassfilt(N,dataIn)
% hpFilter = designfilt('highpassiir','FilterOrder',N);
hpFilter = designfilt('highpassiir', 'FilterOrder', N, ...
'PassbandFrequency', 700, 'PassbandRipple', 1, ...
'SampleRate', 2000);
dataOut = filter(hpFilter,dataIn);
end
现在,您可以使用不同的滤波器阶数值运行脚本。根据您的设计约束,您可以更改规范集。
滤波器助手首选项设置
您可以将 designfilt
设置为从不提供滤波器设计助手。此操作设置了可以使用 setpref
取消设置的 MATLAB 首选项:
-
每次均可使用
setpref('dontshowmeagain','filterDesignAssistant',false)
唤醒助手。 使用此命令,可以在禁用助手后再次启用它。 -
使用
setpref('dontshowmeagain','filterDesignAssistant',true)
永久禁用该助手。您也可以在初始对话框中单击“不再显示此消息”。
您可以将 designfilt
设置为始终纠正错误的规范而无需询问。 此操作设置了可以通过使用 setpref
取消设置的 MATLAB 首选项:
-
使用
setpref('dontshowmeagain','filterDesignAssistantCodeCorrection',false)
可以使designfilt
更正您的 MATLAB 代码而无需确认。您也可以在确认对话框中单击”始终接受”。 -
使用
setpref('dontshowmeagain','filterDesignAssistantCodeCorrection',true)
可以确保仅当您确认要进行更改时,designfilt
才能更正 MATLAB 代码。使用此命令,可以撤消在确认对话框中单击“始终接受”带来的影响。
排除错误(Troubleshooting)
在某些情况下,给定一组无效的规范,designfilt
不通过对话框或错误消息中的链接提供滤波器设计助手。
-
如果使用代码段评估(通过 MATLAB Toolstrip 或按 Ctrl + Enter),则不会为您提供助手。 (有关更多信息,请参见将文件分为代码片(MATLAB)。)
-
如果您的代码有多个对
designfilt
的调用,但其中至少有一个是不正确的,并且出现以下两种情况时,不会为您提供助手。- 您将代码粘贴在命令行上,然后按 Enter 键执行代码。
- 您在编辑器中选择代码,然后按 F9 执行它。
-
如果使用匿名函数运行
designfilt
,则不会为您提供助手。(有关更多信息,请参见匿名函数(MATLAB)。)例如,此输入提供了助手。d = designfilt('lowpassfir','CutoffFrequency',0.6)
此输入没有提供助手。
myFilterDesigner = @designfilt; d = myFilterDesigner('lowpassfir','CutoffFrequency',0.6)
-
如果使用
eval
运行designfilt
,则不会为您提供助手。 例如,此输入提供了一个助手。d = designfilt('lowpassfir','CutoffFrequency',0.6)
此输入没有提供助手。
myFilterDesigner = ... sprintf('designfilt(''%s'',''CutoffFrequency'',%f)', ... 'lowpassfir',0.6); d = eval(myFilterDesigner)
滤波器设计助手需要Java® 软件和 MATLAB 桌面才能运行。如果使用 -nojvm
,-nodisplay
或 -nodesktop
选项运行 MATLAB,则不支持此功能。
另请参阅
FVTool | digitalFilter
| double
| fftfilt
| filt2block
| filter
| filtfilt
| filtord
| firtype
| freqz
| grpdelay
| impz
| impzlength
| info
| isallpass
| isdouble
| isfir
| islinphase
| ismaxphase
| isminphase
| issingle
| isstable
| phasedelay
| phasez
| single
| ss
| stepz
| tf
| zerophase
| zpk
| zplane
主题
在 R2014a 中推出
原文参考:https://ww2.mathworks.cn/help/signal/ref/designfilt.html
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)