加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SVD去噪

(2014-12-03 18:01:24)
标签:

matlab

svd

分类: matlab

博主最近在研究SVD算法,看到了有人拿这个算法去噪,自己也去试了一下。MATLAB里有编好的函数svd来实现奇异值分解(不过你edit svd,会发现只有几行注释语句,这应该是matlab公司的版权保护,不让外人知道算法程序是如何编写的),所以用SVD去噪也是很容易实现的。

clear all;t=0:0.1:20;
x= 10.*sin(t)+5.*cos(2.*t);%构造一个原始信号
noise=unifrnd(-1,1,1,201);%构造噪声

 y=x+noise;%最终信号

y1=reshape(y,3,67);%信号y只有1行,没法进行SVD分解,所以先改变一下形状

[u s v]=svd(y1);%对y1进行SVD分解,s为包含奇异值的矩阵;

 http://s10/mw690/003cvAxDzy6O62cFGDDf9&690

s1=s;s1(3,3)=0;%令第三个奇异值为0,u,v也要相应变化

u1=u;u1(3,3)=0;

v1=v;v1(3,3)=0;

y2=u1*s1*v1';%重构信号,注意这里乘的是v1的转置

y2=reshape(y2,1,201);%不要忘了reshape一下

plot(t,noise,'r',t,y2-x,'k')%画出真实的noise和SVD去掉的'噪声'的对比图

 http://s6/mw690/003cvAxDzy6O62ho9sp95&690

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有