idamnjanovic@1
|
1 function SMALL_solver_test_Audio
|
idamnjanovic@25
|
2 %%% Example test of solvers on Sparco audio source separation problems
|
idamnjanovic@25
|
3 %
|
idamnjanovic@25
|
4 % Centre for Digital Music, Queen Mary, University of London.
|
idamnjanovic@25
|
5 % This file copyright 2009 Ivan Damnjanovic.
|
idamnjanovic@25
|
6 %
|
idamnjanovic@25
|
7 % This program is free software; you can redistribute it and/or
|
idamnjanovic@25
|
8 % modify it under the terms of the GNU General Public License as
|
idamnjanovic@25
|
9 % published by the Free Software Foundation; either version 2 of the
|
idamnjanovic@25
|
10 % License, or (at your option) any later version. See the file
|
idamnjanovic@25
|
11 % COPYING included with this distribution for more information.
|
idamnjanovic@25
|
12 %
|
idamnjanovic@1
|
13 %
|
idamnjanovic@1
|
14 % The main purpose of this example is to show how to use SMALL structure
|
idamnjanovic@1
|
15 % to solve SPARCO audio source3 separation problems (401-402) and to
|
idamnjanovic@1
|
16 % compare results from different solvers.
|
idamnjanovic@1
|
17 % To generate SMALL.Problem part of structure you can use generateProblem
|
idamnjanovic@1
|
18 % function from Sparco toolbox giving the problem number and any
|
idamnjanovic@1
|
19 % additional parameters you might want to change. Alternatively, you can
|
idamnjanovic@1
|
20 % might want to consult sparco documentation to write a problem by
|
idamnjanovic@1
|
21 % yourself. There are four fields the must be specified in SMALL.Problem
|
idamnjanovic@1
|
22 % - A, b, sizeA and reconstruct.
|
idamnjanovic@1
|
23 %
|
idamnjanovic@1
|
24 % To generate SMALL.solver part of the structure you must specify three
|
idamnjanovic@1
|
25 % fields:
|
idamnjanovic@1
|
26 %
|
idamnjanovic@1
|
27 % SMALL.solver.toolbox - string with toolbox name is needed because
|
idamnjanovic@1
|
28 % different toolboxes are calling solver
|
idamnjanovic@1
|
29 % functions in different ways.
|
idamnjanovic@1
|
30 % SMALL.solver.name - its string representing solver name (e.g.
|
idamnjanovic@1
|
31 % SolveBP)
|
idamnjanovic@1
|
32 % SMALL.solver.param - string that contains optional parameters for
|
idamnjanovic@1
|
33 % particular solver (all parameters you want to
|
idamnjanovic@1
|
34 % specify except A, b and size of solution)
|
idamnjanovic@1
|
35 %
|
idamnjanovic@1
|
36 % Every call to SMALL_solve function will generate following output:
|
idamnjanovic@1
|
37 %
|
idamnjanovic@1
|
38 % SMALL.solver.solution - contains solution vector x
|
idamnjanovic@1
|
39 % SMALL.solver.reconstructed - vector containing signal reconstructed
|
idamnjanovic@1
|
40 % from the solution
|
idamnjanovic@1
|
41 % SMALL.solver.time - time that solver spent to find the solution
|
idamnjanovic@1
|
42 %
|
idamnjanovic@1
|
43 % SMALL_plot function plots the SMALL.solver.solution and reconstructed
|
idamnjanovic@1
|
44 % sources against original audio sources.
|
idamnjanovic@1
|
45 % SMALL_playAudio function plays audio sources of original and
|
idamnjanovic@1
|
46 % reconstructed signal as well as mixed signal.
|
idamnjanovic@1
|
47 %
|
idamnjanovic@1
|
48 %
|
idamnjanovic@25
|
49 %%
|
idamnjanovic@1
|
50
|
idamnjanovic@1
|
51 fprintf('\n\nExample test of solvers on Sparco Audio problems (401,402).\n\n');
|
idamnjanovic@1
|
52
|
idamnjanovic@1
|
53 %%
|
idamnjanovic@1
|
54 % Generate SPARCO problem
|
idamnjanovic@1
|
55
|
idamnjanovic@1
|
56 global SMALL
|
idamnjanovic@1
|
57 SMALL.Problem = generateProblem(402,'show');
|
idamnjanovic@1
|
58 %%
|
idamnjanovic@1
|
59
|
idamnjanovic@5
|
60 i=1;
|
idamnjanovic@1
|
61 %%
|
idamnjanovic@1
|
62 % SMALL Conjugate Gradient test
|
idamnjanovic@1
|
63
|
idamnjanovic@5
|
64 SMALL.solver(i)=SMALL_init_solver;
|
idamnjanovic@5
|
65 SMALL.solver(i).toolbox='SMALL';
|
idamnjanovic@5
|
66 SMALL.solver(i).name='SMALL_cgp';
|
idamnjanovic@1
|
67
|
idamnjanovic@1
|
68 % In the following string all parameters except matrix, measurement vector
|
idamnjanovic@1
|
69 % and size of solution need to be specified. If you are not sure which
|
idamnjanovic@1
|
70 % parameters are needed for particular solver type "help <Solver name>" in
|
idamnjanovic@1
|
71 % MATLAB command line
|
idamnjanovic@1
|
72
|
idamnjanovic@5
|
73 SMALL.solver(i).param='1500, 1e-14';
|
idamnjanovic@1
|
74
|
idamnjanovic@5
|
75 SMALL.solver(i)=SMALL_solve(SMALL.Problem, SMALL.solver(i));
|
idamnjanovic@1
|
76
|
idamnjanovic@1
|
77
|
idamnjanovic@5
|
78 i=i+1;
|
idamnjanovic@1
|
79 %%
|
idamnjanovic@1
|
80 % SolveOMP from SparseLab test
|
idamnjanovic@1
|
81
|
idamnjanovic@5
|
82 SMALL.solver(i)=SMALL_init_solver;
|
idamnjanovic@5
|
83 SMALL.solver(i).toolbox='SparseLab';
|
idamnjanovic@5
|
84 SMALL.solver(i).name='SolveBP';
|
idamnjanovic@1
|
85
|
idamnjanovic@1
|
86 % In the following string all parameters except matrix, measurement vector
|
idamnjanovic@1
|
87 % and size of solution need to be specified. If you are not sure which
|
idamnjanovic@1
|
88 % parameters are needed for particular solver type "help <Solver name>" in
|
idamnjanovic@1
|
89 % MATLAB command line
|
idamnjanovic@1
|
90
|
idamnjanovic@5
|
91 SMALL.solver(i).param='10';
|
idamnjanovic@1
|
92
|
idamnjanovic@5
|
93 SMALL.solver(i)=SMALL_solve(SMALL.Problem, SMALL.solver(i));
|
idamnjanovic@1
|
94
|
idamnjanovic@1
|
95 SMALL_plot(SMALL);
|
idamnjanovic@1
|
96 SMALL_playAudio(SMALL);
|
idamnjanovic@1
|
97 %%
|
idamnjanovic@1
|
98
|
idamnjanovic@1
|
99
|
idamnjanovic@1
|
100 end % function SMALL_solver_test
|