当前位置: 首页 > news >正文

matlab设计滤波器详解

目录

1.filterDesigner 界面介绍

 1.1 工具栏介绍

1.2 参数设置介绍

2.设计流程

3.实例

4.参考资料


         本文主要记录利用MATLAB的filterDesigner工具设计滤波器的完整步骤,以便后续复用。

1.filterDesigner 界面介绍

 1.1 工具栏介绍

        滤波器设定面板,如图1所示。

图1  滤波器设定面板
图1  滤波器设定面板

        图中可以观察到Fpass(通带截止频率)、Fstop(阻带截止频率)、Apass(通带幅值)、Astop(阻带幅值)、Fs/2(采样频率的一半)的作用。

        幅频响应图像如图2所示。

图2 幅值响应图像
图2 幅值响应曲线

       幅频响应曲线能够清晰呈现滤波器的频率特性,便于快速评估其设计合理性和指标符合度。

        相频响应图像如图3所示。

图3  相频特性曲线
图3  相频特性曲线

        相频响应曲线可以用来判断滤波器是否满足期望的相位特性。

1.2 参数设置介绍

图4 滤波器参数设置图
图4 滤波器参数设置图

1:滤波器的结构说明,其中包含滤波器的结构,阶数。
        阶数:滤波器的阶数等于其传递函数分母的最高次方。阶数越高,滤波器的响应越精细,但计算复杂度也增加。通常,阶数越低,滤波器的实现越简单,但可能无法达到理想的频率响应。

2:滤波器的功能类型,决定其作用的频率范围。除了常见的低通、高通、带通、带阻之外,还有线波滤波器:一种专门设计用于处理线性波形(如信号的方波或脉冲波形)的滤波器,通常用于信号的高精度平滑和特定噪声抑制。它的设计目标是消除特定频率的干扰信号,以保持信号的形状和质量。

3:滤波器的结构类型:FIR(有限冲激响应)和IIR(无限冲激响应)。
        FIR滤波器:其输出仅依赖于当前及过去的输入值(无反馈)。单位冲激响应有限,意味着其响应最终会消失。FIR滤波器通常具有线性相位特性,且始终稳定。适用于需要高精度相位控制的场合,但在某些应用中可能需要较高阶数才能达到理想性能。
        IIR滤波器:其输出不仅依赖于当前和过去的输入值,还依赖于过去的输出值(有反馈)。IIR滤波器具有无限长的冲激响应,理论上无法完全消失。它们通常具有较低的阶数,但在某些情况下,可能会出现不稳定性。适用于对计算效率有较高要求的场合,但在设计时需要注意稳定性。

4:滤波器的阶数设置
        指定阶数:手动设置滤波器的阶数,直接控制滤波器的复杂度和精度。
        最小阶数:滤波器的最小阶数是根据给定的通带截止频率(Fpass)和阻带截止频率(Fstop)以及幅值要求(Apass和Astop)自动计算得到的。

5: 选项
        完全匹配通带:使通带内的频率响应尽量接近理想值,也就是通过信号的频率范围内,保持信号幅度基本不变。
        完全匹配阻带:使阻带内的频率响应尽量接近零,以最大限度地抑制不需要的信号。

6: 频率设定,设定多个频率参数:
        Fs(采样频率):滤波器的采样频率,通常用来确定数字信号的处理速率。
        Fpass(通带截止频率):通带的截止频率,表示信号开始衰减的频率。在实际应用中,通常设定为Apass幅度下的截止频率。
        Fstop(阻带截止频率):阻带的截止频率,表示滤波器开始完全抑制信号的频率,对应幅值是Astop。

7:幅值的设定,单位是dB,Apass表示通带截止频率的幅值,Astop表示阻带截止频率的幅值;

       以上就是常用的图像界面和参数设置介绍,接下来介绍一下如何使用。

2.设计流程

        用matlab设计滤波器流程如图5所示。

图5 matlab设计滤波器流程图
图5 matlab设计滤波器流程图

        根据需求选择对应功能的滤波器,然后根据设备的算力、是否需要保持线性相位等需求选择FIR还是IIR类型的滤波器,设计完之后将参数保存,等使用的时候拿出来用即可。

3.实例

        以低通滤波器为例,采样频率设为100Hz。原始信号由10Hz和40Hz的混合波形组成。滤波器参数设置为:通带截止频率12Hz,阻带截止频率30Hz。
        通带截止频率和阻带截止频率一般甲方会有要求,通用的设置规则:

  • 通带截止频率一般选择在目标信号的频段内,确保所需信号能够通过滤波器而不被削弱。
  • 阻带截止频率必须小于或等于奈奎斯特频率(采样频率的一半)。
  • 确保通带和阻带之间有足够的间隔,以便滤波器能够提供良好的过渡和性能。
  • 要结合硬件的资源来考虑

        滤波器的设置如图6所示。

