annotate util/Rice Wavelet Toolbox/makesig.m @ 162:88578ec2f94a danieleb

Updated grassmannian function and minor debugs
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Wed, 31 Aug 2011 13:52:23 +0100
parents f69ae88b8be5
children
rev   line source
ivan@78 1 function [x,N] = makesig(SigName,N)
ivan@78 2 % [x,N] = makesig(SigName,N) Creates artificial test signal identical to the
ivan@78 3 % standard test signals proposed and used by D. Donoho and I. Johnstone
ivan@78 4 % in WaveLab (- a matlab toolbox developed by Donoho et al. the statistics
ivan@78 5 % department at Stanford University).
ivan@78 6 %
ivan@78 7 % Input: SigName - Name of the desired signal (Default 'all')
ivan@78 8 % 'AllSig' (Returns a matrix with all the signals)
ivan@78 9 % 'HeaviSine'
ivan@78 10 % 'Bumps'
ivan@78 11 % 'Blocks'
ivan@78 12 % 'Doppler'
ivan@78 13 % 'Ramp'
ivan@78 14 % 'Cusp'
ivan@78 15 % 'Sing'
ivan@78 16 % 'HiSine'
ivan@78 17 % 'LoSine'
ivan@78 18 % 'LinChirp'
ivan@78 19 % 'TwoChirp'
ivan@78 20 % 'QuadChirp'
ivan@78 21 % 'MishMash'
ivan@78 22 % 'Werner Sorrows' (Heisenberg)
ivan@78 23 % 'Leopold' (Kronecker)
ivan@78 24 % N - Length in samples of the desired signal (Default 512)
ivan@78 25 %
ivan@78 26 % Output: x - vector/matrix of test signals
ivan@78 27 % N - length of signal returned
ivan@78 28 %
ivan@78 29 % See also:
ivan@78 30 %
ivan@78 31 % References:
ivan@78 32 % WaveLab can be accessed at
ivan@78 33 % www_url: http://playfair.stanford.edu/~wavelab/
ivan@78 34 % Also see various articles by D.L. Donoho et al. at
ivan@78 35 % web_url: http://playfair.stanford.edu/
ivan@78 36
ivan@78 37 %File Name: makesig.m
ivan@78 38 %Last Modification Date: 08/30/95 15:52:03
ivan@78 39 %Current Version: makesig.m 2.4
ivan@78 40 %File Creation Date: Thu Jun 8 10:31:11 1995
ivan@78 41 %Author: Jan Erik Odegard <odegard@ece.rice.edu>
ivan@78 42 %
ivan@78 43 %Copyright (c) 2000 RICE UNIVERSITY. All rights reserved.
ivan@78 44 %Created by Jan Erik Odegard, Department of ECE, Rice University.
ivan@78 45 %
ivan@78 46 %This software is distributed and licensed to you on a non-exclusive
ivan@78 47 %basis, free-of-charge. Redistribution and use in source and binary forms,
ivan@78 48 %with or without modification, are permitted provided that the following
ivan@78 49 %conditions are met:
ivan@78 50 %
ivan@78 51 %1. Redistribution of source code must retain the above copyright notice,
ivan@78 52 % this list of conditions and the following disclaimer.
ivan@78 53 %2. Redistribution in binary form must reproduce the above copyright notice,
ivan@78 54 % this list of conditions and the following disclaimer in the
ivan@78 55 % documentation and/or other materials provided with the distribution.
ivan@78 56 %3. All advertising materials mentioning features or use of this software
ivan@78 57 % must display the following acknowledgment: This product includes
ivan@78 58 % software developed by Rice University, Houston, Texas and its contributors.
ivan@78 59 %4. Neither the name of the University nor the names of its contributors
ivan@78 60 % may be used to endorse or promote products derived from this software
ivan@78 61 % without specific prior written permission.
ivan@78 62 %
ivan@78 63 %THIS SOFTWARE IS PROVIDED BY WILLIAM MARSH RICE UNIVERSITY, HOUSTON, TEXAS,
ivan@78 64 %AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
ivan@78 65 %BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
ivan@78 66 %FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RICE UNIVERSITY
ivan@78 67 %OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
ivan@78 68 %EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
ivan@78 69 %PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
ivan@78 70 %OR BUSINESS INTERRUPTIONS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
ivan@78 71 %WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
ivan@78 72 %OTHERWISE), PRODUCT LIABILITY, OR OTHERWISE ARISING IN ANY WAY OUT OF THE
ivan@78 73 %USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ivan@78 74 %
ivan@78 75 %For information on commercial licenses, contact Rice University's Office of
ivan@78 76 %Technology Transfer at techtran@rice.edu or (713) 348-6173
ivan@78 77 %
ivan@78 78 %Change History: This m-file is a copy of the code provided with WaveLab
ivan@78 79 % customized to be consistent with RWT.
ivan@78 80 % Jan Erik Odegard <odegard@ece.rice.edu> Thu Jun 8 1995
ivan@78 81 %
ivan@78 82
ivan@78 83 if(nargin < 1)
ivan@78 84 SigName = 'AllSig';
ivan@78 85 N = 512;
ivan@78 86 elseif(nargin == 1)
ivan@78 87 N = 512;
ivan@78 88 end;
ivan@78 89 t = (1:N) ./N;
ivan@78 90 x = [];
ivan@78 91 y = [];
ivan@78 92 if(strcmp(SigName,'HeaviSine') | strcmp(SigName,'AllSig')),
ivan@78 93 y = 4.*sin(4*pi.*t);
ivan@78 94 y = y - sign(t - .3) - sign(.72 - t);
ivan@78 95 end;
ivan@78 96 x = [x;y];
ivan@78 97 y = [];
ivan@78 98 if(strcmp(SigName,'Bumps') | strcmp(SigName,'AllSig')),
ivan@78 99 pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
ivan@78 100 hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2];
ivan@78 101 wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005];
ivan@78 102 y = zeros(size(t));
ivan@78 103 for j =1:length(pos)
ivan@78 104 y = y + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4;
ivan@78 105 end
ivan@78 106 end;
ivan@78 107 x = [x;y];
ivan@78 108 y = [];
ivan@78 109 if(strcmp(SigName,'Blocks') | strcmp(SigName,'AllSig')),
ivan@78 110 pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
ivan@78 111 hgt = [4 (-5) 3 (-4) 5 (-4.2) 2.1 4.3 (-3.1) 2.1 (-4.2)];
ivan@78 112 y = zeros(size(t));
ivan@78 113 for j=1:length(pos)
ivan@78 114 y = y + (1 + sign(t-pos(j))).*(hgt(j)/2) ;
ivan@78 115 end
ivan@78 116 end;
ivan@78 117 x = [x;y];
ivan@78 118 y = [];
ivan@78 119 if(strcmp(SigName,'Doppler') | strcmp(SigName,'AllSig')),
ivan@78 120 y = sqrt(t.*(1-t)).*sin((2*pi*1.05) ./(t+.05));
ivan@78 121 end;
ivan@78 122 x = [x;y];
ivan@78 123 y = [];
ivan@78 124 if(strcmp(SigName,'Ramp') | strcmp(SigName,'AllSig')),
ivan@78 125 y = t - (t >= .37);
ivan@78 126 end;
ivan@78 127 x = [x;y];
ivan@78 128 y = [];
ivan@78 129 if(strcmp(SigName,'Cusp') | strcmp(SigName,'AllSig')),
ivan@78 130 y = sqrt(abs(t - .37));
ivan@78 131 end;
ivan@78 132 x = [x;y];
ivan@78 133 y = [];
ivan@78 134 if(strcmp(SigName,'Sing') | strcmp(SigName,'AllSig')),
ivan@78 135 k = floor(N * .37);
ivan@78 136 y = 1 ./abs(t - (k+.5)/N);
ivan@78 137 end;
ivan@78 138 x = [x;y];
ivan@78 139 y = [];
ivan@78 140 if(strcmp(SigName,'HiSine') | strcmp(SigName,'AllSig')),
ivan@78 141 y = sin( pi * (N * .6902) .* t);
ivan@78 142 end;
ivan@78 143 x = [x;y];
ivan@78 144 y = [];
ivan@78 145 if(strcmp(SigName,'LoSine') | strcmp(SigName,'AllSig')),
ivan@78 146 y = sin( pi * (N * .3333) .* t);
ivan@78 147 end;
ivan@78 148 x = [x;y];
ivan@78 149 y = [];
ivan@78 150 if(strcmp(SigName,'LinChirp') | strcmp(SigName,'AllSig')),
ivan@78 151 y = sin(pi .* t .* ((N .* .125) .* t));
ivan@78 152 end;
ivan@78 153 x = [x;y];
ivan@78 154 y = [];
ivan@78 155 if(strcmp(SigName,'TwoChirp') | strcmp(SigName,'AllSig')),
ivan@78 156 y = sin(pi .* t .* (N .* t)) + sin((pi/3) .* t .* (N .* t));
ivan@78 157 end;
ivan@78 158 x = [x;y];
ivan@78 159 y = [];
ivan@78 160 if(strcmp(SigName,'QuadChirp') | strcmp(SigName,'AllSig')),
ivan@78 161 y = sin( (pi/3) .* t .* (N .* t.^2));
ivan@78 162 end;
ivan@78 163 x = [x;y];
ivan@78 164 y = [];
ivan@78 165 if(strcmp(SigName,'MishMash') | strcmp(SigName,'AllSig')),
ivan@78 166 % QuadChirp + LinChirp + HiSine
ivan@78 167 y = sin( (pi/3) .* t .* (N .* t.^2)) ;
ivan@78 168 y = y + sin( pi * (N * .6902) .* t);
ivan@78 169 y = y + sin(pi .* t .* (N .* .125 .* t));
ivan@78 170 end;
ivan@78 171 x = [x;y];
ivan@78 172 y = [];
ivan@78 173 if(strcmp(SigName,'WernerSorrows') | strcmp(SigName,'AllSig')),
ivan@78 174 y = sin( pi .* t .* (N/2 .* t.^2)) ;
ivan@78 175 y = y + sin( pi * (N * .6902) .* t);
ivan@78 176 y = y + sin(pi .* t .* (N .* t));
ivan@78 177 pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
ivan@78 178 hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2];
ivan@78 179 wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005];
ivan@78 180 for j =1:length(pos)
ivan@78 181 y = y + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4;
ivan@78 182 end
ivan@78 183 end;
ivan@78 184 x = [x;y];
ivan@78 185 y = [];
ivan@78 186 if(strcmp(SigName,'Leopold') | strcmp(SigName,'AllSig')),
ivan@78 187 y = (t == floor(.37 * N)/N); % Kronecker
ivan@78 188 end;
ivan@78 189 x = [x;y];
ivan@78 190 y = [];
ivan@78 191
ivan@78 192 % disp(sprintf('MakeSignal: I don*t recognize << %s>>',SigName))
ivan@78 193 % disp('Allowable SigNames are:')
ivan@78 194 % disp('AllSig'),
ivan@78 195 % disp('HeaviSine'),
ivan@78 196 % disp('Bumps'),
ivan@78 197 % disp('Blocks'),
ivan@78 198 % disp('Doppler'),
ivan@78 199 % disp('Ramp'),
ivan@78 200 % disp('Cusp'),
ivan@78 201 % disp('Crease'),
ivan@78 202 % disp('Sing'),
ivan@78 203 % disp('HiSine'),
ivan@78 204 % disp('LoSine'),
ivan@78 205 % disp('LinChirp'),
ivan@78 206 % disp('TwoChirp'),
ivan@78 207 % disp('QuadChirp'),
ivan@78 208 % disp('MishMash'),
ivan@78 209 % disp('WernerSorrows'),
ivan@78 210 % disp('Leopold'),
ivan@78 211 %end