利用卷积实现中值滤波_利用Matlab实现一阶低通滤波器

745cbfe9807d0da13e3001ab222d15be.png
matlab中如何去除高振幅的干扰信号?​www.zhihu.com
104e15e94199cfcb2b0f84e5bf1fed4d.png

题主没有给出采样频率,或采样时间,数据中没有,我们就假定采样时间为 0.01s。

第一步, 电压信号读入,然后傅里叶分析,得到原信号频谱图。从图中第三个子图可以看到 ,基波信号都在0.05Hz以下,所以用一阶低通滤波器就可以了。

第二步,使用 一阶低通滤波器,然后plot。

下面分别为 截至频率,0.1,0.2Hz的滤波器, 源码放在下面了,可以尝试调一调。


这里的一个基本概念就是 :

一阶低通滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,得到有效滤波值,使得输出对输入有反馈作用。

  一阶低通滤波的算法公式为:

  Y(n)=αX(n)+(1-α)Y(n-1)

  Y(n)=α[X(n)-Y(n-1)]+Y(n-1)

  式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。

一个关键公式是:

FilterFactor=CutoffFrequency*2pi*SampleTime


b3477fbf33d1f3e4f1239f23a87b3da8.png
截至频率 0.2Hz滤波

09639f218069922f5bfdca1cfaf5bba9.png
截至频率 0.1Hz滤波

clc;clear;close all;
%%Import data
Data=xlsread('data.xlsx');
fs=100; % sample frequency is 100Hz
N=length(Data);
t=[0:1/fs:(N-1)/fs]'; 
subplot(221);
plot(t,Data);
title('Filtering data')
subplot(223);
plot((-N/2:N/2-1)*fs/N,abs(fftshift(fft(Data,N)))*2/N)%plot spectrum,X axis is frequency
title('Filtering spectrum')
axis([0 0.5 0 .2]);
%%Filter
OutputData(1)=Data(1);
CutoffFreq=0.1;%Cutoff frequency
FilterFactor=2*3.14*1/fs*CutoffFreq;
for i=2:length(Data)
  OutputData(i)=FilterFactor*Data(i)+(1-FilterFactor)*OutputData(i-1);%one order low pass filter
end
subplot(222);
plot(t,OutputData')
title('Filtered data(cutoff frequency 0.1Hz)')
axis([0 160 0.4 1.8]);
subplot(224);
plot((-N/2:N/2-1)*fs/N,abs(fftshift(fft(OutputData,N)))*2/N)%%plot spectrum,X axis is frequency
axis([0 0.5 0 .2]);
title('Filtered frequency')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值