Matlab的一些函数和压缩感知BP算法程序

Matlab 中的一些函数:

1. Matlab里面有两个非常有用函数:randperm()与sparse()。

     randperm(n)会返回一个1维数组(向量),该数组是整数1到n的一组随机排列,彼此无重复,顺序随机。

     sparse(X)会返回一个矩阵X的稀疏矩阵的表达形式。在Matlab的Workspace中,稀疏矩阵的图标是,不同于一般的结构体、矩阵等。


2.  true()和false()函数是产生logical变量矩阵的函数。


3. cell()函数用于创建元胞数组。


4.  n=norm(A,p)norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数


压缩感知BP算法程序:

%一维信号BP重构算法
clc
clear all;
close all;
M = 200;   %观测信号长度
N = 1000;  %稀疏信号长度
K = 30;   %稀疏度
%% -----1.生成稀疏度为K的稀疏信号-----
x0 = zeros(N,1);
p = randperm(N);
x0(p(1:K),1) = rand(K,1)-0.5;
%------  高斯感知矩阵Phi   -------------
Phi = sqrt(1/M) * randn(M,N);
for i = 1:N
    Phi(:,i) = Phi(:,i) / norm(Phi(:,i));
end
%-------- 测量向量 y  ----------
y  = zeros(M,1);
y = Phi * x0;
%%  -----2. 含高斯白噪声观测 SNR=40dB --------
ye2 = mean(y.^2);
SNR = 40;
sgmav = sqrt( ye2*10^(-SNR/10) );
noisev = sgmav*randn(M,1);
y = y + noisev;
%% ------3.BP重构算法 ----------------
A = [Phi,-Phi];
b = y;
for i =1 : length(x0)
    u(i,1) = max(0,x0(i));
    v(i,1) = max(0,-x0(i));
end
x = [ u ; v];
c = [ ones(1,length(u)) ones(1,length(v)) ];
x = linprog(c',[],[],A,b,zeros(size(x)),[]);
rec_x0 = x(1:length(u)) - x(length(u)+1:length(u)+length(v));
%% ----4.重建质量衡量--------------
disp('abs_err=');
disp(norm(rec_x0 - x0) );
disp('relative_erro=');
disp( norm(rec_x0 - x0) / norm(x0) );
SNR = 20 * log10( norm(x0)/norm(rec_x0-x0) )
stem(x0,'b*');
hold on
stem(rec_x0,'ro');
legend('原始','重构');
% figure
% stem(rec_x0 - x0,'r*');



  • 0
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值