**Name**

**biowave1** Computes the biorthogonal wavelet transform of an 1D signal

**Command Synopsis**

**biowave1** [-r *RecursNum*] [-e *EdgeMode*] [-n *FilterNorm*] *Signal* *WavTrans* *ImpulseResponse1* *ImpulseResponse2*

-rRecursNum: Number of levels (default 1)

-eEdgeMode: Edge processing mode (0/1/2, default 2)

-nFilterNorm: Normalization mode for filter bank (0/1/2, default 0)

Signal: Input signal (fsignal)

WavTrans: Wavelet transform of Signal (wtrans1d)

ImpulseResponse1: Impulse response of filter 1 (fsignal)

ImpulseResponse2: Impulse response of filter 2 (fsignal)

**Function Summary**

void biowave1 (NumRec , Edge , FilterNorm , Signal , Output , Ri1 , Ri2 )

int *NumRec ;

int *Edge ;

int *FilterNorm ;

Fsignal Signal ;

Wtrans1d Output ;

Fsignal Ri1 ;

Fsignal Ri2 ;

**Description**

*biowave1* computes the discrete wavelet transform of the univariate digitized signal whose sample values are in the file *Signal*, using filter banks associated to biorthogonal bases of wavelets. See *owave1* module's documentation for definitions and notations and
refer to [CDF92] for the theory.

Let
{*V*_{j}}_{j Z},
{}_{j Z} be a pair of dual multiresolution analysis. The integer translates of the the two associated scaling functions are no longer required to be orthogonal, but they do satisfy

< , > = .

The approximation of a signal V_{j-1} = V_{j} |
|||

= W_{j} |

Let and
be the two corresponding mother wavelets. Their integer translates are no longer orthogonal, although the orthogonal property is preserved across scales :

if j j' |
|||

if j j' |

If the signal *f* is in
it can be decomposed as

From the coefficients *A*_{0}[*k*] (which are stored in the file *Signal*) *biowave1* computes the wavelet decomposition
*D*_{1}, *D*_{2},..., *D*_{J}, *A*_{J}. As for orthogonal decomposition this is done recursively, and the two-scales relationships

(t) = h_{k}(2t - k) |
(t) = (2t - k) |

(t) = g_{k}(2t - k) |
(t) = (2t - k) |

A_{j+1}[n] = A_{j}[k] |
|||

D_{j+1}[n] = A_{j}[k] |

Once again if () is a low-pas filter, regardless of its definition by the two-scale relationships, then

The different ways of edge processing are the following :

- Extension of the signal with 0-valued samples.
- Reflexion of the signal around each edge.
- Periodization of the signal.

As for the orthogonal case, the size of the wavelet decomposition (omitting edge problems) is equal to the size of the original signal, the scale parameter *J* is upperbounded, and when edge processing is performed via periodization, the size of the signal should be a multiple of 2^{J}.

If the impulse responses have size *N* and then the complexity of the algorithm is roughly
(1 - 2^{-(J-2)})(*N* + )*n* multiplications and additions, where *n* is the size of the signal.

The resulting sub-signals
*A*_{1}, *A*_{2},..., *A*_{J} and
*D*_{1}, *D*_{2},..., *D*_{J} are stored in files having all the same prefix *Wavtrans*. The name of the file is *prefix_j_A.wtrans1d* for *A*_{j} and *prefix_j_D.wtrans1d* for *D*_{j}.

The coefficients (*h*_{k}) and
() of the filter's impulse responses are stored in the file *ImpulseResponse1* and *ImpulseResponse2*.

- The -r option specifies the number of levels
*J*in the decomposition. - The -e option specifies the edge processing mode.
- 0 : 0 extension (default).
- 1 : periodization.
- 2 : reflexion.

- The -n option specifies the normalisation mode of the filter impulse responses' coefficients. If selected the coefficients
*h*_{k}and are multiplied by a constant so that their sum is 1.0. If -n is not selected the coefficients are normalized so that their cross-correlation is 1.0 and their sums equal.

**See Also**

**Version 1.3**

Last Modification date : Thu Jan 31 15:02:08 2002

**Author**

Jean-Pierre D'Ales