function x = SparseVector(n, k, ensemble, perm) % SparseVector: Generates a sparse vector with a specified distribution. % % Usage: % x = SparseVector(n, k, ensemble, perm) % Inputs: % n vector length % k number of nonzero entries % ensemble string containing name of coefficient distribution % ‘Uniform‘, ‘Gaussian‘, ‘Signs‘, ‘Power‘. % Default is ‘Uniform‘. % perm If =1, the nonzero indices are randomly selected. % Otherwise, the nonzero entries are in indices 1..k (default). % Outputs: % x Sparse n vector. % Description: % This function creates a vector of length n with k nonzero entries, % distributed according to the specified input ensemble. % The following distributions are supported: % % ‘Uniform‘ - Entries are distributed uniformly on the unit interval. % % ‘Gaussian‘ - Entries are distributed N(0,1). % % ‘Signs‘ - Entries are distributed Bernoulli over the set {-1,1}, % with equal probabilities. % % ‘Power‘ - Entries follow the power law 1/j, j = 1..k % % See Also % MatrixEnsemble if nargin < 4, perm = 0; end if nargin < 3, ensemble = ‘Uniform‘; end switch upper(ensemble) case ‘UNIFORM‘ x = [rand(k,1); zeros(n-k,1)]; case ‘SIGNS‘ x = sign(rand(k,1) - 0.5); zz = find(x == 0); Phi(zz) = ones(size(zz)); x = [x; zeros(n-k,1)]; case ‘GAUSSIAN‘ x = [randn(k,1); zeros(n-k,1)]; case ‘POWER‘ %这里被我修改了,之前是x = [1./[1:k]; zeros(n-k,1)]; %程序是有问题的,需要转置 x = [(1./[1:k])‘; zeros(n-k,1)]; end if perm p = randperm(n); x = x(p); end % % Copyright (c) 2006. David Donoho % % % Part of SparseLab Version:100 % Created Tuesday March 28, 2006 % This is Copyrighted Material % For Copying permissions see COPYING.m % Comments? e-mail sparselab@stanford.edu %
压缩感知中常用的待还原信号种类,布布扣,bubuko.com
原文地址:http://blog.csdn.net/zhyoulun/article/details/25600311