前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Matlab滤波器设计:滤波器设计规格对象函数fdesign的使用方法

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

作者头像
用户1143655
发布于 2022-12-12 08:19:53
发布于 2022-12-12 08:19:53
3.6K00
代码可运行
举报
文章被收录于专栏:全栈之殇全栈之殇
运行总次数:0
代码可运行

一、滤波器设计规格对象函数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代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% 查看可用的滤波器设计方法
designmethods(filtSpecs, 'SystemObject', true)

该代码的执行结果如下图所示:

下面,使用design函数设计两个满足规格的低通滤波器:

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lpFIR = design(filtSpecs, 'equiripple', 'SystemObject', true)

代码输出如下图所示:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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低通滤波器滤波器的频率响应特性测量代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FIRmeas = measure(lpFIR)

等波纹FIR低通滤波器滤波器的频率响应特性测量结果如下图所示:

椭圆IIR低通滤波器的频率响应特性测量代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IIRmeas = measure(lpIIR)

椭圆IIR低通滤波器的频率响应特性测量结果如下图所示:

(2)滤波器计算成本评估

等波纹FIR低通滤波器滤波器的计算成本评估代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FIRcost = cost(lpFIR)

等波纹FIR低通滤波器滤波器的计算成本评估结果如下图所示:

椭圆IIR低通滤波器的计算成本评估代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IIRcost = cost(lpIIR)

椭圆IIR低通滤波器的计算成本评估结果如下图所示:

(3)滤波器频率响应可视化

下面使用fvtool对等波纹FIR低通滤波器滤波器与椭圆IIR低通滤波器进行可视化处理,代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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函数设计滤波器,代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
% 使用默认规格参数的滤波器规格对象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必须是偶数。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Matlab滤波器设计:FIR滤波器与IIR滤波器设计实现示例
本文使用Matlab中的Signal Processing Toolbox中的designfilt函数,并根据频率响应实现如下两种滤波器:
用户1143655
2022/12/12
6.6K0
Matlab滤波器设计:FIR滤波器与IIR滤波器设计实现示例
Matlab数字滤波器设计实践—FIR
在理想情况下,低通滤波器使信号中低于指定截止频率 ωc 的所有频率分量保持不变,并拒绝高于 ωc 的所有分量。由于实现理想低通滤波器所需的脉冲响应是无限长的,因此无法设计出理想的 FIR 低通滤波器。理想脉冲响应的有限长度逼近会导致滤波器的通带 (ω<ωc) 和阻带 (ω>ωc) 中都出现波纹,并导致通带和阻带之间的过渡带宽度非零。 当用有限脉冲响应逼近时,通带/阻带波纹和过渡带宽度都是不希望出现的,且不可避免地与理想低通滤波器存在偏差。下图说明了这些偏差:
FPGA开源工作室
2021/08/26
2K0
【DSP教程】第43章 IIR滤波器的Matlab设计
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第43章 IIR滤波器的Matlab设计 本章节讲解II
Simon223
2021/08/18
2.3K0
【DSP教程】第43章       IIR滤波器的Matlab设计
FIR数字滤波器设计(下)
今天给大侠带来FIR数字滤波器设计,由于篇幅较长,分三篇。今天带来第三篇,FIR数字滤波器设计,包括窗函数法设计FIR滤波器、频率采样法设计FIR滤波器以及基于firls函数和remez函数的最优化方法设计FIR滤波器。话不多说,上货。
FPGA技术江湖
2021/04/21
2.6K0
FIR数字滤波器设计(下)
基于Matlab的FIR滤波器设计与实现
前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见“基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成”,这里通过几个例子说明采用Matlab语言设计FIR滤波器的过程。
AIHGF
2019/02/18
2.3K0
Matlab滤波器设计:滤波器设计工具的使用方法
本文展示了如何使用Matlab自带的滤波器设计工具filterDesigner进行滤波器设计,使得我们从命令行滤波器设计函数中脱离出来,从而开展模型化的FIR或IIR滤波器设计工作,其具有的主要功能如下所示:
用户1143655
2022/12/12
9K0
Matlab滤波器设计:滤波器设计工具的使用方法
基于MATLAB的数字信号处理(5) FIR数字滤波器设计及软件实现
MATLAB函数 fir1 和 fftfilt 的功能及其调用格式可以用 help 命令查阅;
叶庭云
2021/12/01
9.6K0
基于MATLAB的数字信号处理(5)    FIR数字滤波器设计及软件实现
matlab与FPGA数字滤波器设计(1)——通过matlab的fdatool工具箱设计FIR数字滤波器
以99阶FIR低通滤波器为例,学习使用matlab的fdatool工具箱设计滤波器,并将滤波器系数导出到.coe文件,联合Vivado进行FPGA的FIR滤波器设计。
FPGA探索者
2021/03/15
4.3K1
基于MATLAB的数字信号处理(4) IIR数字滤波器设计及软件实现
设计IIR数字滤波器一般采用间接法(脉冲响应不变法和双线性变换法),应用最广泛的是双线性变换法。
叶庭云
2021/12/01
9.3K0
基于MATLAB的数字信号处理(4)    IIR数字滤波器设计及软件实现
滤波器基础-滤波器的种类与特性
  滤波器是什么?     滤波器是对波进行过滤的器件,一般有两个端口,一个输入信号、一个输出信号。可以说它是重要的电子元器件,滤波器把电源功率传输到设备上,大大衰减经电源传入的EMI电磁干扰信号,保
