巴特沃斯滤波器降噪matlab代码

clc
 
clear
 
duration = 1; % 数据持续时间(秒)
 
samplingRate =1000; % 采样率(Hz)
 
% 生成时间轴
 
t = 0:1/samplingRate:duration-1/samplingRate;
 
% 生成低频信号(40Hz)也目标信号
 
lowFrequency = 40;
 
lowSignal = sin(2*pi*lowFrequency*t);
 
% 生成高频信号(200Hz)噪声
 
highFrequency = 200;
 
highSignal = sin(2*pi*highFrequency*t);
 
% 生成包含高频和低频信号的总信号
 
totalSignal = lowSignal + highSignal;
 
% 绘制信号
 
subplot(3,1,1)
 
plot(t,lowSignal)
 
xlabel('Time (s)');
 
ylabel('Amplitude');
 
title('低频信号');
 
subplot(3,1,2)
 
plot(t,highSignal)
 
xlabel('Time (s)');
 
ylabel('Amplitude');
 
title('高频噪声信号');
 
subplot(3,1,3)
 
plot(t, totalSignal);
 
xlabel('Time (s)');
 
ylabel('Amplitude');
 
title('低频和高频的混合信号');
 

%设计Butterworth滤波器
 
fs=250;
 
n=4;
 
Wn = [1/(fs/2) 40/(fs/2)];%保留频率为1-40
 
[a,b]=butter(n,Wn);
 
sF=filter(a,b,totalSignal);
denoised_signal = medfilt1(sF,4);
subplot(4,1,1)
 
plot(lowSignal)
 
xlabel('Time (s)');
 
ylabel('Amplitude');
title('目标信号');
subplot(4,1,2)
 
plot(t, totalSignal);
 
xlabel('Time (s)');
 
ylabel('Amplitude');
 
title('低频和高频的混合信号');
 
subplot(4,1,3)
 
plot(sF)
 
xlabel('Time (s)');
 
ylabel('Amplitude');
 
title('巴特沃斯滤波器降噪信号');
 
subplot(4,1,4)
 
plot(denoised_signal)
 
xlabel('Time (s)');
 
ylabel('Amplitude');
title('巴特沃斯滤波器降噪加中值滤波信号');

 

     这是一篇关于信号处理的文章。使用了巴特沃斯滤波器和中值滤波降噪。仿真噪声含有高频和低频的混合信号,频率使用短时傅里叶变换估计频率,最后使用巴特沃斯滤波器降噪,得到低频信号。但信号不平滑,使用了一个中值滤波使信号更加平滑。有对比图。可自行调整对应频率范围,实现降噪,得到对应频率的信号。

欢迎评论,欢迎指正。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
巴特沃斯滤波器是一种常用的数字滤波器,它具有平滑的截止频率和陡峭的滚降特性,可用于信号滤波、降噪和频率分析等方面。在MATLAB中,可以使用`butter`函数来设计和实现巴特沃斯滤波器。 下面是一个简单的例子,展示如何使用`butter`函数来设计一个低通滤波器并对信号进行滤波。 ```matlab % 生成测试信号 Fs = 1000; % 采样率 t = 0:1/Fs:1-1/Fs; % 时间向量 f1 = 50; % 信号频率 f2 = 150; f3 = 250; x = sin(2*pi*f1*t) + sin(2*pi*f2*t) + sin(2*pi*f3*t); % 设计并应用巴特沃斯滤波器 fc = 100; % 截止频率 Wn = fc/(Fs/2); % 归一化截止频率 [b, a] = butter(6, Wn, 'low'); % 设计6阶低通滤波器 y = filter(b, a, x); % 对信号进行滤波 % 可视化结果 figure; subplot(2,1,1); plot(t,x); title('原始信号'); xlabel('时间 (s)'); ylabel('幅度'); subplot(2,1,2); plot(t,y); title('滤波后的信号'); xlabel('时间 (s)'); ylabel('幅度'); ``` 在上面的代码中,我们首先生成了一个包含三个正弦波的测试信号。然后,我们使用`butter`函数设计了一个6阶低通滤波器,并将其应用于信号`x`上。最后,我们使用`subplot`函数将原始信号和滤波后的信号画在一起进行比较。 如果需要设计高通、带通或带阻滤波器,可以调整`butter`函数的第二个参数(滤波器阶数)和第三个参数(归一化截止频率)。具体的设计方法和参数选择可以参考MATLAB官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@nullptr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值