作业帮 > 综合 > 作业

Matlab小波变换的系数和恢复问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/09 05:24:14
Matlab小波变换的系数和恢复问题
有一个理论叫compressive sampling,说原始信号在某个基下面可以变成稀疏的,现在我用harr小波来做基.但是我不知道得到的非0系数的个数是怎么算的?
在matlab里面有appcoef 和detcoef(C,L,1),貌似一个是低频系数,一个是高频系数,那总共的非0系数是多少个呢?

我想要的结果就大概是下面右图这个样子的,

另外就是问一下matlab里面的信号恢复问题,怎么做l1-liminization,从稀疏矩阵中恢复出原来的数据?
CS是个好东西,首先非零个数可以直接用find, length( find(a~=0) ) 就是a中非零元素的个数.求解1范数有工具包的,l1-magic.你要得到右图,第一步需要把小波基写成矩阵Phi,假设要分解的信号是y, 利用l1magic  求解  y=A*Phi*x , A是测量矩阵,如果你只是想用小波分解y,A取1就好了. 得到的x才是稀疏的,否则直接小波分解,得到的系数一般不稀疏多看看压缩感知的基础,l1magic 也可以适当了解他的用法,对你肯定有帮助

再问: 求问,分解出来很多系数,什么cA啦,cD啦,都要找非0元素么?有人说并非绝对是0,就是相对较小而已,所以我就纳闷是不是系数求错了
再答: 我看你现在的问题是不懂小波,你还是先从基础的小波分解入手。
[C,L]=wavedec(X,N,'采用的小波')
这是是标准的小波分解,有趋势项和细节,根据你采用的level N,细节项的数目会变化,
http://www.mathworks.cn/cn/help/wavelet/ref/wavedec.html 这里有介绍系数如何存储的。
以上小波分解是以L2入手的,就是分解出的信号只保证接近原数据X,但是不保证系数的稀疏性,所以不管是趋势还是细节的系数都不会是稀疏的。
你想要的是稀疏的分解,也就是C,L是稀疏的话,就需要用L1的工具去分解,要自己写一段,wavedec是得不到结果的,如何写这一段代码,CS再仔细看看。
再问: 请问如何把一个不稀疏的矩阵转换为稀疏矩阵呢?
再答: 你的想法就是通过小波分
[C,L]=wavedec(X,N,'采用的小波')

因为C L里面有很多接近0的数,你想直接让他们等于0,让C,L稀疏,但是这么做是损失精度的,而且也不会足够稀疏,如果非得要这么做,那么你就这么写吧:
C(abs(C)