信号处理中简单实用的方法——对信号进行平滑处理

从现实环境采集到的数据中经常混叠有微弱噪声,其中包括由于系统不稳定产生的噪声,也有周围环境引入的毛刺,这些弱噪声都需要在处理信号之前尽可能地消除或减弱。这一工作往往作为预处理的一部分。下面将介绍几种简单又实用的平滑处理方法:五点三次平滑法、MATLAB自带平滑处理的smooth 函数和Savitzky-Golay平滑滤波器等。
一、五点三次平滑法

对于带毛刺或弱噪声的数据经常会采用五点三次平滑法来进行平滑处理。
五点三次平滑法是利用最小二乘法原理对离散数据进行三次最小二乘多项式平滑的处理方法。
五点三次平滑法的函数为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;

案例1、有一组带噪信号数据文件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(time)]);
subplot 212; plot(time,xmean,'k'); 
xlabel('时间/s'); ylabel('幅值')
title('平滑处理后的数据'); xlim([0 max(time)]);
set(gcf,'color','w');

运行结果如下:


 

二、MATLAB自带的平滑函数smooth

MATLAB自带的平滑函数smooth是一个低通滤波器,可见使用这种简单形式的平均器,可以起到去除噪声、提高信噪比的作用。这类滤波器被称为平均滤波器或滑动平均滤波器。

MATALB自带的平滑函数smooth
对MATLAB中自带的平滑函数smooth介绍如下。
名称:smooth
功能:对一维信号进行平滑处理
调用格式:
y=smooth(x)
y=smooth(x,SPAN)
y= smooth(x,SPAN,method)
说明:x是被平滑处理的输入数据,SPAN是平滑处理中取的窗长(取奇数)。y是平滑处理后的输出数据。Method是平滑处理的方法,共有6种,见下表。

案例2、有一个整周期的余弦信号,但叠加了噪声,要求寻找余弦信号极小值的位置和幅值。调用MATLAB自带的smooth函数试验不同的参数,程序如下:

%
% pr4_5_2 from sy12
clear all; clc; close all;

k=1:500;                    % 产生一个从0到2*pi的向量,长为500               
dn=2*pi/500;
x=cos((k-1)*dn);            % 产生一个周期余弦信号
[val,loc]=min(x);           % 求出余弦信号中的最小值幅值和位置
N=length(x);                % 数据长
ns=randn(1,N);              % 产生随机信号
y=x+ns(1:N)*0.1;            % 构成带噪信号
Err=var(x-y);               % 求x-y的方差
fprintf('%4d   %5.4f   %5.6f\n',loc,val,Err);

