当前位置:   article > 正文

基于Matlab的SVD信号去噪方法应用_基于特征均值的svd信号去噪算法

基于特征均值的svd信号去噪算法

                    目录

1.题目

2.方法

3.程序

4.分析

5.结论


1.题目

使用Matlab,研究SVD去噪的方法。构造一个含有噪声的一维数组将SVD用于一维信号的去噪

2.方法

Hankel矩阵中的特征值降序排列,把反映主要噪声的奇异值置零,就可以去除信号中的噪声


3.程序

  1. clear all; clc;
  2. t=0:0.1:6.3;
  3. x= 10.*sin(t)+2.*cos(2.*t); % 构造一个原始信号
  4. noise=unifrnd(-1,1,1,64); % 构造噪声
  5. y=x+noise; % 最终信号
  6. y1=reshape(y,8,8); % 信号y只有1行,没法进行SVD分解,所以先改变一下形状,
  7. [u s v]=svd(y1); % 对y1进行SVD分解,s为包含奇异值的矩阵
  8. s1=s;u1=u;v1=v;
  9. % 令第38个奇异值为0,u,v也要相应变化
  10. s1(3:8,3:8)=0;
  11. u1(8,8)=0; u1(7,7)=0; u1(6,6)=0; u1(5,5)=0; u1(4,4)=0; u1(3,3)=0;
  12. v1(8,8)=0; v1(7,7)=0; v1(6,6)=0; v1(5,5)=0; v1(4,4)=0; v1(3,3)=0;
  13. y2=u1*s1*v1'; % 重构信号,注意这里乘的是v1的转置
  14. y2=reshape(y2,1,64); % 不要忘了reshape一下
  15. % 求Hankel矩阵的特征值
  16. [x_Tezhenxiangliang,y_Tezhenzhi]=eig(s);
  17. Tezhenzhi = sort(diag(y_Tezhenzhi),'descend'); %取对角元素,即矩阵的特征值
  18. figure();
  19. subplot(2,2,1);
  20. plot(t,x,'k'); grid on;
  21. title('a.原始信号');
  22. subplot(2,2,2);
  23. plot(t,noise,'r'); grid on;
  24. title('b.噪声信号');
  25. subplot(2,2,3);
  26. plot(t,y,'k');grid on;
  27. title('c.叠加噪声的信号');
  28. subplot(2,2,4);
  29. plot(t,y2,'k');grid on;
  30. title('e.SVD去掉的噪声的信号');
  31. figure();
  32. for i = 1:8
  33. plot(i,Tezhenzhi(i,1),'k^');
  34. hold on;
  35. end
  36. grid on;
  37. title('d.Hankel矩阵的特征值');

4.分析

          

如图a所示,构造了一个平滑的原始信号

如图b所示,生成-1到1之间的噪声信号

            

如图c所示,为原始信号叠加噪声后的信号。

如图d所示,为SVD奇异值分解过程中Hankel矩阵的特征值。根据特征值的大小分布,这里将反映主要噪声3-8位置的特征值置零。

            

如图e所示,为经过SVD去噪后的信号


5.结论

去噪信号图e和叠加噪声信号的图c对比,可观察到SVD去噪有一定的效果

去噪信号图e和原始信号图a对比,可观察到去噪参数还有待进一步调整,才能达到更好的去噪效果。

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

闽ICP备14008679号