matlab 滤波去噪

滤波去噪

matlab滤波去噪的三种方法

移动平均法的方法原理

滑动平均法(moving average)也叫做移动平均法、平均法、移动平均值滤波法等等,是一种时间域思想上的信号光滑方法。算法思路为,将该点附近的采样点做算数平均,作为这个点光滑后的值。

image-20220426100637296

一般窗口为对称窗口,防止出现相位偏差。窗口一般为奇数。
以3点平均(窗口长度为3)公式为例,原数据为x,平滑后的数据为y:
image-20220426100651529

对y(n)和y(n+1)相减,可以得到另一种计算形式:
image-20220426100700276

当然这两者都是等价的。

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)

中值滤波

中位值法,也叫移动中位数法、中值滤波法等。其思想是将窗口内的中位数作为输出结果,如下图所示:

image-20220426103255026

优点是,在数据采样点密集,且比较平滑的情况下,中位数法可以很好地剔除离群值。缺点是不适用于噪声较大的情况。而且平滑之后,数据光滑度不足。经过中位值法处理之后,极值点会丢失。

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

去噪后的结果

几种滤波方式的结果差不太多,点平均滤波好一点,下面是结果图

image-20220426194833188

posted @ 2022-05-08 11:18  快乐气氛组阿宇  阅读(863)  评论(0编辑  收藏  举报