Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I maybe would not being answering the question, but i will try to help you advance.</p> <p>As far as i know, the Matlab Wavelet Toolbox only deal with wavelet operations and coefficients, increase or decrease resolution levels, and similar operations, but do not exposes the internal matrices serving to doing the transformations from signals and coefficients.</p> <p>Hence i fear the answer to this question is no. Some time ago, i did this for some of the Hart Class wavelet, and i actually build the matrix from the scratch, and then i compared the coefficients obtained with the Built-in Matlab Wavelet Toolbox, hence ensuring your matrices are good enough for your algorithm. In my case, recursive parameter estimation for time varying models.</p> <p>For the function <em>ConstructHaarWaveletTransformationMatrix</em> it is really simple to create the matrix, because the Hart Class could be really simple expressed as Kronecker products. The Gaussian Wavelet case as i fear should be done from the scratch too...</p> <p>THe steps i suggest would be;</p> <ol> <li><p>Although MATLAB dont include explicitely the matrices, you can use the Matlab built-in functions to recover the Gaussian Wavelets, and thus compose the matrix for your algorithm.</p></li> <li><p>Build every column of the matrix with every Gaussian Wavelet, for every resolution levels you are requiring (the dyadic scales). Use the Matlab Wavelets toolbox for recover the shapes.</p></li> <li><p>After this, compare the coefficients obtained by you, with the coefficients of the toolbox. This way you will correct the order of the Matrix row.</p></li> </ol> <p>Numerically, being <strong>fj</strong> the signal projection over <strong>Vj</strong> (the <strong>PHI</strong> signals space, scaling functions) at resolution level <strong>j</strong>, and <strong>gj</strong> the signal projection over <strong>Wj</strong> (the <strong>PSI</strong> signals space, mother functions) at resolution level <strong>j</strong>, we can write:</p> <blockquote> <p><strong>f=fj0+sum_{j0}^{j1-1}{gj}</strong></p> </blockquote> <p>Hence, both <strong>fj0</strong> and <strong>gj</strong> will induce two matrices, lets call them <strong>PHIj</strong> and <strong>PSIj</strong> matrices:</p> <blockquote> <p><strong>f=PHIj0*cj0+sum_{j0}^{j1-1}{PSIj*dj}</strong></p> </blockquote> <p>The <strong>PHIj</strong> columns contain the scaled and shifted <em>scaling wavelet signal</em> (one, for j0 only) for the <em>approximation</em> projection (the <strong>Vj0</strong> space), and the <strong>PSIj</strong> columns contain the scaled and shifted <em>mother wavelet signals</em> (several, from <strong>j0</strong> to <strong>j1-1</strong>) for the <em>detail</em> projection (onto the <strong>Wj0</strong> to <strong>Wj1-1</strong> spaces).</p> <p>Hence, the Matrix you need is:</p> <blockquote> <p><strong>PHI=[PHIj0 PSIj0... PSIj1]</strong></p> </blockquote> <p>Thus you can express you original signal as:</p> <blockquote> <p><strong>f=PHI*C</strong></p> </blockquote> <p>where <strong>C</strong> is a vector of approximation and detail coefficients, for the levels:</p> <blockquote> <p><strong>C=[cj0' dj0'...dj1']'</strong></p> </blockquote> <p>The first part, for addressing the PHI build can be achieved by writing:</p> <pre><code>function PHI=MakePhi(l,str,Jmin,Jmax) % [PHI]=MakePhi(l,str,Jmin,Jmax) % % Build full PHI Wavelet Matrix for obtaining wavelet coefficients % (extract) %FILTER [LO_R,HI_R] = wfilters(str,'r'); lf=length(LO_R); %PHI BUILD PHI=[]; laux=l([end-Jmax end-Jmax:end]); PHI=[PHI MakeWMatrix('a',str,laux)]; for j=Jmax:-1:Jmin laux=l([end-j end-j:end]); PHI=[PHI MakeWMatrix('d',str,laux)]; end </code></pre> <p>the wfilters is a MATLAB built in function, giving the required signal for the approximation and or detail wavelet signals.</p> <p>The MakeWMatrix function is:</p> <pre><code>function M=MakeWMatrix(typestr,str,laux) % M=MakeWMatrix(typestr,str,laux) % % Build Wavelet Matrix for obtaining wavelet coefficients % for a single level vector. % (extract) [LO_R,HI_R] = wfilters(str,'r'); if typestr=='a' F_R=LO_R'; else F_R=HI_R'; end la=length(laux); lin=laux(2); lout=laux(3); M=MakeCMatrix(F_R,lin,lout); for i=3:la-1 lin=laux(i); lout=laux(i+1); Mi=MakeCMatrix(LO_R',lin,lout); M=Mi*M; end </code></pre> <p>and finally the MakeCMatrix is:</p> <pre><code>function [M]=MakeCMatrix(F_R,lin,lout) % Convolucion Matrix % (extract) lf=length(F_R); M=[]; for i=1:lin M(:,i)=[zeros(2*(i-1),1) ;F_R ;zeros(2*(lin-i),1)]; end M=[zeros(1,lin); M ;zeros(1,lin)]; [ltot,lin]=size(M); lmin=floor((ltot-lout)/2)+1; lmax=floor((ltot-lout)/2)+lout; M=M(lmin:lmax,:); </code></pre> <p>This last matrix should include some interpolation routine for having better general results in each case.</p> <p>I expect this solve part of your problem.....</p> <p>Hyp</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload