WAVETRANS Continuous wavelet transform. _______________________________________________________________________ _______________________________________________________________________ W=WAVETRANS(X,PSI) computes the wavelet transform W of a data series X using wavelets PSI. X has time oriented in rows, and PSI is either a matrix of wavelets, or a cell array defining wavelet properties. If PSI is a matrix containing the wavelets, SIZE(PSI,1) should be the same as SIZE(X,1), with time-domain wavelets at different scales or frequencies in the columns of PSI. See MORSEWAVE or MORLWAVE. If PSI is a cell array, it defines the properties of generalized Morse wavelets, which are then computed internally, as described below. ___________________________________________________________________ Multiple input series X and PSI may both contain multiple components. Then PSIF(:,:,k) is the kth wavelet, and X(:,n) is the nth data component. If there are K wavelets at J frequencies and M data points in N components of X, then W is of size M x J x N x K. Note that W is always squeezed to remove singleton dimensions. X can also be a 3D array of size M x N x K, if the wavelet contains only one component. Then W is again of size M x J x N x K. [W1,W2,...,WN]=WAVETRANS(X1,X2,...,XN,PSI) also works, where the XN are all column vectors of the same length. ___________________________________________________________________ Generalized Morse wavelets WAVETRANS can automatically compute the wavelet transform using the generalized Morse wavelets, without needing to precompute the wavelets. WAVETRANS(X,{GAMMA,BETA,FS}), with PSI being a cell array, uses the Generalized Morse Wavelets specified by the parameters GAMMA and BETA. FS is an array of *radian* frequencies, as in cos(ft) not cos(2 pi ft), assuming a unit sample rate. Thus the Nyquist frequency is at pi. Use MORSESPACE to easily choose the frequency bins. WAVETRANS(X,{K,GAMMA,BETA,FS}) uses the first K orthogonal multi- wavelets to create K different transforms. The default is K=1, employing only the first wavelet. See MORSEWAVE for details. WAVETRANS(X,{...,'energy'}) specifies a unit energy normalization for the wavelets. The default is the 'bandpass' or unit amplitude normalization. See MORSEWAVE for details. For general purpose use, set GAMMA=3 and choose BETA to be no smaller than one. Increase BETA to make your wavelet have more 'wiggles'. ___________________________________________________________________ Boundary conditions W=WAVETRANS(...,STR), where STR is a string, optionally specifies the boundary condition to be imposed at the edges of the time series. Valid options for STR are STR = 'periodic' for periodic boundary conditions STR = 'zeros' for zero-padding beyond the endpoints STR = 'mirror' for reflecting the time series at both ends STR = 'reverse' for reflection together with a sign reversal The default value of STR is 'periodic', which means endpoints of the time series are implicitly joined to make a periodic signal. All boundary conditions take into account potential blocks of missing data, marked by NaNs, at beginning and end of each column. ___________________________________________________________________ Missing data The data X may contain blocks of NANs at the beginning and/or end of each column, marking the absence of data. In this case only the data series is taken to correspond to the block of finite data values, and the boundary conditions are applied accordingly. The corresponding portions of the transform matrix W are then also set to NANs. No NANs may occur in the interior of the data series. ___________________________________________________________________ Detrending Note that the data X is detrended before transforming. This feature is suppressed by WAVETRANS(..., 'nodetrend'). ___________________________________________________________________ Complex-valued data The wavelet transform is normalized differently for complex-valued data than for real-valued data. If WX and WY are the wavelet transforms of two real-valued signals, X and Y, then WP=WAVETRANS(X+iY,PSI) = (1/SQRT(2))*(WX + i WY) WN=WAVETRANS(X-iY,PSI) = (1/SQRT(2))*(WX - i WY) defines the positive and negative rotary transforms WP and WN. The factors of SQRT(2) are included such that the transform power is unchanged, that is, ABS(WX).^2+ABS(WY).^2 = ABS(WP).^2+ABS(WN).^2. There are therefore two equivalent ways to compute the positive and negative rotary transforms. The first is [WP,WN]=WAVETRANS(X+iY,X-iY,PSI) which takes the wavelet transform of the X+iY and its conjugate. The second is to take the wavelet transform of the real-valued data [WX,WY]=WAVETRANS(X,Y,PSI) followed by [WP,WN]=VECTMULT(TMAT,WX,WY) which converts WX and WY to WP and WN using a matrix multiplication with the unitary matrix TMAT=[1 i; 1 -i]/SQRT(2). ___________________________________________________________________ Parallelization WAVETRANS(...,'parallel') parallelizes the wavelet transform using a PARFOR loop, when the data X contains multiple columns. This requires that Matlab's Parallel Computing Toolbox be installed. __________________________________________________________________ See also MORSESPACE, RIDGEWALK, WAVESPECPLOT. 'wavetrans --t' runs some tests. 'wavetrans --f' generates a sample figure. Usage: w=wavetrans(x,psi); w=wavetrans(x,{gamma,beta,f,str}); w=wavetrans(x,{gamma,beta,f,str},str); [wx,wy]=wavetrans(x,y,{gamma,beta,f,str},str); [wp,wn]=wavetrans(x+i*y,x-i*y,{gamma,beta,f,str},str); _________________________________________________________________ This is part of JLAB --- type 'help jlab' for more information (C) 2004--2016 J.M. Lilly --- type 'help jlab_license' for details