跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 综合服务 > 电商平台 > matlab(实例):滤波器(低通、带通、高通,使用butter函数、filter函数)

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

时间:2024-04-25 17:30:32 来源:网络cs 作者:纳雷武 栏目:电商平台 阅读:

标签: 函数  使用  滤波  实例 

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

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

%20

二、解题过程:

%20

①函数介绍:

%20

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

%20

1、butter()

%20

用于计算滤波器系数

%20

语法:

%20

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

%20

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

%20

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

%20

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

%20

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

%20

2、filter()

%20

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

%20

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

%20

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

%20

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

%20

②代码

%20

1、低通滤波器

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

2、带通滤波器

clc clearclose 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 clearclose 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的取值,需要除以二倍的采样频率;

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

本文链接:https://www.kjpai.cn/news/2024-04-25/162249.html,文章来源:网络cs,作者:纳雷武,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论