0001 function sig = MakeSignal(Name,n)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 if nargin > 1,
0022 t = (1:n) ./n;
0023 end
0024 if strcmp(Name,'HeaviSine'),
0025 sig = 4.*sin(4*pi.*t);
0026 sig = sig - sign(t - .3) - sign(.72 - t);
0027 elseif strcmp(Name,'Bumps'),
0028 pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
0029 hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2];
0030 wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005];
0031 sig = zeros(size(t));
0032 for j =1:length(pos)
0033 sig = sig + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4;
0034 end
0035 elseif strcmp(Name,'Blocks'),
0036 pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
0037 hgt = [4 (-5) 3 (-4) 5 (-4.2) 2.1 4.3 (-3.1) 2.1 (-4.2)];
0038 sig = zeros(size(t));
0039 for j=1:length(pos)
0040 sig = sig + (1 + sign(t-pos(j))).*(hgt(j)/2) ;
0041 end
0042 elseif strcmp(Name,'Doppler'),
0043 sig = sqrt(t.*(1-t)).*sin((2*pi*1.05) ./(t+.05));
0044 elseif strcmp(Name,'Ramp'),
0045 sig = t - (t >= .37);
0046 elseif strcmp(Name,'Cusp'),
0047 sig = sqrt(abs(t - .37));
0048 elseif strcmp(Name,'Sing'),
0049 k = floor(n * .37);
0050 sig = 1 ./abs(t - (k+.5)/n);
0051 elseif strcmp(Name,'HiSine'),
0052 sig = sin( pi * (n * .6902) .* t);
0053 elseif strcmp(Name,'LoSine'),
0054 sig = sin( pi * (n * .3333) .* t);
0055 elseif strcmp(Name,'LinChirp'),
0056
0057
0058
0059 sig = sin(pi .* t .* ((n .* .500) .* t));
0060 elseif strcmp(Name,'TwoChirp'),
0061 sig = sin(pi .* t .* (n .* t)) + sin((pi/3) .* t .* (n .* t));
0062 elseif strcmp(Name,'QuadChirp'),
0063 sig = sin( (pi/3) .* t .* (n .* t.^2));
0064 elseif strcmp(Name,'MishMash'),
0065 sig = sin( (pi/3) .* t .* (n .* t.^2)) ;
0066 sig = sig + sin( pi * (n * .6902) .* t);
0067 sig = sig + sin(pi .* t .* (n .* .125 .* t));
0068 elseif strcmp(Name,'WernerSorrows'),
0069 sig = sin( pi .* t .* (n/2 .* t.^2)) ;
0070 sig = sig + sin( pi * (n * .6902) .* t);
0071 sig = sig + sin(pi .* t .* (n .* t));
0072 pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
0073 hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2];
0074 wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005];
0075 for j =1:length(pos)
0076 sig = sig + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4;
0077 end
0078 elseif strcmp(Name,'Leopold'),
0079 sig = (t == floor(.37 * n)/n);
0080 elseif strcmp(Name,'Riemann'),
0081 sqn = round(sqrt(n));
0082 sig = t .* 0;
0083 sig((1:sqn).^2) = 1. ./ (1:sqn);
0084 sig = real(ifft(sig));
0085 elseif strcmp(Name,'HypChirps'),
0086 alpha = 15*n*pi/1024;
0087 beta = 5*n*pi/1024;
0088 t = (1.001:1:n+.001)./n;
0089 f1 = zeros(1,n);
0090 f2 = zeros(1,n);
0091 f1 = sin(alpha./(.8-t)).*(0.1<t).*(t<0.68);
0092 f2 = sin(beta./(.8-t)).*(0.1<t).*(t<0.75);
0093 M = round(0.65*n);
0094 P = floor(M/4);
0095 enveloppe = ones(1,M);
0096 enveloppe(1:P) = (1+sin(-pi/2+((1:P)-ones(1,P))./(P-1)*pi))/2;
0097 enveloppe(M-P+1:M) = fliplr(enveloppe(1:P));
0098 env = zeros(1,n);
0099 env(ceil(n/10):M+ceil(n/10)-1) = enveloppe(1:M);
0100 sig = (f1+f2).*env;
0101 elseif strcmp(Name,'LinChirps'),
0102 b = 100*n*pi/1024;
0103 a = 250*n*pi/1024;
0104 t = (1:n)./n;
0105 A1 = sqrt((t-1/n).*(1-t));
0106 sig = A1.*(cos((a*(t).^2)) + cos((b*t+a*(t).^2)));
0107 elseif strcmp(Name,'Chirps'),
0108 t = (1:n)./n.*10.*pi;
0109 f1 = cos(t.^2*n/1024);
0110 a = 30*n/1024;
0111 t = (1:n)./n.*pi;
0112 f2 = cos(a.*(t.^3));
0113 f2 = fliplr(f2);
0114 ix = (-n:n)./n.*20;
0115 g = exp(-ix.^2*4*n/1024);
0116 i1 = (n/2+1:n/2+n);
0117 i2 = (n/8+1:n/8+n);
0118 j = (1:n)/n;
0119 f3 = g(i1).*cos(50.*pi.*j*n/1024);
0120 f4 = g(i2).*cos(350.*pi.*j*n/1024);
0121 sig = f1+f2+f3+f4;
0122 enveloppe = ones(1,n);
0123 enveloppe(1:n/8) = (1+sin(-pi/2+((1:n/8)-ones(1,n/8))./(n/8-1)*pi))/2;
0124 enveloppe(7*n/8+1:n) = fliplr(enveloppe(1:n/8));
0125 sig = sig.*enveloppe;
0126 elseif strcmp(Name,'Gabor'),
0127
0128 N = 512;
0129 t = (-N:N)*5/N;
0130 j = (1:N)./N;
0131 g = exp(-t.^2*20);
0132 i1 = (2*N/4+1:2*N/4+N);
0133 i2 = (N/4+1:N/4+N);
0134 sig1 = 3*g(i1).*exp(i*N/16.*pi.*j);
0135 sig2 = 3*g(i2).*exp(i*N/4.*pi.*j);
0136 sig = sig1+sig2;
0137 elseif strcmp(Name,'sineoneoverx'),
0138 N = 1024;
0139 i1 = (-N+1:N);
0140 i1(N) = 1/100;
0141 i1 = i1./(N-1);
0142 sig = sin(1.5./(i1));
0143 sig = sig(513:1536);
0144 elseif strcmp(Name,'Cusp2'),
0145 N = 64;
0146 i1 = (1:N)./N;
0147 x = (1-sqrt(i1)) + i1/2 -.5;
0148 M = 8*N;
0149 sig = zeros(1,M);
0150 sig(M-1.5.*N+1:M-.5*N) = x;
0151 sig(M-2.5*N+2:M-1.5.*N+1) = fliplr(x);
0152 sig(3*N+1:3*N + N) = .5*ones(1,N);
0153 elseif strcmp(Name,'SmoothCusp'),
0154 sig = MakeSignal('Cusp2');
0155 N = 64;
0156 M = 8*N;
0157 t = (1:M)/M;
0158 sigma = 0.01;
0159 g = exp(-.5.*(abs(t-.5)./sigma).^2)./sigma./sqrt(2*pi);
0160 g = fftshift(g);
0161 sig2 = iconv(g',sig)'/M;
0162 elseif strcmp(Name,'Piece-Regular'),
0163 sig1=-15*MakeSignal('Bumps',n);
0164 t = (1:fix(n/12)) ./fix(n/12);
0165 sig2=-exp(4*t);
0166 t = (1:fix(n/7)) ./fix(n/7);
0167 sig5=exp(4*t)-exp(4);
0168 t = (1:fix(n/3)) ./fix(n/3);
0169 sigma=6/40;
0170 sig6=-70*exp(-((t-1/2).*(t-1/2))/(2*sigma^2));
0171 sig(1:fix(n/7))= sig6(1:fix(n/7));
0172 sig((fix(n/7)+1):fix(n/5))=0.5*sig6((fix(n/7)+1):fix(n/5));
0173 sig((fix(n/5)+1):fix(n/3))=sig6((fix(n/5)+1):fix(n/3));
0174 sig((fix(n/3)+1):fix(n/2))=sig1((fix(n/3)+1):fix(n/2));
0175 sig((fix(n/2)+1):(fix(n/2)+fix(n/12)))=sig2;
0176 sig((fix(n/2)+2*fix(n/12)):-1:(fix(n/2)+fix(n/12)+1))=sig2;
0177 sig(fix(n/2)+2*fix(n/12)+fix(n/20)+1:(fix(n/2)+2*fix(n/12)+3*fix(n/20)))=...
0178 -ones(1,fix(n/2)+2*fix(n/12)+3*fix(n/20)-fix(n/2)-2*fix(n/12)-fix(n/20))*25;
0179 k=fix(n/2)+2*fix(n/12)+3*fix(n/20);
0180 sig((k+1):(k+fix(n/7)))=sig5;
0181 diff=n-5*fix(n/5);
0182 sig(5*fix(n/5)+1:n)=sig(diff:-1:1);
0183
0184 bias=sum(sig)/n;
0185 sig=bias-sig;
0186 elseif strcmp(Name,'Piece-Polynomial'),
0187 t = (1:fix(n/5)) ./fix(n/5);
0188 sig1=20*(t.^3+t.^2+4);
0189 sig3=40*(2.*t.^3+t) + 100;
0190 sig2=10.*t.^3 + 45;
0191 sig4=16*t.^2+8.*t+16;
0192 sig5=20*(t+4);
0193 sig6(1:fix(n/10))=ones(1,fix(n/10));
0194 sig6=sig6*20;
0195 sig(1:fix(n/5))=sig1;
0196 sig(2*fix(n/5):-1:(fix(n/5)+1))=sig2;
0197 sig((2*fix(n/5)+1):3*fix(n/5))=sig3;
0198 sig((3*fix(n/5)+1):4*fix(n/5))=sig4;
0199 sig((4*fix(n/5)+1):5*fix(n/5))=sig5(fix(n/5):-1:1);
0200 diff=n-5*fix(n/5);
0201 sig(5*fix(n/5)+1:n)=sig(diff:-1:1);
0202
0203 sig((fix(n/20)+1):(fix(n/20)+fix(n/10)))=ones(1,fix(n/10))*10;
0204 sig((n-fix(n/10)+1):(n+fix(n/20)-fix(n/10)))=ones(1,fix(n/20))*150;
0205
0206 bias=sum(sig)/n;
0207 sig=sig-bias;
0208 elseif strcmp(Name,'Gaussian'),
0209 sig=GWN(n,beta);
0210 g=zeros(1,n);
0211 lim=alpha*n;
0212 mult=pi/(2*alpha*n);
0213 g(1:lim)=(cos(mult*(1:lim))).^2;
0214 g((n/2+1):n)=g((n/2):-1:1);
0215 g = rnshift(g,n/2);
0216 g=g/norm(g);
0217 sig=iconv(g,sig);
0218 else
0219 disp(sprintf('MakeSignal: I don*t recognize <<%s>>',Name))
0220 disp('Allowable Names are:')
0221 disp('HeaviSine'),
0222 disp('Bumps'),
0223 disp('Blocks'),
0224 disp('Doppler'),
0225 disp('Ramp'),
0226 disp('Cusp'),
0227 disp('Crease'),
0228 disp('Sing'),
0229 disp('HiSine'),
0230 disp('LoSine'),
0231 disp('LinChirp'),
0232 disp('TwoChirp'),
0233 disp('QuadChirp'),
0234 disp('MishMash'),
0235 disp('WernerSorrows'),
0236 disp('Leopold'),
0237 disp('Sing'),
0238 disp('HiSine'),
0239 disp('LoSine'),
0240 disp('LinChirp'),
0241 disp('TwoChirp'),
0242 disp('QuadChirp'),
0243 disp('MishMash'),
0244 disp('WernerSorrows'),
0245 disp('Leopold'),
0246 disp('Riemann'),
0247 disp('HypChirps'),
0248 disp('LinChirps'),
0249 disp('Chirps'),
0250 disp('sineoneoverx'),
0251 disp('Cusp2'),
0252 disp('SmoothCusp'),
0253 disp('Gabor'),
0254 disp('Piece-Regular');
0255 disp('Piece-Polynomial');
0256 disp('Gaussian');
0257 end
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270