<< Chapter < Page | Chapter >> Page > |
Finally, we say a few words about DWT implementation. Here we focus on a single DWT stage and assume circularconvolution, yielding an x DWT matrix . In the general case, x matrix multiplication requires multiplications. The DWT matrices, however, have a circular-convolution structure which allows us toimplement them using significantly less multiplies. Below we present some simple and reasonably efficient approachesfor the implementation of and .
We treat the inverse DWT first. Recall that in the lowpass synthesis branch, we upsample the input before circularlyconvolving with . Denoting the upsampled coefficient sequence by , fast circular convolution can be described as follows (using Matlab notation)
ifft( fft(a).*fft(h,length(a)) )
where we have assumed that
length(a)≥length(h)
.
Next we treat the forward DWT. Recall that in the lowpass analysis branch, we circularly convolve the input with and then downsample the result. The fast circular convolution can be implemented using
wshift('1', ifft(fft(a).*fft(flipud(h),length(a))), length(h)-1 )
where
wshift
accomplishes a circular
shift of the
ifft
output that makes up
for the unwanted delay of
length(h)-1
samples imposed by the
flipud
operation.
The highpass branch is handled similarly but with filter
. Finally, each branch is downsampled by factor two.
We note that the proposed approach is not totally efficient because downsampling is performed after circular convolution(and upsampling before circular convolution). Still, we have outlined this approach because it is easy to understand andstill results in major saving when is large: it converts the matrix multiply into an operation.
Notification Switch
Would you like to follow the 'Dspa' conversation and receive update notifications?