0001 function [x varargout] = genSignal(N,in)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041 t = (1:N)./N;
0042 if isfield(in,'randgen'); randgen = in.randgen; else randgen = 0; end
0043 if isfield(in,'take_fwt'); take_fwt = in.take_fwt; else take_fwt = 0; end
0044
0045 wave_struct = [];
0046 sig = [];
0047
0048 sType = in.type;
0049
0050 switch lower(sType)
0051 case 'randn'
0052 T = in.T;
0053 q = randperm(N);
0054 x = zeros(N,1);
0055 x(q(1:T)) = randn(T,1);
0056 sig = x;
0057
0058 case 'sign'
0059 T = in.T;
0060 q = randperm(N);
0061 x = zeros(N,1);
0062 x(q(1:T)) = sign(randn(T,1));
0063 sig = x;
0064
0065 case 'ones'
0066 T = in.T;
0067 q = randperm(N);
0068 x = zeros(N,1);
0069 x(q(1:T)) = ones(T,1);
0070 sig = x;
0071
0072 case 'highd'
0073 T = in.T;
0074 q = randperm(N);
0075 x = zeros(N,1);
0076 x(q(1:ceil(T/2))) = sign(randn(ceil(T/2),1));
0077 x(q(ceil(T/2)+1:T)) = sign(randn(T-ceil(T/2),1))./1e2;
0078 sig = x;
0079
0080
0081
0082
0083 case 'blocks'
0084 if randgen == 0
0085 pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
0086 hgt = [4 (-5) 3 (-4) 5 (-4.2) 2.1 4.3 (-3.1) 2.1 (-4.2)];
0087 else
0088 pos = sort(rand(1,11));
0089
0090 hgt = sign(randn(1,11)).*randi([1 5],1,11);
0091 end
0092 sig = zeros(size(t));
0093 for j=1:length(pos)
0094 sig = sig + (1 + sign(t-pos(j))).*(hgt(j)/2) ;
0095 end
0096 sig = sig(:);
0097 case 'bumps'
0098 if randgen == 0
0099 pos = [ .1 .13 .15 .23 .25 .40 .44 .65 .76 .78 .81];
0100 hgt = [ 4 5 3 4 5 4.2 2.1 4.3 3.1 5.1 4.2];
0101 wth = [.005 .005 .006 .01 .01 .03 .01 .01 .005 .008 .005];
0102 else
0103 pos = sort(rand(1,11));
0104 hgt = 4+sign(randn(1,11)).*rand(1,11);
0105 wth = rand(1,11)/100;
0106 end
0107 sig = zeros(size(t));
0108 for j =1:length(pos)
0109 sig = sig + hgt(j)./( 1 + abs((t - pos(j))./wth(j))).^4;
0110 end
0111 sig = sig(:);
0112
0113 case 'pcwpoly'
0114 n = N;
0115 if randgen == 0
0116 t = (1:fix(n/5)) ./fix(n/5);
0117 sig1=20*(t.^3+t.^2+4);
0118 sig3=40*(2.*t.^3+t) + 100;
0119 sig2=10.*t.^3 + 45;
0120 sig4=16*t.^2+8.*t+16;
0121 sig5=20*(t+4);
0122 sig6(1:fix(n/10))=ones(1,fix(n/10));
0123 sig6=sig6*20;
0124 sig(1:fix(n/5))=sig1;
0125 sig(2*fix(n/5):-1:(fix(n/5)+1))=sig2;
0126 sig((2*fix(n/5)+1):3*fix(n/5))=sig3;
0127 sig((3*fix(n/5)+1):4*fix(n/5))=sig4;
0128 sig((4*fix(n/5)+1):5*fix(n/5))=sig5(fix(n/5):-1:1);
0129 dif=n-5*fix(n/5);
0130 sig(5*fix(n/5)+1:n)=sig(dif:-1:1);
0131
0132 sig((fix(n/20)+1):(fix(n/20)+fix(n/10)))=ones(1,fix(n/10))*10;
0133 sig((n-fix(n/10)+1):(n+fix(n/20)-fix(n/10)))=ones(1,fix(n/20))*150;
0134
0135 bias=sum(sig)/n;
0136 sig=sig-bias;
0137 else
0138 t = (1:fix(n/5)) ./fix(n/5);
0139 sig1=20*(t.^3+t.^2+4)*(1+(randn*.1));
0140 sig3=40*(2.*t.^3+t)*(1+(randn*.1)) + 100*(1+(randn*.05));
0141 sig2=10.*t.^3*(1+(randn*.05)) + 45*(1+(randn*.1));
0142 sig4=16*t.^2+8.*t*(1+randn*.1)+16*(1+(randn*.05));
0143 sig5=20*(t+4)*(1+(randn*.1));
0144 sig6(1:fix(n/10))=ones(1,fix(n/10))*(1+(randn*.1));
0145 sig6=sig6*20*(1+(randn*.05));
0146 sig(1:fix(n/5))=sig1;
0147 sig(2*fix(n/5):-1:(fix(n/5)+1))=sig2;
0148 sig((2*fix(n/5)+1):3*fix(n/5))=sig3;
0149 sig((3*fix(n/5)+1):4*fix(n/5))=sig4;
0150 sig((4*fix(n/5)+1):5*fix(n/5))=sig5(fix(n/5):-1:1);
0151 dif=n-5*fix(n/5);
0152 sig(5*fix(n/5)+1:n)=sig(dif:-1:1);
0153
0154 sig((fix(n/20)+1):(fix(n/20)+fix(n/10)))=ones(1,fix(n/10))*10;
0155 sig((n-fix(n/10)+1):(n+fix(n/20)-fix(n/10)))=ones(1,fix(n/20))*150;
0156
0157 bias=sum(sig)/n;
0158 sig=sig-bias;
0159 end
0160 sig = sig(:);
0161
0162 case 'heavisine'
0163 if randgen == 0
0164 sig = 4.*sin(4*pi.*t);
0165 sig = sig - sign(t - .3) - sign(.72 - t);
0166 else
0167 sig = (1+rand*.5)*4.*sin(4*pi.*t*(1+rand*.25));
0168 sig = sig - sign(t - .3*(1+randn*.1)) - sign(.72*(1+randn*.1) - t)*(1+randn);
0169 end
0170 sig = sig(:);
0171
0172 case 'doppler'
0173 if randgen == 0
0174 sig = sqrt(t.*(1-t)).*sin((2*pi*1.05) ./(t+.05));
0175 else
0176 sig = (1+randn*.02)*sqrt(t.*(1-t)).*sin((2*pi*1.05*(1+randn*.02)) ./(t+.05*(1+randn*.02)));
0177 end
0178 sig = sig(:);
0179
0180 case 'cusp'
0181 if randgen == 0
0182 sig = sqrt(abs(t - .37));
0183 else
0184 sig = sqrt(abs(t - (1+0.1*rand)*.37));
0185 end
0186
0187 sig = sig(:);
0188
0189 case 'ramp'
0190 if randgen == 0
0191 sig = t - (t >= .37);
0192 else
0193 sig = (1+randn*.05)*t - (t >= .37*(1+randn*.02));
0194 end
0195 sig = sig(:);
0196
0197 case 'pcwreg'
0198 sig = MakeSignal('Piece-Regular',N);
0199
0200 sig = sig(:);
0201
0202 case 'cusp2'
0203 n = N/8;
0204 i1 = (1:n)./n;
0205 x = (1-sqrt(i1)) + i1/2 -.5;
0206 sig = zeros(1,N);
0207 sig(N-1.5*n+1:N-.5*n) = x;
0208 sig(N-2.5*n+2:N-1.5*n+1) = fliplr(x);
0209 sig(3*n+1:3*n + n) = .5*ones(1,n);
0210 sig = sig(:);
0211
0212 case 'sing'
0213 sig = MakeSignal('Sing',N);
0214
0215 sig = sig(:);
0216
0217
0218
0219
0220
0221 case lower('kalman-heavisine')
0222 Np = in.Np;
0223 t = (1:Np)./Np;
0224 N = Np*ceil(N/Np);
0225 sig = zeros(N,1);
0226
0227 randgen = 0;
0228 for p = 1:ceil(N/Np);
0229 sigt = zeros(Np,1);
0230 if randgen == 0
0231 sigt = 4.*sin(4*pi.*t);
0232 sigt = sigt - sign(t - .3) - sign(.72 - t);
0233 else
0234 sigt = (1+rand*.01)*4.*sin(4*pi.*t*(1+rand*.025));
0235 sigt = sigt - sign(t - .3*(1+randn*.01)) - sign(.72*(1+randn*.01) - t)*(1+randn*.02);
0236 end
0237 randgen = 1;
0238 sig((p-1)*Np+1:p*Np) = sigt;
0239 end
0240 sig = sig(:);
0241 case 'kalman-pcwpoly'
0242 Np = in.Np;
0243 n = Np;
0244 N = Np*ceil(N/Np);
0245 sig = zeros(N,1);
0246
0247 randgen = 0;
0248 for p = 1:ceil(N/Np);
0249 sigt = zeros(Np,1);
0250
0251 if randgen == 0
0252 t = (1:fix(n/5)) ./fix(n/5);
0253 sig1=20*(t.^3+t.^2+4);
0254 sig3=40*(2.*t.^3+t) + 100;
0255 sig2=10.*t.^3 + 45;
0256 sig4=16*t.^2+8.*t+16;
0257 sig5=20*(t+4);
0258 sig6(1:fix(n/10))=ones(1,fix(n/10));
0259 sig6=sig6*20;
0260 sigt(1:fix(n/5))=sig1;
0261 sigt(2*fix(n/5):-1:(fix(n/5)+1))=sig2;
0262 sigt((2*fix(n/5)+1):3*fix(n/5))=sig3;
0263 sigt((3*fix(n/5)+1):4*fix(n/5))=sig4;
0264 sigt((4*fix(n/5)+1):5*fix(n/5))=sig5(fix(n/5):-1:1);
0265 dif=n-5*fix(n/5);
0266 sigt(5*fix(n/5)+1:n)=sigt(dif:-1:1);
0267
0268 sigt((fix(n/20)+1):(fix(n/20)+fix(n/10)))=ones(1,fix(n/10))*10;
0269 sigt((n-fix(n/10)+1):(n+fix(n/20)-fix(n/10)))=ones(1,fix(n/20))*150;
0270
0271 bias=sum(sigt)/n;
0272 sigt=sigt-bias;
0273 else
0274 t = (1:fix(n/5)) ./fix(n/5);
0275 sig1=20*(t.^3+t.^2+4)*(1+(randn*.1));
0276 sig3=40*(2.*t.^3+t)*(1+(randn*.1)) + 100*(1+(randn*.05));
0277 sig2=10.*t.^3*(1+(randn*.05)) + 45*(1+(randn*.1));
0278 sig4=16*t.^2+8.*t*(1+randn*.1)+16*(1+(randn*.05));
0279 sig5=20*(t+4)*(1+(randn*.1));
0280 sig6(1:fix(n/10))=ones(1,fix(n/10))*(1+(randn*.1));
0281 sig6=sig6*20*(1+(randn*.05));
0282 sigt(1:fix(n/5))=sig1;
0283 sigt(2*fix(n/5):-1:(fix(n/5)+1))=sig2;
0284 sigt((2*fix(n/5)+1):3*fix(n/5))=sig3;
0285 sigt((3*fix(n/5)+1):4*fix(n/5))=sig4;
0286 sigt((4*fix(n/5)+1):5*fix(n/5))=sig5(fix(n/5):-1:1);
0287 dif=n-5*fix(n/5);
0288 sigt(5*fix(n/5)+1:n)=sigt(dif:-1:1);
0289
0290 sigt((fix(n/20)+1):(fix(n/20)+fix(n/10)))=ones(1,fix(n/10))*10;
0291 sigt((n-fix(n/10)+1):(n+fix(n/20)-fix(n/10)))=ones(1,fix(n/20))*150;
0292
0293 bias=sum(sigt)/n;
0294 sigt=sigt-bias;
0295 end
0296 randgen = 0;
0297 sig((p-1)*Np+1:p*Np) = sigt;
0298 end
0299 sig = sig(:);
0300
0301
0302
0303
0304 case lower('image-barbara');
0305 I = double(imread('barbara.ras'));
0306 [ROW COL] = size(I);
0307 I = imresize(I, [ROW N]);
0308
0309 vec = @(z) z(:);
0310
0311 sig = vec(I');
0312 case lower('image-baboon');
0313 I = double(imread('baboon.ras'));
0314 [ROW COL] = size(I);
0315 I = imresize(I, [ROW N]);
0316
0317 vec = @(z) z(:);
0318
0319 sig = vec(I');
0320 case lower('image-cameraman');
0321 I = double(imread('cameraman.tif'));
0322 [ROW COL] = size(I);
0323 I = imresize(I, [ROW N]);
0324
0325 vec = @(z) z(:);
0326
0327 sig = vec(I');
0328 case lower('image-house');
0329 I = double(rgb2gray(imread('house.tif')));
0330 [ROW COL] = size(I);
0331 I = imresize(I, [ROW N/2]);
0332
0333 vec = @(z) z(:);
0334
0335 I = [I(1:2:end,:) fliplr(I(2:2:end,:))];
0336 figure(123);
0337 subplot(121); imagesc(I');
0338 subplot(122); imagesc(diff(I',[],2));
0339
0340 sig = vec(I');
0341 case lower('image-boats');
0342 load('boats');
0343 I = double(sig);
0344 [ROW COL] = size(I);
0345 I = imresize(I, [ROW N/2]);
0346
0347 vec = @(z) z(:);
0348
0349
0350 figure(123);
0351 subplot(121); imagesc(I');
0352 subplot(122); imagesc(diff(I',[],2));
0353
0354 sig = vec(I');
0355 case lower('image-saturn')
0356 I = double(rgb2gray(imread('saturn4.jpg')));
0357 [ROW COL] = size(I);
0358 I = imresize(I, [ROW N/2]);
0359
0360 vec = @(z) z(:);
0361
0362 I = [I(1:2:end,:) fliplr(I(2:2:end,:))];
0363
0364 figure(123);
0365 subplot(121); imagesc(I');
0366 subplot(122); imagesc(diff(I',[],2));
0367
0368 sig = vec(I');
0369 case lower('image-chirp')
0370 I = double(rgb2gray(imread('pattern.jpg')));
0371 [ROW COL] = size(I);
0372 I = imresize(I, [ROW N]);
0373
0374 vec = @(z) z(:);
0375
0376 sig = vec(I');
0377
0378
0379
0380
0381
0382
0383 case lower('LinChirp')
0384 sig = MakeSignal('LinChirp',N);
0385 sig = sig(:);
0386
0387 case lower('TwoChirp')
0388 sig = MakeSignal('TwoChirp',N);
0389 sig = sig(:);
0390
0391 case lower('QuadChirp')
0392 sig = MakeSignal('QuadChirp',N);
0393 sig = sig(:);
0394
0395 case lower('MishMash')
0396 sig = MakeSignal('MishMash',N);
0397 sig = sig(:);
0398
0399 case lower('LinChirps')
0400 sig = MakeSignal('LinChirps',N);
0401 sig = sig(:);
0402
0403 case lower('Chirps')
0404 sig = MakeSignal('Chirps',N);
0405 sig = sig(:);
0406
0407 case lower('HypChirps')
0408
0409 N = round(N*1.75);
0410 sig = MakeSignal('HypChirps',N);
0411 sig = sig(N/10+1:round(.65*N)+N/10);
0412 sig = sig(1:2^(floor(log2(length(sig)))));
0413 sig = sig(:);
0414
0415 case lower('chirp-MATLAB')
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429 case {'chirp','gong','handel'}
0430 eval(sprintf('load %s.mat',sType));
0431 sig = y;
0432 x = sig(:);
0433 case {'greasy','tweet'}
0434 eval('sig = ReadSignal(sType);');
0435 x = sig;
0436
0437
0438
0439 case {'cameraman','barbara','lena','peppers','airplane','baboon','sailboat','tiffany','boats','shapes','pirate','house'}
0440 n = sqrt(N);
0441 switch sType
0442 case {'shapes','boats'}
0443 load(sType);
0444 case {'pirate','cameraman'}
0445 sig = double(imread(sType,'tif'));
0446 otherwise
0447 sig = double(imread(sType,'ras'));
0448 end
0449 sig = imresize(sig,n/size(sig,1));
0450 [h0 h1 g0 g1] = daub79; sym = 1; wType = 'daub79';
0451
0452
0453
0454 fprintf('Image: %s, size: %dx%d, wavelet: %s \n',sType, n,n, wType);
0455 J = floor(log2(n)-4);
0456 x = fwt2(sig,h0,h1,J,sym);
0457 x = x(:);
0458 sig = x;
0459 N = length(x);
0460
0461 wave_struct = {};
0462 wave_struct.wType = wType;
0463 wave_struct.J = J;
0464 wave_struct.FilterBank = [h0; h1; g0; g1];
0465 wave_struct.sym = sym;
0466
0467 take_fwt = 0;
0468
0469 case 'phantom'
0470 n = sqrt(N);
0471 sig = phantom('Modified Shepp-Logan',n);
0472 [h0 h1 g0 g1] = dauborth(2); sym = 0; wType = 'haar';
0473
0474 fprintf('Image: %s, size: %dx%d, wavelet: %s \n',sType, n,n, wType);
0475 J = floor(log2(n)-3);
0476 x = fwt2(sig,h0,h1,J,sym);
0477 x = x(:);
0478 N = length(x);
0479
0480 wave_struct = {};
0481 wave_struct.wType = wType;
0482 wave_struct.J = J;
0483 wave_struct.FilterBank = [h0; h1; g0; g1];
0484 wave_struct.sym = sym;
0485
0486 take_fwt = 0;
0487 otherwise
0488 disp('NAO');
0489
0490 end
0491
0492 if take_fwt == 1
0493 if isfield(in,'wType')
0494 wType = in.wType;
0495 else
0496 wType = 'daub4';
0497 end
0498 if exist('wType','var')
0499 switch lower(wType)
0500 case 'haar'
0501 [h0 h1 g0 g1] = dauborth(2); sym = 0; wType = 'haar';
0502 case 'daub4'
0503 [h0 h1 g0 g1] = dauborth(4); sym = 0; wType = 'daub4';
0504 case 'daub8'
0505 [h0 h1 g0 g1] = dauborth(8); sym = 0; wType = 'daub8';
0506 case 'daub79'
0507 [h0 h1 g0 g1] = daub79; sym = 1; wType = 'daub79';
0508 case 'daub1018'
0509 [h0 h1 g0 g1] = daub1018; sym = 2; wType = 'daub1018';
0510 otherwise
0511 disp('NAO');
0512 end
0513 else
0514 [h0 h1 g0 g1] = dauborth(4); sym = 0; wType = 'daub4';
0515 end
0516 if isfield(in,'J');
0517 J = in.J;
0518 else
0519 J = floor(log2(N));
0520 end
0521 x = fwt(sig,h0,h1,J,sym);
0522 W_h = @(x) fwt(x,h0,h1,J,sym);
0523 iW_h = @(x) ifwt(x,g0,g1,J,sym);
0524
0525 wave_struct = {};
0526 wave_struct.W_h = W_h;
0527 wave_struct.iW_h = iW_h;
0528 else
0529 x = sig;
0530 end
0531
0532 if isfield(in,'plot')
0533 if in.plot
0534 figure(1);
0535 subplot(211); set(gca,'FontSize',16);
0536 plot(sig,'LineWidth',2); set(gca,'XLim',[1 N]);
0537 axis tight; YLim = get(gca,'YLim');
0538 dY = YLim(2)-YLim(1);
0539 YLim = [YLim(1)-dY/10 YLim(2)+dY/10];
0540 set(gca,'YLim',YLim);
0541 set(gca,'XtickLabel','')
0542 ylabel(sType);
0543 subplot(212); set(gca,'FontSize',16);
0544 plot(x,'LineWidth',2); set(gca,'XLim',[1 N]);
0545 axis tight; YLim = get(gca,'YLim');
0546 dY = YLim(2)-YLim(1);
0547 YLim = [YLim(1)-dY/10 YLim(2)+dY/10];
0548 set(gca,'YLim',YLim);
0549 set(gca,'XtickLabel','')
0550 ylabel(wType);
0551 end
0552 end
0553
0554 nout = max(nargout,1) - 1;
0555 if nout > 0
0556 varargout{1} = sig;
0557 end
0558 if nout > 1
0559 varargout{2} = wave_struct;
0560 end
0561