matlab(实例):滤波器(低通、带通、高通,使用butter函数、filter函数)

一、题目:已知一个时域信号,包含三个频率(50Hz、150Hz、300Hz),分别设计并使用低通滤波器、带通滤波器、高通滤波器,对其进行滤波,画出滤波信号的时域图和频谱图。

x = sin(2\pi*50t )+sin(2\pi*150t )+sin(2\pi*300t )

二、解题过程:

①函数介绍:

本次编码使用函数butter函数和filter函数

1、butter()

用于计算滤波器系数

语法:

      [b,a] = butter(n,Wn)
      [b,a] = butter(n,Wn,ftype)

      [z,p,k] = butter(___)
      [A,B,C,D] = butter(___)

      [___] = butter(___,'s')

输入参数
      n - 滤波器阶数
        整数标量
      Wn - 截止频率,注意:Wn = fc_low/(fs/2)
        标量 | 二元素向量
      ftype - 滤波器类型
        'low' | 'bandpass' | 'high' | 'stop'

输出参数
      b,a - 传递函数系数
        行向量
      z,p,k - 零点、极点和增益
        列向量、标量
      A,B,C,D - 状态空间矩阵
        矩阵

2、filter()

使用滤波器对信号进行滤波

语法
      y = filter(b,a,x)
      y = filter(b,a,x,zi)
      y = filter(b,a,x,zi,dim)
      [y,zf] = filter(___)

输入参数
      b - 有理传递函数的分子系数
        向量
      a - 有理传递函数的分母系数
        向量
      x - 输入数据
        向量 | 矩阵 | 多维数组
      zi - 滤波器延迟的初始条件
        [] (默认值) | 向量 | 矩阵 | 多维数组
      dim - 沿其运算的维度
        正整数标量

输出参数
      y - 滤波后的数据
        向量 | 矩阵 | 多维数组
      zf - 滤波器延迟的最终条件
        向量 | 矩阵 | 多维数组

②代码

1、低通滤波器

clc 
clear
close all% 创建一个测试信号
fs = 1000; % 采样频率
t = 0:1/fs:1; % 时间向量
x = sin(2*pi*50*t) + sin(2*pi*150*t) + 0.5*sin(2*pi*300*t); % 包含50Hz、150Hz和300Hz成分的信号fc_low = 100; % 低截止频率
fc_high = 200; % 高截止频率N = 7; % 滤波器阶数[b, a] = butter(N, fc_low/(fs/2), 'low'); % 计算低通滤波器系数
% [b, a] = butter(N, [fc_low/(fs/2), fc_high/(fs/2)], 'bandpass'); % 计算中通滤波器系数
% [b, a] = butter(N, fc_high/(fs/2), 'high'); % 计算中高通滤波器系数% 使用中通滤波器对信号进行滤波
y = filter(b, a, x);% 绘制原始信号和滤波后的信号
figure;
subplot(2,1,1);
plot(t, x);
title('原始信号');
xlabel('t/s');
ylabel('幅值');subplot(2,1,2);
plot(t, y);
title('滤波信号');
xlabel('t/s');
ylabel('幅值');% 傅里叶变换,画频谱图
Ns = 100; % 傅里叶变换采样点数
delta_f = fs/Ns; % 频率分辨率
x_f = (0:Ns-1)*delta_f; % 频域信号横轴
S_f = fft(x(1:Ns));
figure(2)
subplot(2,1,1)
stem(x_f, abs(S_f), 'filled');
title('原信号频谱')
xlabel('f/Hz')
ylabel('幅值')y_f = (0:Ns-1)*delta_f; % 频域信号横轴
Y_f = fft(y(1:Ns));
subplot(2,1,2)
stem(y_f, abs(Y_f), 'filled');
title('滤波信号频谱')
xlabel('f/Hz')
ylabel('幅值')

2、带通滤波器

