matlab 滤波去噪
滤波去噪
matlab滤波去噪的三种方法
移动平均法的方法原理
滑动平均法(moving average)也叫做移动平均法、平均法、移动平均值滤波法等等,是一种时间域思想上的信号光滑方法。算法思路为,将该点附近的采样点做算数平均,作为这个点光滑后的值。
一般窗口为对称窗口,防止出现相位偏差。窗口一般为奇数。
以3点平均(窗口长度为3)公式为例,原数据为x,平滑后的数据为y:
对y(n)和y(n+1)相减,可以得到另一种计算形式:
当然这两者都是等价的。
matlab的函数处理
%移动平均滤波
clear
clc
close all
N_window = 5;%窗口长度(最好为奇数)
t = 0:0.1:10;
A = cos(2*pi*0.5*t)+0.3*rand(size(t));
B1 = movmean(A,N_window);
figure(1)
plot(t,A,t,B1)
中值滤波
中位值法,也叫移动中位数法、中值滤波法等。其思想是将窗口内的中位数作为输出结果,如下图所示:
优点是,在数据采样点密集,且比较平滑的情况下,中位数法可以很好地剔除离群值。缺点是不适用于噪声较大的情况。而且平滑之后,数据光滑度不足。经过中位值法处理之后,极值点会丢失。
matlab中值滤波
%移动平均滤波
clear
clc
load('类型3_70.mat');
N_window = 5;%窗口长度(最好为奇数)
B1 = movmean(BBl_3_70,N_window);
B2 = movmedian(BBl_3_70,7);%中值滤波
plot(B2,'g');
hold on;
plot(BBl_3_70,'b');
hold on;
plot(B1,'r')
五点三次平滑滤波
滤波函数代码
function [X2] = F_smooth(X1)
% 简单的滤波处理,主要目的在于消除毛刺和去除趋势项,寻找最大和最小值。
m = 3; %循环的次数
N = length(X1); %数据的长度
a = X1;
for M = 1:m
b(1) = (3 * a(1) + 2 * a(2) + a(3) - a(4)) / 5;
b(2) = (4 * a(1) + 3 * a(2) + 2 * a(3) + a(4)) / 10;
for j = 3:N-2
b(j) = (a(j-2) + a(j-1) + a(j) + a(j+1) + a(j+2)) / 5;
end
b(N-1) = (a(N-3) + 2 * a(N-2) + 3 * a(N-1) + 4 * a(N)) / 10;
b(N) = (-a(N-3) + a(N-2) + 2 * a(N-1) + 3 * a(N)) / 5;
a = b;
end
X2=a;
end
去噪后的结果
几种滤波方式的结果差不太多,点平均滤波好一点,下面是结果图