电子说
本文展示了如何使用Matlab中滤波器设计规格对象函数fdesign
的使用方法。根据fdesign
创建的滤波器规格对象,可以使用design
函数直接设计滤波器。
滤波器的设计、分析以及在数据流上的应用的示意图如下所示:
具体的步骤如下所示:
fdesign.response
规格对象用以表述滤波器设计参数;designmethods
确定针对滤波器规格队形的滤波器设计方法;designoptions
函数的使用方法,进行具体的滤波器参数设置。design
方法从滤波器规格对象设计一个滤波器,并以步骤二中的设计方法作为输入。如果需要修改设计选项值,需要指定名称-值
对的方式向design
函数中传递参数;另外,如果在调用design
函数时,没有指定任何输出参数,则将默认启动滤波器可视化工具FVTool
,并现实设计滤波器的幅值响应。fdesign
函数的使用语法主要包括如下四种方式:
designSpecs = fdesign.response
:返回一个具有特定响应(response
)的滤波器设计规格对象(design specification object)。designSpecs = fdesign.response(spec)
:指定用于定义滤波器设计的变量spec
。designSpecs = fdesign.response(___, Fs)
:指定设计滤波器的采样频率()。注意:Fs
参数必须作为最后一个参数。designSpecs = fdesign.response(___, magunits)
:指定输入参数的幅值单位。示例: 设计一个采样频率为的低通滤波器,低通滤波器的参数规格如下所示:
低通滤波器的阶数可以根据参数规格自动的配置。
首先,使用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低通滤波器')
两个滤波器的可视化结果如下图所示:
全部0条评论
快来发表一下你的评论吧 !