clc 
clear
close all% 创建一个测试信号
fs = 1000; % 采样频率
t = 0:1/fs:1; % 时间向量
x = sin(2*pi*50*t) + sin(2*pi*150*t) + 0.5*sin(2*pi*300*t); % 包含50Hz、150Hz和300Hz成分的信号fc_low = 100; % 低截止频率
fc_high = 200; % 高截止频率N = 7; % 滤波器阶数% [b, a] = butter(N, fc_low/(fs/2), 'low'); % 计算低通滤波器系数
[b, a] = butter(N, [fc_low/(fs/2), fc_high/(fs/2)], 'bandpass'); % 计算中通滤波器系数
% [b, a] = butter(N, fc_high/(fs/2), 'high'); % 计算中高通滤波器系数% 使用中通滤波器对信号进行滤波
y = filter(b, a, x);% 绘制原始信号和滤波后的信号
figure;
subplot(2,1,1);
plot(t, x);
title('原始信号');
xlabel('t/s');
ylabel('幅值');subplot(2,1,2);
plot(t, y);
title('滤波信号');
xlabel('t/s');
ylabel('幅值');% 傅里叶变换,画频谱图
Ns = 100; % 傅里叶变换采样点数
delta_f = fs/Ns; % 频率分辨率
x_f = (0:Ns-1)*delta_f; % 频域信号横轴
S_f = fft(x(1:Ns));
figure(2)
subplot(2,1,1)
stem(x_f, abs(S_f), 'filled');
title('原信号频谱')
xlabel('f/Hz')
ylabel('幅值')y_f = (0:Ns-1)*delta_f; % 频域信号横轴
Y_f = fft(y(1:Ns));
subplot(2,1,2)
stem(y_f, abs(Y_f), 'filled');
title('滤波信号频谱')
xlabel('f/Hz')
ylabel('幅值')

3、高通滤波器

clc 
clear
close all% 创建一个测试信号
fs = 1000; % 采样频率
t = 0:1/fs:1; % 时间向量
x = sin(2*pi*50*t) + sin(2*pi*150*t) + 0.5*sin(2*pi*300*t); % 包含50Hz、150Hz和300Hz成分的信号fc_low = 100; % 低截止频率
fc_high = 200; % 高截止频率N = 7; % 滤波器阶数% [b, a] = butter(N, fc_low/(fs/2), 'low'); % 计算低通滤波器系数
% [b, a] = butter(N, [fc_low/(fs/2), fc_high/(fs/2)], 'bandpass'); % 计算中通滤波器系数
[b, a] = butter(N, fc_high/(fs/2), 'high'); % 计算中高通滤波器系数% 使用中通滤波器对信号进行滤波
y = filter(b, a, x);% 绘制原始信号和滤波后的信号
figure;
subplot(2,1,1);
plot(t, x);
title('原始信号');
xlabel('t/s');
ylabel('幅值');subplot(2,1,2);
plot(t, y);
title('滤波信号');
xlabel('t/s');
ylabel('幅值');% 傅里叶变换,画频谱图
Ns = 100; % 傅里叶变换采样点数
delta_f = fs/Ns; % 频率分辨率
x_f = (0:Ns-1)*delta_f; % 频域信号横轴
S_f = fft(x(1:Ns));
figure(2)
subplot(2,1,1)
stem(x_f, abs(S_f), 'filled');
title('原信号频谱')
xlabel('f/Hz')
ylabel('幅值')y_f = (0:Ns-1)*delta_f; % 频域信号横轴
Y_f = fft(y(1:Ns));
subplot(2,1,2)
stem(y_f, abs(Y_f), 'filled');
title('滤波信号频谱')
xlabel('f/Hz')
ylabel('幅值')

三、结语

对于傅里叶变换,本文不再赘述,可看本人之前的文章;

要注意截止频率Wn的取值,需要除以二倍的采样频率;

有问题可以留言,本人尽量解答

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区块链的基本原理和优势

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

无人机电机选型

2306的意思是电机定子直径23MM,定子高度6MM.在相同KV值的情况下电机的定子体积越大,扭矩越大:KV的意思是每增加1V的电压电机转速增加多少。同参数的电机KV越低,在低速的情况下能带动更大的质量。这也就解释了竞速机选用更高KV值的…

【Java】解决Java报错:NoClassDefFoundError

文章目录 引言1. 错误详解2. 常见的出错场景2.1 类路径配置错误2.2 依赖库缺失2.3 类文件被删除或损坏2.4 类加载器问题 3. 解决方案3.1 检查类路径配置3.2 检查依赖库3.3 检查类文件3.4 调试类加载器问题 4. 预防措施4.1 使用构建工具管理依赖4.2 定期进行构建和测试4.3 使用I…

了解光伏储能技术的应用场景和优势

光伏发电是指利用太阳能电池板将太阳光转化为电能的过程。其优点在于清洁、高效、可再生,但光伏发电需要同时也存在间歇性和不稳定性问题。为了解决这一问题,光伏储能技术得到了广泛应用。其基本原理是将白天无法消耗的电能储存起来,以供需要…

mysql当前状态分析(show status)

文章目录 查看当前线程数据查询连接情况查询缓存相关查询锁相关查询增删改查执行次数查询DDL创建相关 SHOW STATUS 是一个在 MySQL 中用来查看服务器运行状态的命令。它可以帮助你了解服务器的当前性能,包括连接数、表锁定、缓冲区使用情况等信息。 查看当前线程数据…