图6  低通滤波器设置
图6  低通滤波器设置

      存储滤波器参数:

       (1)选择存储滤波器

        (2)给滤波器命名并点击确定,此时只是将刚刚设置的滤波器保存在filterDesigner中;

        (3)导出滤波器参数;

        (4)一般会选择导出为mat文件,然后再导入工作区中,这样方便下次还可以使用这个滤波器,需要注意的是,加载之后调用的变量名必须与保存时一致;

       (5)代码使用:

%% 低通滤波器%% 初始设置
% 清空工作空间,关闭无关页面
clc,clear,close all;% 绘图变量
font_size = 12; axis_size = 10; line_width = 2; legend_size = 10.5; marker_size = 12;
figure_width = 14; figure_height = 8; BiaValue = 0;%% //原信号 
%  //y = 3*sin(2*pi*10*t) + sin(2*pi*40*t);t = 0:0.01:1; %1khz的采样率
y = 3*sin(2*pi*10*t) + sin(2*pi*40*t) ;figure
set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);
set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','KaiTi','FontSize',font_size);
plot(t, y, 'b-', 'LineWidth', line_width)
set(gca,'FontSize',font_size,'FontName','KaiTi')
xlim([0 1])
ylim([-6 6])
set(gca,'XTick',0:0.25:1)
set(gca,'YTick',-6:3:6)
xlabel('时间 (s)', 'FontSize', font_size, 'FontName', 'KaiTi')
ylabel('信号幅值', 'FontSize', font_size, 'FontName', 'KaiTi')
title('原信号采样后的波形', 'FontSize', font_size*1.5, 'FontName', 'KaiTi')%% //采样信号频域分析
% 数据长度
datalength = length(y);
% 对数据进行FFT
yFFT = fft(y, datalength);
mag = abs(yFFT);
% 幅值归一化
mag = mag*2/datalength;
pha = angle(yFFT)*180/pi;
% 对无效相位进行置0
for i = 1:datalengthif (mag(1,i)<0.3)pha(1,i) = 0;end
end
% 序列坐标
n = 0:datalength-1;
% 采样频率
fs = 1/0.01;
% 序列频率
f = (0:datalength-1)*fs/datalength;figure
set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);
set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','KaiTi','FontSize',font_size);
stem(f(1:datalength/2), mag(1:datalength/2), 'b-', 'LineWidth', line_width)
set(gca,'FontSize',font_size,'FontName','KaiTi')
xlim([0 50])
ylim([0 4])
set(gca,'XTick',0:10:50)
set(gca,'YTick',0:1:4)
xlabel('频率 (Hz)', 'FontSize', font_size, 'FontName', 'KaiTi')
ylabel('幅值', 'FontSize', font_size, 'FontName', 'KaiTi')
title('采样信号的幅度谱', 'FontSize', font_size*1.5, 'FontName', 'KaiTi')figure
set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);
set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','KaiTi','FontSize',font_size);
stem(f(1:datalength/2), pha(1:datalength/2), 'b-', 'LineWidth', line_width)
set(gca,'FontSize',font_size,'FontName','KaiTi')
xlim([0 50])
ylim([-100 200])
set(gca,'XTick',0:10:50)
set(gca,'YTick',-100:100:200)
xlabel('频率 (Hz)', 'FontSize', font_size, 'FontName', 'KaiTi')
ylabel('相位 (deg)', 'FontSize', font_size, 'FontName', 'KaiTi')
title('采样信号的相位谱', 'FontSize', font_size*1.5, 'FontName', 'KaiTi')%% //滤波器低通滤波
% filtercoe = [0.0282,  0.0188,  -0.0095, -0.0477, -0.0527, 0.0122,... 
%              0.1386,  0.2661,  0.3197,  0.2661,  0.1386,  0.0122,... 
%              -0.0527, -0.0477, -0.0095, 0.0188,  0.0282];
load('low_filtercoe.mat'); 
filtercoe = Num ;
y_Filter = filter(filtercoe, 1, y);% 绘制滤波后的信号
figure
set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);
set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','KaiTi','FontSize',font_size);
plot(t, y_Filter, 'b-', 'LineWidth', line_width)
set(gca,'FontSize',font_size,'FontName','KaiTi')
xlim([0 1])
ylim([-6 6])
set(gca,'XTick',0:0.25:1)
set(gca,'YTick',-6:3:6)
xlabel('时间 (s)', 'FontSize', font_size, 'FontName', 'KaiTi')
ylabel('信号幅值', 'FontSize', font_size, 'FontName', 'KaiTi')
title('滤波后的信号', 'FontSize', font_size*1.5, 'FontName', 'KaiTi')%% //滤波信号频域分析
% 数据长度
datalength = length(y_Filter);
% 对数据进行FFT
yFFT = fft(y_Filter, datalength);
mag = abs(yFFT);
% 幅值归一化
mag = mag*2/datalength;
pha = angle(yFFT)*180/pi;
% 对无效相位进行置0
for i = 1:datalengthif (mag(1,i)<0.3)pha(1,i) = 0;end
end
% 序列坐标
n = 0:datalength-1;
% 采样频率
fs = 1/0.01;
% 序列频率
f = (0:datalength-1)*fs/datalength;figure
set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);
set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','KaiTi','FontSize',font_size);
stem(f(1:datalength/2), mag(1:datalength/2), 'b-', 'LineWidth', line_width)
set(gca,'FontSize',font_size,'FontName','KaiTi')
xlim([0 50])
ylim([0 4])
set(gca,'XTick',0:10:50)
set(gca,'YTick',0:1:4)
xlabel('频率 (Hz)', 'FontSize', font_size, 'FontName', 'KaiTi')
ylabel('幅值', 'FontSize', font_size, 'FontName', 'KaiTi')
title('滤波后信号的幅度谱', 'FontSize', font_size*1.5, 'FontName', 'KaiTi')figure
set(gcf,'Unit','centimeters','Position',[3 3 3+figure_width 3+figure_height]);
set(gca,'LooseInset',get(gca,'TightInset')+[BiaValue,0,0,0],'FontName','KaiTi','FontSize',font_size);
stem(f(1:datalength/2), pha(1:datalength/2), 'b-', 'LineWidth', line_width)
set(gca,'FontSize',font_size,'FontName','KaiTi')
xlim([0 50])
ylim([-100 200])
set(gca,'XTick',0:10:50)
set(gca,'YTick',-100:100:200)
xlabel('频率 (Hz)', 'FontSize', font_size, 'FontName', 'KaiTi')
ylabel('相位 (deg)', 'FontSize', font_size, 'FontName', 'KaiTi')
title('滤波后信号的相位谱', 'FontSize', font_size*1.5, 'FontName', 'KaiTi')

        实验对比结果如下图所示 :

        如图所示,经滤波处理后输出信号仅保留了10Hz成分,有效滤除了40Hz干扰。值得注意的是,滤波后的波形整体发生了偏移,这一现象正是FIR滤波器线性相位特性的典型表现。

