function seti = setWavelet(seti)
if seti.useWavelet == 1
reshapeVec = seti.nROI*ones(1,seti.dim);
G = @(x) reshape(x,reshapeVec);
iG = @(x) x(:);
seti = Wfuncs(seti,G,iG);
if seti.wavWeight == 1
w = whiteNoiseCalc(seti,seti.W,G,iG,seti.nCD,seti.nROI);
w = normsApproxIsom(w,seti.W);
else
w = 1;
end
seti.wavWght = w;
seti.wW = @(x) w.*seti.W(x);
seti.wiW = @(x) seti.iW(1./w.*x);
seti.wWstar = @(x) seti.Wstar(w.*x);
seti.wiWstar = @(x) 1./w.*seti.iWstar(x);
if isfield(seti,'wavIsom')
if strcmp(seti.wavIsom, 'W1p')
if seti.gscale == 1
seti.omegaW1p = normsApproxW1Isom(seti.nInv, seti);
seti.omegaW1p = seti.omegaW1p(:);
else
seti.omegaW1p = normsApproxW1Isom(seti.nROI, seti);
seti.omegaW1p = seti.omegaW1p(:);
end
seti.omegaW1p = seti.omegaW1p/abs(min(seti.omegaW1p));
else
error('Error in setWavelet.m: seti.wavIsom not implemented.')
end
end
end
if seti.useWavelet == 1
reshapeVeci = seti.nInv*ones(1,seti.dim);
Gi = @(x) reshape(x,reshapeVeci);
iGi = @(x) x(:);
seti = Wifuncs(seti,Gi,iGi);
if seti.wavWeight == 1
wi = whiteNoiseCalc(seti,seti.Wi,Gi,iGi,seti.nCDinv,seti.nInv);
wi = normsApproxIsom(wi,seti.Wi);
else
wi = 1;
end
seti.wavWghti = wi;
seti.wWi = @(x) wi.*seti.Wi(x);
seti.wiWi = @(x) seti.iWi(1./wi.*x);
seti.wWstari = @(x) seti.Wstari(wi.*x);
seti.wiWstari = @(x) 1./wi.*seti.iWstari(x);
end
end
function seti = Wfuncs(seti,G,iG)
seti.W = @(x) iG(ldwt(G(x),'forward',seti.wavelet,seti.extension,seti.smin));
seti.iW = @(x) iG(ldwt(G(x),'inverse',seti.wavelet,seti.extension,seti.smin));
seti.Wstar = @(x) iG(ldwt(G(x),'adjoint',seti.wavelet,seti.extension,seti.smin));
seti.iWstar = @(x) iG(ldwt(G(x),'adjointinverse',seti.wavelet,seti.extension,seti.smin));
end
function seti = Wifuncs(seti,Gi,iGi)
seti.Wi = @(x) iGi(ldwt(Gi(x),'forward',seti.wavelet,seti.extension,seti.smin));
seti.iWi = @(x) iGi(ldwt(Gi(x),'inverse',seti.wavelet,seti.extension,seti.smin));
seti.Wstari = @(x) iGi(ldwt(Gi(x),'adjoint',seti.wavelet,seti.extension,seti.smin));
seti.iWstari = @(x) iGi(ldwt(Gi(x),'adjointinverse',seti.wavelet,seti.extension,seti.smin));
end
function w = normsApproxIsom(w,W)
randq = rand(size(w))+1i*rand(size(w));
isom = norm(randq,1)/norm(w.*W(randq),1);
w = isom.*w;
end
function weights = normsApproxW1Isom(n, seti)
wavMat = zeros(n,n);
weights = wavMat;
pAst = 3/2;
for jj=1:n
for ll=1:n
wavMat(jj,ll)=1;
oriMat = ldwt(wavMat, 'inverse',seti.wavelet,seti.extension,seti.smin);
[oriMatX,oriMatY] = gradient(oriMat,seti.rCD/sqrt(2)/n,seti.rCD/sqrt(2)/n);
normOri = ( normroi(oriMat(:),seti,pAst)^pAst ...
+ normroi(oriMatX(:),seti,pAst)^pAst ...
+ normroi(oriMatY(:),seti,pAst)^pAst )^(1/pAst);
weights(jj,ll) = normOri/normroi(wavMat,seti,1);
wavMat(jj,ll)=0;
end
end
end