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