利又德智能感知
2023/04/11
1.4K0
滤波器基础-滤波器的种类与特性
matlab实现不同窗滤波器示例
在Matlab中使用汉明窗设计低通滤波器可以通过fir1函数实现。汉明窗通常用于设计滤波器,可以提供更突出的频率特性。
FPGA开源工作室
2024/03/02
4830
matlab实现不同窗滤波器示例
基于MATLAB语音信号的处理与滤波
摘要:MATLAB是十分强大的用于数据分析和处理的工程实用软件,利用其来进行语音信号的分析、处理和可视化十分便捷。文中介绍了在MATLAB环境中如何驱动声卡采集语音信号和语音信号采集后的文档处理方法,并介绍了FFT频谱分析原理及其显示、MATLAB中相关函数的功能、滤波器的设计和使用。在此基础上,对实际采集的一段含噪声语音信号进行了相关分析处理,包括对语音信号的录取和导入,信号时域和频域方面的分析,添加噪声前后的差异对比,滤波分析,语音特效处理。结果表明利用MATLAB处理语音信号十分简单、方便且易于实现。
全栈程序员站长
2022/09/01
4.4K0
基于MATLAB语音信号的处理与滤波
matlab设计模拟带通滤波器
简单记录下在matlab上如何设计出模拟的带通滤波器,包括:巴特沃斯滤波器、切比雪夫I型滤波器、切比雪夫II型滤波器、椭圆型滤波器。 代码如下:
全栈程序员站长
2022/08/19
1.3K0
matlab设计模拟带通滤波器
【DSP教程】第36章 FIR滤波器的Matlab设计(含低通,高通,带通和带阻)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第36章 FIR滤波器的Matlab设计(含低通,高通,
Simon223
2021/07/19
4.2K0
【DSP教程】第36章       FIR滤波器的Matlab设计(含低通,高通,带通和带阻)
IIR数字滤波器设计(数字信号处理)
2.掌握IIR数字滤波器的MATLAB实现方法,会调用ellipord()和ellip() 
Fivecc
2022/11/21
1.8K0
IIR数字滤波器设计(数字信号处理)
信号与系统领域的英语单词
这是去年暑假帮老师给下一届学弟学妹们整理的一份英文单词表,因为在上数字信号处理这门课时,我们所有的讲义和教材都是英文的,老师希望整理出来给学生们记忆。而我 9 月份又要重新上一遍这门必修课,整理出来也便于自己记忆。
caoqi95
2019/03/27
1.9K0
信号与系统领域的英语单词
基于ADS500MHZ带通滤波器「建议收藏」
设计一个11阶的切比雪夫带通滤波器,利用ADS仿真优化并制作所需空心电感,调试符合如下指标的带通滤波器:
全栈程序员站长
2022/08/25
3K0
基于ADS500MHZ带通滤波器「建议收藏」
MATLAB窗函数法设计FIR 数字滤波器
一、实验目的 1. 熟悉线性相位 FIR 数字滤波器特性。 2. 了解各种窗函数对滤波特性的影响。 3. 掌握用窗函数法设计 FIR 数字滤波器的原理、方法及计算机编程。
timerring
2022/07/20
2.3K0
MATLAB窗函数法设计FIR 数字滤波器
毕设:基于FPGA的FIR数字滤波器设计
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。
FPGA技术江湖
2020/12/30
2.5K0
1.巴特沃斯模拟滤波器(低通,高通,带通,带阻)设计-MATLAB实现
本文是模拟滤波器设计,如果需要了解数字滤波器的内容,可以按顺序看我写的另外两篇博客,如下:
全栈程序员站长
2022/08/29
9.2K0
1.巴特沃斯模拟滤波器(低通,高通,带通,带阻)设计-MATLAB实现
推荐阅读
相关推荐
Matlab滤波器设计:FIR滤波器与IIR滤波器设计实现示例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验