从现实环境采集到的数据中经常混叠有微弱噪声,其中包括由于系统不稳定产生的噪声,也有周围环境引入的毛刺,这些弱噪声都需要在处理信号之前尽可能地消除或减弱。这一工作往往作为预处理的一部分。在本节中将通过案例介绍几种简单又实用的平滑处理方法:五点三次平滑法、MATLAB自带平滑处理的smooth函数和Savitzky-Golay平滑滤波器等。
五点三次平滑法
1.概 述
对于带毛刺或弱噪声的数据经常会采用五点三次平滑法来进行平滑处理。给出了相应的MATLAB程序,这里编写成如下函数mean5_3:函数:mean5 3;功能:对数据进行五点三次平滑处理
调用格式:y=mean5 3(x,m)
说明:x是要平滑的输入序列,m是对数据进行多次循环平滑的次数;y是平滑后的输出序列。数据x能进行多次五点三次的平滑处理,但m必须选择一个适当的值,不宜太大,否则容易使峰值降低,峰值频带变宽。
function y=mean5_3(x,m)
% x为被处理的数据
% m 为循环次数
n=length(x);
a=x;
for k=1: m
b(1) = (69*a(1) +4*(a(2) +a(4)) -6*a(3) -a(5)) /70;
b(2) = (2* (a(1) +a(5)) +27*a(2) +12*a(3) -8*a(4)) /35;
for j=3:n-2
b (j) = (-3*(a(j-2) +a(j+2)) +12*(a(j-1) +a(j+1)) +17*a(j)) /35;
end
b (n-1) = (2*(a(n) +a(n-4)) +27*a(n-1) +12*a(n-2) -8*a(n-3)) /35;
b (n) = (69*a(n) +4* (a(n-1) +a(n-3)) -6*a(n-2) -a(n-4)) /70;
a=b;
end
y =a;
有一组带噪信号数据文件xnoisedata.txt,数据的第1列是时间,第2列是实验检测到的数据。由于环境的原因,实验数据中含有噪声,要求通过平滑方法对数据进行处理。本例采用五点三次平滑法,程序清单如下:
clear all; clc; close all;
xx=load('xnoisedata1.txt'); % 读入数据
time=xx(:,1); % 时间序列
x=xx(:,2); % 带噪数据
xmean=mean5_3(x,50); % 调用mean5_3函数,平滑数据
% 作图
subplot 211; plot(time,x,'k');
xlabel('时间/s'); ylabel('幅值')
title('原始数据'); xlim([0 max(t