zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Matlab滤波器设计:滤波器设计规格对象函数fdesign的使用方法

2023-02-18 16:23:15 时间

一、滤波器设计规格对象函数fdesign简介

!! ✨ Matlab版本为R2022b,与以前的版本兼容。本文摘录汇总于:Filter design specification object - MATLAB fdesign - MathWorks 中国。

1.1 滤波器设计流程

本文展示了如何使用Matlab中滤波器设计规格对象函数fdesign的使用方法。根据fdesign创建的滤波器规格对象,可以使用design函数直接设计滤波器。

滤波器的设计、分析以及在数据流上的应用的示意图如下所示:

具体的步骤如下所示:

  • 步骤一: 创建一个fdesign.response规格对象用以表述滤波器设计参数;
  • 步骤二: 使用designmethods确定针对滤波器规格队形的滤波器设计方法;
  • 步骤三: 如果想要进一步修改滤波器的参数,可以查看designoptions函数的使用方法,进行具体的滤波器参数设置。
  • 步骤四: 使用design方法从滤波器规格对象设计一个滤波器,并以步骤二中的设计方法作为输入。如果需要修改设计选项值,需要指定名称-值对的方式向design函数中传递参数;另外,如果在调用design函数时,没有指定任何输出参数,则将默认启动滤波器可视化工具FVTool,并现实设计滤波器的幅值响应。
  • 步骤五: 至此,我们就可以进一步查看设计的滤波器分析结果包括:频率响应、损失函数、滤波器响应特征测量值等。具体的可以参考Analysis Methods for Filter System Objects。
  • 步骤六: 经过滤波器分析、设计后,我们就可以将滤波器对象应用于输入数据流。

1.2 滤波器设计规格对象函数fdesign的语法

二、低通滤波器设计与性能分析

低通滤波器的阶数可以根据参数规格自动的配置。

2.1 低通滤波器的设计

首先,使用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函数设计两个满足规格的低通滤波器:

  • 等波纹FIR低通滤波器(equiripple);
  • 椭圆IIR低通滤波器。

!! ✨ 注意: design函数的返回值是一个dsp.FIRdecimator系统对象,Matlab代码如下所示:

等波纹FIR低通滤波器滤波器的实现代码如下所示:

lpFIR = design(filtSpecs, 'equiripple', 'SystemObject', true)

代码输出如下图所示:

椭圆IIR低通滤波器的实现代码如下所示:

lpIIR = design(filtSpecs, 'ellip', 'SystemObject', true)

代码输出结果如下图所示:

2.2 低通滤波器的分析

最后,我们可以使用如下函数对设计的滤波器进行分析与可视化:

  • 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函数的输入与输出参数

3.1 fdesign函数的输入

fdesign函数的输入参数主要包括如下四方面内容:

  • response:期望的滤波器响应方法,比如低通、高通、带通滤波器等;
  • spec:滤波器规格参数,比如通带频率、阻带频率、通带波纹以及阻带衰减等;
  • Fs:采样频率;
  • magunits:滤波器幅值参数的单位。

(1)响应方法response

除了第二部分的低通滤波器对象fdesign.lowpassfdesignresponse还具有很多如下表所示的其他滤波器对象。每一个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

specfdesign的滤波器设计规格参数,它是一个字符串向量。以第二部分设计的低通滤波器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为单位。

3.2 fdesign函数的输出

fdesign返回一个滤波器设计规格对象designSpecs,每一个滤波器设计规格对象都包含如下表所示的内容:

除了上面的属性之外,根据滤波器设计规范对象是单速率滤波器还是多速率滤波器,还包括如下额外属性:

多速率滤波器额外属性

描述

DecimationFactor

用于指定减少采样率的量(正整数)

InterpolationFactor

用于指定增加采样率的量(正整数)

PolyphaseLength

多相长度是组成抽取器或内插器或速率变化因子滤波器的每个多相子滤波器的长度。总过滤器长度是pl和速率变化因子的乘积。pl必须是偶数。