comparison DL/RLS-DLA/private/completeOps.m @ 60:ad36f80e2ccf

(none)
author idamnjanovic
date Tue, 15 Mar 2011 12:20:59 +0000
parents
children
comparison
equal deleted inserted replaced
59:23f9dd7b9d78 60:ad36f80e2ccf
1 function data = completeOps(data)
2
3 % Copyright 2008, Ewout van den Berg and Michael P. Friedlander
4 % http://www.cs.ubc.ca/labs/scl/sparco
5 % $Id: completeOps.m 1040 2008-06-26 20:29:02Z ewout78 $
6
7 operators = {};
8 flagM = 0; if isfield(data,'M'), flagM = 1; end;
9 flagB = 0; if isfield(data,'B'), flagB = 1; end;
10
11 if (~flagM) && (~flagB)
12 error('At least one of the operators M or B has be to given.');
13 end
14
15 % Define measurement matrix if needed
16 if ~flagM
17 info = data.B([],0);
18 data.M = opDirac(info{1});
19 else
20 operators{end+1} = data.M;
21 end
22
23 % Define sparsity basis if needed
24 if ~flagB
25 info = data.M([],0);
26 data.B = opDirac(info{2});
27 else
28 operators{end+1} = data.B;
29 end
30
31 % Define operator A if needed
32 if ~isfield(data,'A')
33 if (length(operators) > 1)
34 data.A = opFoG(operators{:});
35 else
36 data.A = operators{1};
37 end
38 end
39
40 % Define empty solution if needed
41 if ~isfield(data,'x0')
42 data.x0 = [];
43 end
44
45 % Define the operator size and string
46 opInfo = data.A([],0);
47 data.sizeA = [opInfo{1},opInfo{2}];
48 opInfo = data.B([],0);
49 data.sizeB = [opInfo{1},opInfo{2}];
50 opInfo = data.M([],0);
51 data.sizeM = [opInfo{1},opInfo{2}];
52 data.op.strA = opToString(data.A);
53 data.op.strB = opToString(data.B);
54 data.op.strM = opToString(data.M);
55
56 % Get the size of the desired signal
57 if ~isfield(data,'signalSize')
58 if ~isfield(data,'signal')
59 error(['At least one of the fields signal ', ...
60 'or signalSize must be given.']);
61 end
62 data.signalSize = size(data.signal);
63 end
64
65 % Reconstruct signal from sparse coefficients
66 if ~isfield(data,'reconstruct')
67 data.reconstruct = @(x) reshape(data.B(x,1),data.signalSize);
68 end
69
70 % Reorder the fields (sort alphabetically)
71 m = fieldnames(data);
72 m = sort(m);
73 dataReorder = struct();
74 for i=1:length(m)
75 eval(sprintf('dataReorder.%s = data.%s;',m{i},m{i}));
76 end
77
78 data = dataReorder;