【Rust】——面向对象设计模式的实现

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

张量之力:人工智能的多维舞台

在人工智能(AI)的广阔天地里,张量(Tensor)这一数学概念如同璀璨的明星,以其独特的魅力和强大的功能,为AI技术的发展和应用注入了新的活力。张量,这个源自物理学的概念,如…

通州公司代理记账,以专业服务提升企业运营效率

我们为您提供“通州公司代理记账”的全面信息,作为一家专业的代理记账机构,我们的目标是为您的企业提供最优质的服务,帮助您更高效地管理财务。 代理记账是一项重要的商业活动,它不仅可以帮助企业节约时间和成本,而且…

boot整合solr

换了新项目组,技术相对老些,于是用boot框架简单记录下! 安装 下载路径:https://solr.apache.org/downloads.html Windows环境 下载solr-8.2.0.zip包并解压缩,以管理员身份打开cmd,执行 solr cmd 命令启…

负反馈放大电路

开环放大倍数:放大电路没有加反馈时的放大倍数A 闭环放大倍数:电路加了反馈信号的放大倍数Af。反馈信号和输出信号的比值称为反馈系数F。 三极管各极电压变化关系 1,三极管的基极和发射极之间是同相关系,当基极电压上升&#x…

【Java】单例设计模式

单例设计模式简介 目录 1.单例设计模式是什么?2.单例设计模式设计方法饿汉式懒汉式 3.单例设计模式的应用任务管理器(仅有一个页面,不可多开)Runtime运行环境 1.单例设计模式是什么? 设计模式 是解决 特定问题的优秀设计方式之一。 单例设计…

怎么把m4a转换成mp3?四种常见的转换方法介绍!

怎么把m4a转换成mp3?在处理m4a音频文件时,我们可能会遇到一系列复杂的问题,首先,考虑到m4a是一种相对较新的音频格式,老旧的设备或软件可能无法准确识别它,这可能导致用户无法在这些设备上播放或编辑m4a文件…

西门子学习笔记10 - MCGS和西门子1200进行通讯设置

1、博图软件的设置 1、修改PLC的ip地址为192.168.1.1 2、打开put,get通讯功能 3、设置通讯变量,可以是M区也可以是DB块的数据 2、MCGSE组态环境设置 1、新建项目,在设备窗口界面进入设备窗口 2、添加设备如下 3、双击进入配置界面 4、添加变…

[线程与网络] 网络编程与通信原理(六):深入理解应用层http与https协议(网络编程与通信原理完结)

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

[职场] 美术学就业方向和前景 #经验分享#学习方法

美术学就业方向和前景 2011年国务院学位委员会、教育部颁布了新的《学位授予和人才培养学科目录》,艺术学首次从文学门类中独立出来,成为新的第13个学科门类,即艺术学门类。其中,美术学又是艺术学门类下的五个一级学科之一。但是…

亿发软件:信息化与数字化,相互交织的科技双引擎

在现代科技发展的浪潮中,信息化和数字化是两个频繁被提及的关键词。尽管它们在很多情况下被视为同义词,但其实两者有着本质的区别和相互影响的关系。究竟是信息化推动了数字化,还是数字化引领了信息化的进程?本文将深入探讨信息化…

数字驱动:企业发展的火箭助推器!

​ 在这个数字经济时代,数据就像火箭燃料,而数字驱动则是那强大的火箭助推器!它正以惊人的力量助力企业飞速发展! 数字驱动,助力企业发展的超强引擎! 用数据说话,决策不再盲目! 以数…

Vue CLI 环境变量使用指南

一、简介 Vue CLI 是一个强大的前端工程化工具,它提供了丰富的配置选项,包括环境变量的管理。环境变量允许开发者根据不同的运行环境(如开发、测试和生产)应用不同的配置,而无需更改代码。本文将详细介绍如何在 Vue C…

redis 03 RDB AOF

1.数据库状态 2.为什么会出现RDB 3.什么是RDB 5.1 5.2 6 6.1 6.2 6.2.1 6.2.2 6.2.3 7 8. 8.1 9 9.1 9.2 9.3 9.4 9.5

心链12-----队伍页业务完善+匹配算法实现随机匹配(最短距离算法)

心链 — 伙伴匹配系统 搜索队伍 我们选择vant组件库里的基础搜索框,复制到TeamPage页面,同时还有查询为空时,显示的无结果页面(用户页面以写过) 因为,我们一次性挂载本质性也是搜索队伍,所以…