Matlab信号处理(平滑滤波)

Matlab信号处理(平滑滤波)

1.使用matlab的内有函数进行滤波

移动平均滤波

原理:滑动平均法(moving average)也叫做移动平均法、平均法、移动平均值滤波法等等,是一种时间域思想上的信号光滑方法。算法思路为,将该点附近的采样点做算数平均,作为这个点光滑后的值。
Matlab信号处理(平滑滤波)_第1张图片
上图是将窗体设置为3时的滑动平均流程(窗体设置最好为奇数)
算法实现:

y(n)=1/3(x(n−1)+x(n)+x(n+1))

matlab实现:

clear;
close all;
clc;
x = linspace(-pi,pi,100);
y = sin(2*pi*x);
n = randn(size(x));
t = y+n;
y1 = movmean(t,8);
subplot(211);
plot(x,t);
title('带噪声输入信号');
subplot(212);
plot(x,y1);
title('平滑滤波后的信号');

结果展示:
Matlab信号处理(平滑滤波)_第2张图片
将窗体从8设置为3时可以观看效果:

Matlab信号处理(平滑滤波)_第3张图片

利用卷积函数进行滤波

利用卷积原理就是对输入噪声波形和【1/N_Window … 1/N_Window】(N_Window个1/N_Window)进行卷积
原理和移动平均滤波相同,也是求一个区域的平均值!!!可知与上述用平滑函数的结果相同!只是头部信号
和尾部信号不同,是因为movmean()函数在处理边缘时,采用减小窗口的方式,而conv()相当于在两端补零!!

%%
clear;
close all;
clc;
N_Window = 5;                   %设置窗体数
x = linspace(-pi,pi,100);
y = cos(2*pi*x);
n = randn(size(x));
t = y+n;                        %杂波信号

z  = 1/N_Window*ones(1,N_Window);
y1 = conv(t,z,"same");

y2 = movmean(t,5);

subplot(211);
plot(x,t);
title('带噪声输入信号');
subplot(212);
plot(x,y1,x,y2,'r');
title('平滑滤波后的信号');

Matlab信号处理(平滑滤波)_第4张图片

2.0Savitzky-Golay法,又叫做平滑滤波器,最著名的就是5点3次滤波器。这是一种基于时间域上的多项式拟合,来消除噪声的方法。

将数据进行多项式拟合,进行数据的平滑滤波;(利用matlab自带的smoothdata(A,‘sgolay’)函数就可以实现Savitzky-Golay法滤波。但是,该函数只支持N点2次的滤波)
%%
clear
clc
close all

N_window = 9;%窗口长度(最好为奇数)

t = 0:0.1:10;
A = cos(2*pi*0.5*t)+0.4*rand(size(t));

%matlab自带的n点2次插值
B1 = smoothdata(A,'sgolay' ,N_window);
figure(1)
plot(t,A,t,B1)                                                      %%拟合原理进行滤波

Matlab信号处理(平滑滤波)_第5张图片

你可能感兴趣的:(Matlab学习笔记,matlab,开发语言)