ivan@78: function [x,N] = makesig(SigName,N) ivan@78: % [x,N] = makesig(SigName,N) Creates artificial test signal identical to the ivan@78: % standard test signals proposed and used by D. Donoho and I. Johnstone ivan@78: % in WaveLab (- a matlab toolbox developed by Donoho et al. the statistics ivan@78: % department at Stanford University). ivan@78: % ivan@78: % Input: SigName - Name of the desired signal (Default 'all') ivan@78: % 'AllSig' (Returns a matrix with all the signals) ivan@78: % 'HeaviSine' ivan@78: % 'Bumps' ivan@78: % 'Blocks' ivan@78: % 'Doppler' ivan@78: % 'Ramp' ivan@78: % 'Cusp' ivan@78: % 'Sing' ivan@78: % 'HiSine' ivan@78: % 'LoSine' ivan@78: % 'LinChirp' ivan@78: % 'TwoChirp' ivan@78: % 'QuadChirp' ivan@78: % 'MishMash' ivan@78: % 'Werner Sorrows' (Heisenberg) ivan@78: % 'Leopold' (Kronecker) ivan@78: % N - Length in samples of the desired signal (Default 512) ivan@78: % ivan@78: % Output: x - vector/matrix of test signals ivan@78: % N - length of signal returned ivan@78: % ivan@78: % See also: ivan@78: % ivan@78: % References: ivan@78: % WaveLab can be accessed at ivan@78: % www_url: http://playfair.stanford.edu/~wavelab/ ivan@78: % Also see various articles by D.L. Donoho et al. at ivan@78: % web_url: http://playfair.stanford.edu/ ivan@78: ivan@78: %File Name: makesig.m ivan@78: %Last Modification Date: 08/30/95 15:52:03 ivan@78: %Current Version: makesig.m 2.4 ivan@78: %File Creation Date: Thu Jun 8 10:31:11 1995 ivan@78: %Author: Jan Erik Odegard ivan@78: % ivan@78: %Copyright (c) 2000 RICE UNIVERSITY. All rights reserved. ivan@78: %Created by Jan Erik Odegard, Department of ECE, Rice University. ivan@78: % ivan@78: %This software is distributed and licensed to you on a non-exclusive ivan@78: %basis, free-of-charge. Redistribution and use in source and binary forms, ivan@78: %with or without modification, are permitted provided that the following ivan@78: %conditions are met: ivan@78: % ivan@78: %1. Redistribution of source code must retain the above copyright notice, ivan@78: % this list of conditions and the following disclaimer. ivan@78: %2. Redistribution in binary form must reproduce the above copyright notice, ivan@78: % this list of conditions and the following disclaimer in the ivan@78: % documentation and/or other materials provided with the distribution. ivan@78: %3. All advertising materials mentioning features or use of this software ivan@78: % must display the following acknowledgment: This product includes ivan@78: % software developed by Rice University, Houston, Texas and its contributors. ivan@78: %4. Neither the name of the University nor the names of its contributors ivan@78: % may be used to endorse or promote products derived from this software ivan@78: % without specific prior written permission. ivan@78: % ivan@78: %THIS SOFTWARE IS PROVIDED BY WILLIAM MARSH RICE UNIVERSITY, HOUSTON, TEXAS, ivan@78: %AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, ivan@78: %BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ivan@78: %FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RICE UNIVERSITY ivan@78: %OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ivan@78: %EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ivan@78: %PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ivan@78: %OR BUSINESS INTERRUPTIONS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ivan@78: %WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR ivan@78: %OTHERWISE), PRODUCT LIABILITY, OR OTHERWISE ARISING IN ANY WAY OUT OF THE ivan@78: %USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ivan@78: % ivan@78: %For information on commercial licenses, contact Rice University's Office of ivan@78: %Technology Transfer at techtran@rice.edu or (713) 348-6173 ivan@78: % ivan@78: %Change History: This m-file is a copy of the code provided with WaveLab ivan@78: % customized to be consistent with RWT. ivan@78: % Jan Erik Odegard Thu Jun 8 1995 ivan@78: % ivan@78: ivan@78: if(nargin < 1) ivan@78: SigName = 'AllSig'; ivan@78: N = 512; ivan@78: elseif(nargin == 1) ivan@78: N = 512; ivan@78: end; ivan@78: t = (1:N) ./N; ivan@78: x = []; ivan@78: y = []; ivan@78: if(strcmp(SigName,'HeaviSine') | strcmp(SigName,'AllSig')), ivan@78: y = 4.*sin(4*pi.*t); ivan@78: y = y - sign(t - .3) - sign(.72 - t); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'Bumps') | strcmp(SigName,'AllSig')), ivan@78: pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81]; ivan@78: hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2]; ivan@78: wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005]; ivan@78: y = zeros(size(t)); ivan@78: for j =1:length(pos) ivan@78: y = y + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4; ivan@78: end ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'Blocks') | strcmp(SigName,'AllSig')), ivan@78: pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81]; ivan@78: hgt = [4 (-5) 3 (-4) 5 (-4.2) 2.1 4.3 (-3.1) 2.1 (-4.2)]; ivan@78: y = zeros(size(t)); ivan@78: for j=1:length(pos) ivan@78: y = y + (1 + sign(t-pos(j))).*(hgt(j)/2) ; ivan@78: end ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'Doppler') | strcmp(SigName,'AllSig')), ivan@78: y = sqrt(t.*(1-t)).*sin((2*pi*1.05) ./(t+.05)); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'Ramp') | strcmp(SigName,'AllSig')), ivan@78: y = t - (t >= .37); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'Cusp') | strcmp(SigName,'AllSig')), ivan@78: y = sqrt(abs(t - .37)); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'Sing') | strcmp(SigName,'AllSig')), ivan@78: k = floor(N * .37); ivan@78: y = 1 ./abs(t - (k+.5)/N); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'HiSine') | strcmp(SigName,'AllSig')), ivan@78: y = sin( pi * (N * .6902) .* t); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'LoSine') | strcmp(SigName,'AllSig')), ivan@78: y = sin( pi * (N * .3333) .* t); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'LinChirp') | strcmp(SigName,'AllSig')), ivan@78: y = sin(pi .* t .* ((N .* .125) .* t)); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'TwoChirp') | strcmp(SigName,'AllSig')), ivan@78: y = sin(pi .* t .* (N .* t)) + sin((pi/3) .* t .* (N .* t)); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'QuadChirp') | strcmp(SigName,'AllSig')), ivan@78: y = sin( (pi/3) .* t .* (N .* t.^2)); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'MishMash') | strcmp(SigName,'AllSig')), ivan@78: % QuadChirp + LinChirp + HiSine ivan@78: y = sin( (pi/3) .* t .* (N .* t.^2)) ; ivan@78: y = y + sin( pi * (N * .6902) .* t); ivan@78: y = y + sin(pi .* t .* (N .* .125 .* t)); ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'WernerSorrows') | strcmp(SigName,'AllSig')), ivan@78: y = sin( pi .* t .* (N/2 .* t.^2)) ; ivan@78: y = y + sin( pi * (N * .6902) .* t); ivan@78: y = y + sin(pi .* t .* (N .* t)); ivan@78: pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81]; ivan@78: hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2]; ivan@78: wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005]; ivan@78: for j =1:length(pos) ivan@78: y = y + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4; ivan@78: end ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: if(strcmp(SigName,'Leopold') | strcmp(SigName,'AllSig')), ivan@78: y = (t == floor(.37 * N)/N); % Kronecker ivan@78: end; ivan@78: x = [x;y]; ivan@78: y = []; ivan@78: ivan@78: % disp(sprintf('MakeSignal: I don*t recognize << %s>>',SigName)) ivan@78: % disp('Allowable SigNames are:') ivan@78: % disp('AllSig'), ivan@78: % disp('HeaviSine'), ivan@78: % disp('Bumps'), ivan@78: % disp('Blocks'), ivan@78: % disp('Doppler'), ivan@78: % disp('Ramp'), ivan@78: % disp('Cusp'), ivan@78: % disp('Crease'), ivan@78: % disp('Sing'), ivan@78: % disp('HiSine'), ivan@78: % disp('LoSine'), ivan@78: % disp('LinChirp'), ivan@78: % disp('TwoChirp'), ivan@78: % disp('QuadChirp'), ivan@78: % disp('MishMash'), ivan@78: % disp('WernerSorrows'), ivan@78: % disp('Leopold'), ivan@78: %end