!! ✨ Matlab版本为R2022b,与以前的版本兼容。本文摘录汇总于:Filter design specification object - MATLAB fdesign - MathWorks 中国。
本文展示了如何使用Matlab中滤波器设计规格对象函数fdesign
的使用方法。根据fdesign
创建的滤波器规格对象,可以使用design
函数直接设计滤波器。
滤波器的设计、分析以及在数据流上的应用的示意图如下所示:
具体的步骤如下所示:
fdesign.response
规格对象用以表述滤波器设计参数;designmethods
确定针对滤波器规格队形的滤波器设计方法;designoptions
函数的使用方法,进行具体的滤波器参数设置。design
方法从滤波器规格对象设计一个滤波器,并以步骤二中的设计方法作为输入。如果需要修改设计选项值,需要指定名称-值
对的方式向design
函数中传递参数;另外,如果在调用design
函数时,没有指定任何输出参数,则将默认启动滤波器可视化工具FVTool
,并现实设计滤波器的幅值响应。低通滤波器的阶数可以根据参数规格自动的配置。
首先,使用fdesign.lowpass
函数设置低通滤波器规格对象,Matlab代码如下所示:
Fs = 96e3; % 采样频率
Fpass = 20e3; % 通带频率
Fstop = 24e3; % 阻带频率
Apass = 0.01; % 通带波纹
Astop = 80; % 阻带衰减
% 使用fdesign.lowpass函数得到滤波器规格对象filtSpecs
filtSpecs = fdesign.lowpass( ...
Fpass, ... % 通带频率
Fstop, ... % 阻带频率
Apass, ... % 通带波纹
Astop, ... % 阻带衰减
Fs); % 采样频率
然后,使用designmethods
函数可以输出针对滤波器规格对象filtSpecs
可用的滤波器设计方法,Matlab代码如下所示:
% 查看可用的滤波器设计方法
designmethods(filtSpecs, 'SystemObject', true)
该代码的执行结果如下图所示:
下面,使用design
函数设计两个满足规格的低通滤波器:
!! ✨ 注意:
design
函数的返回值是一个dsp.FIRdecimator
系统对象,Matlab代码如下所示:
等波纹FIR低通滤波器滤波器的实现代码如下所示:
lpFIR = design(filtSpecs, 'equiripple', 'SystemObject', true)
代码输出如下图所示:
椭圆IIR低通滤波器的实现代码如下所示:
lpIIR = design(filtSpecs, 'ellip', 'SystemObject', true)
代码输出结果如下图所示:
最后,我们可以使用如下函数对设计的滤波器进行分析与可视化:
measure
函数:测量滤波器系统对象的频率响应特性,对于低通滤波器,该函数测量的滤波器指标如下表所示:频率响应特性 | 描述 |
---|---|
Sample Rate | 滤波器采样频率 |
Passband Edge | 通带进入过渡时的边缘位置 |
3-dB Point | 响应曲线上-3dB点的位置 |
6-dB Point | 响应曲线上-6dB点的位置 |
Stopband Edge | 过渡带进入阻带时的边缘位置 |
Passband Ripple | 通带波纹 |
Stopband Atten | 阻带衰减 |
Transition Width | 通带与阻带之间的过渡宽度 |
cost
函数:评估滤波器系统对象的实现计算成本,并返回一个包含计算成本评估值的结构体,返回值包含的内容如下表所示:计算成本评估值 | 描述 |
---|---|
NumCoefficients | 滤波器系数的数量,不包含、、 |
NumStates | 滤波器状态的数量 |
MultiplicationsPerInputSample | 每个输入样本执行乘法运算的数量 |
AdditionsPerInputSample | 每个输入样本执行加法运算的数量 |
fvtool
:对滤波器进行可视化并直观地比较不同滤波器的性能。(1)滤波器频率响应特性测量
等波纹FIR低通滤波器滤波器的频率响应特性测量代码如下所示:
FIRmeas = measure(lpFIR)
等波纹FIR低通滤波器滤波器的频率响应特性测量结果如下图所示:
椭圆IIR低通滤波器的频率响应特性测量代码如下所示:
IIRmeas = measure(lpIIR)
椭圆IIR低通滤波器的频率响应特性测量结果如下图所示:
(2)滤波器计算成本评估
等波纹FIR低通滤波器滤波器的计算成本评估代码如下所示:
FIRcost = cost(lpFIR)
等波纹FIR低通滤波器滤波器的计算成本评估结果如下图所示:
椭圆IIR低通滤波器的计算成本评估代码如下所示:
IIRcost = cost(lpIIR)
椭圆IIR低通滤波器的计算成本评估结果如下图所示:
(3)滤波器频率响应可视化
下面使用fvtool
对等波纹FIR低通滤波器滤波器与椭圆IIR低通滤波器进行可视化处理,代码如下所示:
hvft = fvtool(lpFIR, lpIIR, 'Fs', Fs);
legend(hvft, '等波纹FIR低通滤波器', '椭圆IIR低通滤波器')
两个滤波器的可视化结果如下图所示:
fdesign
函数的输入参数主要包括如下四方面内容:
response
:期望的滤波器响应方法,比如低通、高通、带通滤波器等;spec
:滤波器规格参数,比如通带频率、阻带频率、通带波纹以及阻带衰减等;Fs
:采样频率;magunits
:滤波器幅值参数的单位。(1)响应方法response
除了第二部分的低通滤波器对象fdesign.lowpass
,fdesign
的response
还具有很多如下表所示的其他滤波器对象。每一个response
具有一个Sepcification
属性,通过它我们可以定义特定的滤波器对象。
fdesign响应方法 | 描述 |
---|---|
arbgrpdelay | fdesign.arbgrpdelay用于构造一个全通任意组延迟滤波器对象 |
arbmag | fdesign.arbmag用于构造一个具有任意幅值响应的IIR滤波器对象 |
arbmagnphase | fdesign.arbmagnphase用于构造一个具有任意幅值、相位脉冲响应的IIR滤波器对象 |
bandpass | fdesign.bandpass构造一个带通滤波器对象 |
bandstop | fdesign.bandstop构造一个带阻滤波器对象 |
ciccomp | fdesign.ciccomp构造一个补偿CIC抽样器或内插器响应曲线的滤波器对象 |
comb | fdesign.comb构造一个带有陷波或峰值梳妆滤波器对象 |
decimator | fdesign.decimator构造一个抽样滤波器对象 |
differentiator | fdesign.differentiator构造一个FIR差分滤波器对象 |
fracdelay | fdesign.fracdelay构造一个分数延迟滤波器对象 |
halfband | fdesign.halfband构造一个半滤波器对象 |
highpass | fdesign.highpass构造一个高通滤波器对象 |
hilbert | fdesign.hilbert构造一个FIR希尔伯特变换器对象 |
interpolator | fdesign.interpolator构造一个插值器对象 |
isinchp | fdesign.isinchp构造一个反向sinc高通滤波器对象 |
isinclp | fdesign.isinclp构造一个反向sinc低通滤波器对象 |
lowpass | fdesign.lowpass构造一个低通滤波器对象 |
notch | fdesign.notch构造一个陷波滤波器对象 |
nyquist | fdesign.nyquist构造一个Nyquist滤波器对象 |
peak | fdesign.peak构造一个峰值滤波器对象 |
polysrc | fdesign.polysrc构造一个多项式采样率转换器滤波器对象 |
rsrc | fdesign.rsrc构造一个有理因子采样率转换器对象 |
(2)滤波器设计规格spec
spec
是fdesign
的滤波器设计规格参数,它是一个字符串向量。以第二部分设计的低通滤波器fdesign.lowpass
为例,其规格表达式为'Fp, Fst, Ap, Ast'
,其具体含义如下所示:
Fp
:通带频率(passband frequency);Fst
:阻带频率(stopband frequency);Ap
:通带波纹(passband ripple);Ast
:阻带衰减(stopband attenuation)。如果不设置上面的四个参数,则使用默认的参数值。基于上面的滤波器规格参数spec
,可以使用design
函数设计滤波器,代码如下所示:
% 使用默认规格参数的滤波器规格对象d
d = fdesign.lowpass % 滤波器规格包括`Fp, Fst
, Ap, Ast`
% 使用design函数设计滤波器
FIReq = design(d, 'equiripple', 'SystemObject', true);
length(FIReq.Numerator)
滤波器规格对象d
的规格参数如下图所示:
(3)采样频率F
(4)滤波器幅值参数的单位magunits
滤波器幅值参数的单位magunits
可用的单位包括如下三种:
dB
:分贝(decibels);linear
:线性单位;squared
:power单位。当没有设置magunits
参数时,fdesign
则假设所有幅度都以dB
为单位。
fdesign
返回一个滤波器设计规格对象designSpecs
,每一个滤波器设计规格对象都包含如下表所示的内容:
除了上面的属性之外,根据滤波器设计规范对象是单速率滤波器还是多速率滤波器,还包括如下额外属性:
多速率滤波器额外属性 | 描述 |
---|---|
DecimationFactor | 用于指定减少采样率的量(正整数) |
InterpolationFactor | 用于指定增加采样率的量(正整数) |
PolyphaseLength | 多相长度是组成抽取器或内插器或速率变化因子滤波器的每个多相子滤波器的长度。总过滤器长度是pl和速率变化因子的乘积。pl必须是偶数。 |