4.参考资料

        1.数字信号处理_第1个Matlab编程实例_哔哩哔哩_bilibili

        2.NO.3 深入了解Matlab中的fdatool工具箱_哔哩哔哩_bilibili

        以上就是本次笔记的内容,希望对阅读笔记的朋友有所帮助,如果哪里写的不对,欢迎在评论区交流指正。

http://www.dtcms.com/a/555090.html

相关文章:

  • Web 前端可视化开发工具深度解析,从拖拽搭建到真机调试的全链路思维
  • 国外免费iphone网站南安seo优化推广
  • 关于static误区
  • win7怎么做网站服务器做教师知识网站有哪些
  • js基础:10、函数对象方法(call/apply)、arguments类数组对象、Date对象、Math工具类、包装类、字符串方法、正则表达式
  • seo学院培训班seo外包公司多吗
  • 潜江做网站的嘉兴地区有人做网站吗
  • CATIA/3DE CAA二次开发-工程图两圆内填充AreaFill
  • 百日挑战-单词篇(第九天)
  • 人物摄影网站创建微信公众号步骤
  • 二叉树序列化与反序列化
  • 焦作网站建设费用社交类网站开发需求
  • 杭州外贸网站建设公司申跃网站建设类型有哪些方面
  • 做视频网站 视频放在哪里找延庆营销型网站建设
  • 物联网的核心和基础是什么短视频seo询盘系统
  • XHR 创建对象
  • 个人网站建设软件合肥建站方案
  • 【Docker】P4 Docker 网络:掌握 Docker 自定义网络,玩转应用集群
  • 莞城网站制作如何看一个站点是不是有wordpress
  • 荆门网站建设公司WordPress百度智能小程序
  • 修改网站源码连接数据库怎么做网站关键词优化推荐贵阳方舟网络6
  • 辽宁网站建设墨子网站关闭多久排名会下降
  • BLDC双电机六步换相控制学习文档
  • 排序算法:高效数据处理的核心
  • 网站架构设计师工资水平自助建网站系统源码
  • 网站建设go华为网站建设和阿里云哪个好
  • 宁波规划建设局网站顺企网怎么发布公司信息
  • 校园网站建设系统设计做网站去什么公司
  • 房产网站开发报价山西seo基础教程
  • 网站建设方案预计效果教育网站制作视频