y=y';                       % 转成列向量
z1=smooth(y,51,'moving');   % 'moving'平滑
Err1=var(x'-z1);            % 求x-z1的方差 
[v1,k1]=min(z1);            % 求出平滑信号z1中的最小值幅值和位置
fprintf('1  %4d   %5.4f   %4d   %5.6f\n',k1,v1,abs(loc-k1),Err1);  % 显示

z2=smooth(y,51,'lowess');   % 'lowess'平滑
Err2=var(x'-z2);            % 求x-z2的方差
[v2,k2]=min(z2);            % 求出平滑信号z2中的最小值幅值和位置
fprintf('2  %4d   %5.4f   %4d   %5.6f\n',k2,v2,abs(loc-k2),Err2);

z3=smooth(y,51,'loess');    % 'loess'平滑
Err3=var(x'-z3);            % 求x-z3的方差
[v3,k3]=min(z3);            % 求出平滑信号z3中的最小值幅值和位置
fprintf('3  %4d   %5.4f   %4d   %5.6f\n',k3,v3,abs(loc-k3),Err3);

z4=smooth(y,51,'sgolay',3); % 'sgolay'平滑
Err4=var(x'-z4);            % 求x-z4的方差
[v4,k4]=min(z4);            % 求出平滑信号z4中的最小值幅值和位置
fprintf('4  %4d   %5.4f   %4d   %5.6f\n',k4,v4,abs(loc-k4),Err4);

z5=smooth(y,51,'rlowess');  % 'rlowess'平滑
Err5=var(x'-z5);            % 求x-z5的方差
[v5,k5]=min(z5);            % 求出平滑信号z5中的最小值幅值和位置
fprintf('5  %4d   %5.4f   %4d   %5.6f\n',k5,v5,abs(loc-k5),Err5);

z6=smooth(y,51,'rloess');   % 'rloess'平滑
Err6=var(x'-z6);            % 求x-z6的方差
[v6,k6]=min(z6);            % 求出平滑信号z6中的最小值幅值和位置
fprintf('6  %4d   %5.4f   %4d   %5.6f\n',k6,v6,abs(loc-k6),Err6);
% 作图
subplot 211; plot(k,x,'k');
grid; xlim([0 500]); title('一周期余弦信号')
xlabel('样点'); ylabel('幅值')
subplot 212; plot(k,y,'k'); %hold on
grid; axis([0 500 -1.5 1.5]); title('带噪一周期余弦信号')
xlabel('样点'); ylabel('幅值')
set(gcf,'color','w');

figure
subplot 321; plot(k,z1,'k'); title('moving法')
grid; axis([0 500 -1.5 1.5]); ylabel('幅值')
subplot 322; plot(k,z2,'k');  title('lowess法')
grid; axis([0 500 -1.5 1.5]); ylabel('幅值')
subplot 323; plot(k,z3,'k'); title('loess法')
grid; axis([0 500 -1.5 1.5]); ylabel('幅值')
subplot 324; plot(k,z4,'k'); title('sgolay法')
grid; axis([0 500 -1.5 1.5]); ylabel('幅值')
subplot 325; plot(k,z5,'k'); title('rlowess法')
grid; axis([0 500 -1.5 1.5]); xlabel('样点'); ylabel('幅值')
subplot 326; plot(k,z6,'k'); title('rloess法')
grid; axis([0 500 -1.5 1.5]); xlabel('样点'); ylabel('幅值')
set(gcf,'color','w');


运行结果如下:

 

 三、使用Savitzky-Golay函数平滑信号

使用Savitzky-Golay平滑滤波器对信号滤波,实际上是拟合了信号中的低频成分,而将高频成分“平滑”出去了。如果噪声在高频端,那么拟合的结果是去除了噪声;反之,若噪声在低频端,信号在高频端,那么滤波的结果是留下了噪声。当然,用原信号减去噪声,又可得到所期望的信号。

MATLAB中自带的Savitzky-Golay平滑滤波函数
在MATLAB中自带了两个与Savitzky-Golay平滑滤波有关的函数,现介绍如下。
(1)、求 Savitzky-Golay 滤波器系数
名称:sgolay
功能:设计低通滤波器求其系数
调用格式:
b= sgolay(k,f)
说明:输入参数k是多项式拟合中的阶数,f是窗长,该值必须为奇数。输出参数b是Savitzky-Golay法的FIR平滑滤波器。
(2)、实现 Savitzky-Golay 滤波
名称:sgolayfilt
功能:实现Savitzky-Golay 滤波
调用格式:
y= sgolayfilt(x,k,f)
说明:输入参数x是输入信号,k是多项式拟合中的阶数,f是窗长,该值必须为奇数。输出参数y是FIR滤波器输出。

案例3、 设正弦信号的采样频率为5Hz,信号频率为0.2Hz,长200s,在信号中混入了噪声,用Savitzky-Golay滤波器平滑该正弦信号,程序如下:

clear all; clc; close all;

t=0:.2:199;            % 设置时间序列
s=10*sin(0.4*pi*t);    % 原始信号
ns=randn(size(s));     % 产生噪声序列
y=s+ns;                % 构成带噪信号
x=sgolayfilt(y,3,19);  % 通过Savitzky-Golay滤波器
% 作图
figure
plot(t,y,'r'); 
xlim([0 20]); hold on; grid;
plot(t,x,'k');
xlabel('时间'); ylabel('幅值');
title('Savitzky-Golay滤波器的输/输出波形图')
set(gcf,'color','w');

运行结果如下:

利用Savitzky-Golay滤波器来消除噪声时,一般窗长f值取得都不大,但Savitzky-Golay滤波器还可以求出信号的趋势项,此时窗长f值取得都较大。

实验数据下载链接如下:

https://mp.csdn.net/mp_download/manage/download/UpDetailed

参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)

墨影清泉
关注 关注
  • 8
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
matlab 五点三次平滑算法
点云侠的博客
10-18 5704
五点三次平滑算法及matlab代码实现
五点三次平滑+python实现
Einsam0的博客
08-17 8236
处理工业数据的时候,工业数据有数据颗粒细,噪声大,量大,随着测量点的增加,数据维度高,复杂性高,而且关联性强,不过这个关联性是相对的,因为有时候数据噪声较大,显示不出来这种关联性。 最近了解的五点三次平滑,在一个工业数据处理平台上有这个,就很疑惑为什么要用这个,搜了很多都是matlab写的代码,没有说明为什么用这个方法,就去知网搜了几篇论文,引用这些文献的解释: “一般来说,在数据采集系统...
数字信号处理——平滑和去噪
yishuihanq的博客
04-18 5936
数字信号处理信号进行去噪、平滑和去趋势处理,为进一步分析做好准备。从数据去除噪声、离群值和乱真内容。增强信号以对其可视化并发现模式。更改信号的采样率,或者使不规则采样信号或带缺失数据信号的采样率趋于恒定。为仿真和算法测试生成脉冲信号和 chirp 等合成信号
MATLAB——数据处理信号平滑处理方法
lxylxxy233的博客
08-19 2884
本文介绍了两种信号平滑处理方法,并进行对比分析,各自的优势。
MATLAB平滑处理
最新发布
yuchunyu12的博客
05-31 1424
本案例主要介绍MATLAB自带的平滑函数smooth。在日常数字信号处理经常会要寻找极大(小)值,但在有噪声的情况下很难找到实际数据的极大(小)值,所以对于带噪数据先得对数据进行平滑,平滑以后再来寻找极大(小)值。在本小节将以寻找极小值为例来介绍MATLAB自带的平滑函数smooth的应用。3.MATALB自带的平滑函数smooth名称:smooth;功能:对一维信号进行平滑处理调用格式:说明:x是被平滑处理的输入数据,SPAN是平滑处理取的窗长(取奇数)。y是平滑处理后的输出数据。
Matlab Smooth函数/丝滑数据
一些笔记
04-22 3万+
Matlab Smooth 函数的简介以及自己编写的几个去噪函数(除噪点外的其他数据不变)
matlab 曲线光滑,去毛刺,去离群值,数据滤波,高通滤波,低通滤波,带通滤波,带阻滤波
hu924519559的博客
05-10 539
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
几种平滑处理方法
热门推荐
sophia_xw的博客
04-14 6万+
平滑,也可叫滤波,或者合在一起叫平滑滤波,平滑滤波是低频增强的空间域滤波技术。它的目的有两类:一类是模糊;另一类是消除噪音。空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度值。邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会使边缘信息损失的越大,从而使输出的图像变得模糊,因此需合理选择邻域的大小。 “平滑处理”也称“模糊处理”(blurring),是一
深入探讨lowess算法:纯C++实现与局部加权多项式回归的数据平滑技术
qq_38334677的博客
08-17 1407
局部加权散点平滑技术(LOWESS)是一种非参数方法,用于拟合数据系列,特别是当需要捕获数据的非线性趋势时。不同于传统的线性或多项式回归,LOWESS考虑到每个数据点的局部特性,使其能够更加敏感地捕获数据的变化。纯C++的LOWESS实现提供了一个高效且直观的方式来平滑数据。然而,本文提供的方法仅是最基础的版本。在实际应用,可能需要进一步优化以处理大规模数据集。并行化:考虑到每个点的平滑操作是独立的,我们可以使用C++的多线程库来并行处理数据,从而大大提高算法的速度。选择性平滑
时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)
weixin_30731305的博客
04-01 4153
在时间序列,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数平滑(Triple/Three Order Exponential Smoothing,Holt-Winters)算法可以很好的进行时间序列的预测。 时间序列数据一般有以下几种特点:1.趋势(Trend) 2. 季节性(Seasonality)。 趋势描述的是时间序列的整体走势,比如总体上升或者总体下...
基于MATLAB的振动信号平滑处理方法
09-27
介绍利用MATLAB,如何对振动信号平滑处理方法
vb五点三次平滑处理
11-28
使用五点三次平均法处理数据,可以实现曲线的平滑处理
数据预处理之剔除异常值及平滑处理
08-19
《数据预处理之剔除异常值及平滑处理》这个书籍教材介绍了一类这样的方法,帮助大家理解。
pipeilvbo_信号的匹配滤波处理_
09-30
在描述提到的“对输出信号进行匹配滤波处理,输入信号为LFM形式的采样点信号”,这意味着我们需要对LFM信号的采样数据进行匹配滤波操作。这通常包括以下步骤: 1. **采样**:首先,我们需要采集LFM信号的离散样本...
RecursivePolyphaseFilters_3_recursivefilter_信号处理_多相位_
10-02
"RecursivePolyphaseFilters_3_recursivefilter_信号处理_多相位_"这一主题聚焦于一种特定的多相滤波器——2-Path Recursive All-pass Filter(2路径递归全通滤波器),它在滤波器设计具有重要意义。 2-Path ...
FractalDim_信号处理_源码
10-02
在IT领域,尤其是在信号处理和数据分析,分形维度(Fractal Dimension)是一个重要的概念,它用于描述复杂系统的自相似性。本项目提供了一个用MATLAB编写的源码——`FractalDim.m`,用于计算一维数据的分形维度。...
xinhaochuli.rar_matlab心电信号_心电 噪声_心电信号_心电信号 自适应滤波_心电信号处理
07-14
通过阅读和理解这段代码,我们可以了解到如何利用MATLAB信号处理工具箱来设计和实现自适应滤波器,对心电信号进行处理,比如去除基线漂移、高频噪声和低频波动等。 www.pudn.com.txt可能是资料来源或参考资料的...
Matlab:干涉条纹骨化算法|二值化|滤波|去毛刺
光学码农的博客
11-27 2852
Matlab:干涉条纹骨化算法。
matlab处理振动信号教程,振动信号处理方法-平滑处理及其MATLAB实现
05-24
振动信号是机械系统运行时产生的一种信号,通常包含了大量的噪声和干扰。因此,在进行振动信号分析时,需要对其进行处理,以提高信号的质量和准确度。其平滑处理是一种常用的预处理方法平滑处理旨在去除信号的高频噪声,使信号更加平滑,便于后续的分析和处理。常见的平滑处理方法包括移动平均、值滤波、高斯滤波等。 其,移动平均是最简单、最常用的平滑处理方法之一。其思想是对每个时刻的信号值取其前后若干个时刻的平均值。移动平均的MATLAB实现如下: ```matlab function y = moving_average(x, w) % x为原始信号,w为窗口大小 n = length(x); y = zeros(1,n); for i = 1:n if i <= w y(i) = mean(x(1:i+w)); elseif i > n-w y(i) = mean(x(i-w:n)); else y(i) = mean(x(i-w:i+w)); end end ``` 其,x为原始信号,w为窗口大小,n为信号长度。在函数,通过for循环对每个时刻的信号进行平均处理处理后的信号保存在y,最后将y作为函数的输出。 除了移动平均,值滤波和高斯滤波也是常用的平滑处理方法值滤波的思想是对每个时刻的信号值取其前后若干个时刻的位数,以达到平滑信号的目的。高斯滤波则是利用高斯函数对信号进行加权平均,达到平滑信号的效果。这些方法MATLAB实现与移动平均类似,可以自行查找相关资料学习。 总之,平滑处理是振动信号处理不可或缺的一步。通过对信号进行平滑处理,可以有效去除高频噪声和干扰,提高信号的质量和准确度,为后续的分析和处理奠定基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 窗函数的介绍以及画出常见窗函数(汉宁窗,矩形窗,汉明窗,布莱克曼窗)的时域图和频谱图 46257
  • 基本的信号——Sa函数(抽样信号) 34426
  • 现代信号处理——自适应滤波器(LMS自适应滤波器) 19535
  • 基本的信号——矩阵脉冲信号(门函数) 18208
  • 信号处理中简单实用的方法——提取信号中的包络 17282

最新评论

  • MATLAB仿真任意带宽的窄带信号、宽带信号以及全频带信号

    うつくし おいし: 请问这是哪本教材的内容呢

  • gammatone 滤波器详解及其MATLAB代码实现

    YASEBER: 你好,我运行代码的时候报错说MakeERBFilters函数没找到,我看了下代码,确实没有这个函数的定义啊,此外这个也不是Matlab函数,那这个函数的代码在哪呢?

  • 白噪声,有色噪声的定义、特性及其MATLAB仿真

    dede_wu: 您好,请问下for循环里面的系数是怎么算的啊

  • 窗函数的介绍以及画出常见窗函数(汉宁窗,矩形窗,汉明窗,布莱克曼窗)的时域图和频谱图

    hpy3343959482: 条理清晰

  • 现代信号处理——自适应滤波器(离散维纳滤波器)

    book_bbyuan: 写的不够通俗

大家在看

  • MySQL入门学习-SQL高级技巧.CTE和递归查询 323
  • Python中的`@property`装饰器:深入解析与实战应用 657
  • 深度解析:跨境电商平台自养号测评的核心要素与优化策略
  • 免费【2024】springboot stone音乐播放器的设计与实现
  • <数据集>安全帽佩戴识别数据集<目标检测>

最新文章

  • 基于wRLS滤波器和神经网络回声残留抑制的AEC模型——论文翻译
  • 利用深度复数神经网络、非线性幅度压缩和相位信息的声学回声消除_2021
  • 基于wRLS滤波器和神经网络回声残留抑制的AEC模型——FSMN神经网络介绍
2024年6篇
2023年54篇
2022年148篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

PHP网站源码广州英文网站建设东莞英文网站建设坪地百度竞价包年推广布吉网络营销民治模板推广盐田SEO按天扣费木棉湾网页设计福田网站推广方案吉祥企业网站制作罗湖如何制作网站龙华网站推广福田优秀网站设计坪山网站优化按天扣费平湖百姓网标王坪山网站推广系统南山网站搭建双龙网站改版龙华模板制作南山网站推广工具广州网站建设设计平湖外贸网站设计大浪品牌网站设计吉祥品牌网站设计福田设计公司网站石岩优化大运外贸网站建设坑梓设计网站龙岗设计公司网站大浪网站推广工具福田外贸网站建设歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化