压缩感知之常用稀疏基及matlab代码


前言

  压缩感知的第一步是进行信号的稀疏表示,那么寻找稀疏基就显得尤为重要,在此篇博客将介绍经常使用的稀疏基及其matlab代码。


一、稀疏基是什么?

  稀疏基是将可以信号进行稀疏表示的一个矩阵。设一维离散信号 x x x,长度为 N N N,可看作为 N N N维空间 N × 1 N \times1 N×1 的列向量,若此列向量中含有 K K K个不为0元素,且 K < < N K < < N K<<N,则称该信号 x x x K K K-稀疏信号,具有稀疏性。
  如果信号稀疏,则信号 x x x可以表示为: x = Ψ s x=\varPsi s x=Ψs其中, Ψ \varPsi Ψ就是稀疏基(稀疏矩阵)。

二、一些常用的稀疏基

1、DFT(离散傅里叶)稀疏基

%%matlab自带函数
dftmtx(N)/sqrt(N)%%和上面的等同
fft(eye(N))/sqrt(N);

2、DCT(离散余弦)稀疏基

%% matlab 自带函数
dctmtx(N);

%% 展开写为:
[cc,rr] = meshgrid(0:n-1);
c = sqrt(2 / n) * cos(pi * (2*cc + 1) .* rr / (2 * n));
c(1,:) = c(1,:) / sqrt(2);

3、DWT(小波)稀疏基

function ww=DWT(N)

[h,g]= wfilters('sym8','d');       %  分解低通和高通滤波器  

% N=256;                           %  矩阵维数(大小为2的整数幂次)
L=length(h);                       %  滤波器长度
rank_max=log2(N);                  %  最大层数
rank_min=double(int8(log2(L)))+1;  %  最小层数
ww=1;   %  预处理矩阵

%  矩阵构造
for jj=rank_min:rank_max
    
    nn=2^jj;
    
    %  构造向量
    p1_0=sparse([h,zeros(1,nn-L)]);
    p2_0=sparse([g,zeros(1,nn-L)]);
    
    %  向量圆周移位
    for ii=1:nn/2
        p1(ii,:)=circshift(p1_0',2*(ii-1))';
        p2(ii,:)=circshift(p2_0',2*(ii-1))';
    end
    
    %  构造正交矩阵
    w1=[p1;p2];
    mm=2^rank_max-length(w1);
    w=sparse([w1,zeros(length(w1),mm);zeros(mm,length(w1)),eye(mm,mm)]);
    ww=ww*w;
    
    clear p1;clear p2;
end

程序作者为沙威,香港大学电气电子工程学系,wsha@eee.hku.hk

4、0-1随机稀疏基(根据稀疏特性觉得也合理)

%%使用rand函数产生0-1区间的数
function A=get01(N)

B=rand(N,N);    %将产生N行N列随机数矩阵
A=round(B);     %将产生的矩阵四舍五入,即可得到非 01 的矩阵

end

总结

  以上就是要展示的稀疏基的内容及代码,如果大家还有其他常用的稀疏基,欢迎大家在下面评论分享~

  • 6
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
压缩感知稀疏基的MATLAB代码可以使用MATLAB中的DFT或DCT变换矩阵来实现。首先,根据需要使用DFT或DCT变换矩阵生成稀疏基。使用MATLAB中的dftmtx函数可以生成离散傅里叶变换矩阵,使用dctmtx函数可以生成离散余弦变换矩阵。然后,利用生成的变换矩阵,使用稀疏算法对信号进行压缩感知重建。 下面是一个使用DFT变换矩阵实现压缩感知稀疏基的MATLAB代码示例: ``` N = 256; % 稀疏基的维度 M = 100; % 采样的样本数 K = 20; % 稀疏信号的非零系数个数 % 生成离散傅里叶变换矩阵 DFT_matrix = dftmtx(N)/sqrt(N); % 生成稀疏信号 x_sparse = zeros(N,1); nonzero_indices = randsample(N, K); x_sparse(nonzero_indices) = randn(K, 1); % 采样 y = DFT_matrix * x_sparse; % 压缩感知重建 cvx_begin variable x_recon(N) minimize(norm(x_recon, 1)) subject to DFT_matrix * x_recon == y cvx_end ``` 在上面的代码中,我们首先生成了一个大小为N×N的离散傅里叶变换矩阵。然后,我们生成了一个稀疏信号x_sparse,其中只有K个非零系数。接下来,我们通过将稀疏信号与离散傅里叶变换矩阵相乘得到采样结果y。最后,我们使用压缩感知的重建算法,通过最小化L1范数对x_recon进行重建,并约束重建信号与采样结果y之间的关系。 类似地,可以使用dctmtx函数生成离散余弦变换矩阵,并将其用于压缩感知稀疏基实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [压缩感知常见稀疏matlab实现代码](https://blog.csdn.net/summer15407901/article/details/104444433)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [压缩感知算法MATLAB代码](https://download.csdn.net/download/chichuhe/10178398)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值