当前位置:   article > 正文

均匀采样信号的鲁棒Savistky-Golay滤波(MATLAB)

均匀采样信号的鲁棒Savistky-Golay滤波(MATLAB)

S-G滤波器又称S-G卷积平滑器,它是一种特殊的低通滤波器,用来平滑噪声数据。该滤波器被广泛地运用于信号去噪,采用在时域内基于多项式最小二乘法及窗口移动实现最佳拟合的方法。与通常的滤波器要经过时域-频域-时域变换不同,S-G滤波直接处理时域数据进行平滑,其平滑效果随窗口宽度不同而不同。相对于均值平滑滤波,S-G滤波更能保留相对极大值、极小值和宽度等分布特征。该滤波算法的另一优点是其运算量相对较小,对计算机的内存及数据处理能力要求较低。鉴于此,采用一种鲁棒Savistky-Golay滤波器对均匀采样信号进行降噪平滑,运行环境MATLAB 2021。

  1. for i = 1:step:N
  2. ind1 = max(1,i-half_window) ;
  3. ind2 = min(N,i+half_window) ;
  4. y_spl = y_input(ind1:ind2) ;
  5. x_spl = [ind1:ind2]' ;
  6. weights = ones(size(y_spl)) ;
  7. p = inf(order+1,1) ; s = inf ; ds = 1 ; dp = 1 ;
  8. X = repmat(x_spl,1,order+1).^[order:-1:0] ;
  9. c = 4.685 ; nb_iter = 0 ;
  10. while (abs(ds) >= opts.TolFun) || (abs(dp) >= opts.TolX)
  11. if nb_iter > opts.MaxIter
  12. break
  13. end
  14. nb_iter = nb_iter+1 ;
  15. old_p = p ;
  16. p = (sqrt(weights).*X)\(sqrt(weights).*y_spl) ;
  17. y_spl_calc = X*p ;
  18. r = y_spl_calc-y_spl ;
  19. tau = median(abs(r-median(r)))/0.6745 ;
  20. if tau == 0
  21. s = std(r)*sqrt(1+1/numel(y_spl)+(i-mean(x_spl)).^2/sum((x_spl-mean(x_spl)).^2)) ;
  22. break
  23. end
  24. z = r/tau ;
  25. weights = (abs(z)<c).*(1-(z/c).^2).^2 ;
  26. weights = weights.*(weights>=0) ;
  27. old_s = s ;
  28. s = std(r,weights)*sqrt(1+1/numel(y_spl)+(i-sum(weights.*x_spl)./sum(weights)).^2/sum((x_spl-sum(weights.*x_spl)./sum(weights)).^2)) ;
  29. dp = max((old_p-p)./p) ;
  30. ds = (old_s-s)/s ;
  31. end
  32. y3(i,:) = p' ;
  33. y2(i,1) = s ;
  34. y1(i,1) = polyval(p,i) ;
  35. end
  36. if y_input_type == "row"
  37. y1 = y1' ;
  38. y2 = y2' ;
  39. x3 = y3' ;
  40. y_input = y_input' ;
  41. x_interp = 1:step:N ;
  42. x_query = 1:N ;
  43. else
  44. x_interp = [1:step:N]' ;
  45. x_query = [1:N]' ;
  46. end
  47. if step == 1
  48. % No need for interpolation.
  49. return
  50. end
  51. y1 = interp1(x_interp,y1(1:step:N),x_query,opts.Interpolation,"extrap") ;
  52. y2 = interp1(x_interp,y2(1:step:N),x_query,opts.Interpolation,"extrap") ;
  53. y3 = interp1(x_interp,y3(1:step:N,:),x_query,opts.Interpolation,"extrap") ;

图片

图片

图片

图片

    1. 工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。
    2. 代码通过知乎学术咨询获得:https://www.zhihu.com/consult/people/792359672131756032?isMe=1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/821062
推荐阅读
相关标签
  

闽ICP备14008679号