makesig.m
上传用户:speoil
上传日期:2022-06-23
资源大小:224k
文件大小:7k
源码类别:

波变换

开发平台:

Matlab

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