# Bandpass filter using wavelet transform

I'm working on a speech recognition project. The first step of this project is to find phoneme in the speech signal. To do that, I found this paper that discusses about it.

In the paper, wavelets are used to visualise the signal in different frequency band. Here is my problem :

So far, I know how to decompose the speech signal using wavelet transform at different level (wavedec in MATLAB) But I don't know how to filter this signal.

With Fourier transform, a simple threshold on the FFT (focus on specific frequency band) will do the work. And as far as I understood, wavelet kinda work like Fourier so I guess it's working the same way.

• What exactly is your question? Sorry i can't comment your question. Jan 13 '17 at 17:23
• How can I perform a band pass filter (100hz 400hz for exemple) using wavelet ? Jan 13 '17 at 19:29

If you refer to the documentation for wavedec, a signal $x$ is decomposed on one level into two sets of coefficients: $cA_1$ and $cD_1$. They correspond to a low-pass and a high-pass filter applied to $x$, following by a downsampling. As a result, if you reconstruct $x_1$ with waverec from $cA_1$ only (setting $cD_1$ to zero), and $x_2$ from $cD_1$ only (setting $cA_1$ to zero), $x_1$ will mostly correspond to the lower half of $x$ spectrum, and $x_2$ the upper half.

The same reasoning works on several levels: if your signal has a range of frequency in $[0\,,f]$, $cD_1$ gathers coefficients mostly from $[f/2\,,f]$, $cD_2$ gathers coefficients mostly from $[f/4\,,f/2]$, etc.

So for a sampling frequency of $44100$ Hertz, the bands would be:

• $cD_1$: $11025 \to 22050$
• $cD_2$: $5512.5\to 11025$
• $cD_3$: $2756.25 \to 5512.5$
• $cD_4$: $1378.125 \to 2756.25$
• $cD_5$: $689.0625 \to 1378.125$

If you want to filter out a frequency band, you can zero wavelet coefficient whose spectrum intersect that frequency band, and reconstruct the data. This is a form of thresholding in the wavelet domain. As you guessed, it can work in a way similar to Fourier.

Indeed, thresholding and shrinkage are very effective with wavelets, possibly more than with a Fourier transform, for denoising. In the wavelet domain, you can design the shrinkage to preserve specific time intervals, allow smooth transitions, etc.

But the wavelet filters are imperfect filters. And downsampling cause aliasing, causing a not-so-clean filtering. To perfect a pure band-pass filter, I would not recommend the DWT (discrete wavelet transform), unless the wavelet is of quite high order.

• Thanks a lot for this very clear answer. If I understood well, if I want to "select" frequency band as mention in the table1 of the given paper, I first have to downsample my signal 3 times (initial sampling frequency is 44100Hz) in order to have f = 5512 Hz, and the make a level 6 wavelet decomposition. And then thresholding the given C vector according to L vector. Correct me if I'm wrong Jan 14 '17 at 15:08
• Downsampling is part of the standard DWT. So you do not have to downsample first. If the sampling frequency is 44100 Hz, the maximum observable frequency is 22050 Hz. After one level, the CA1 is (almost) between 0 and 11025 Hz. After two level, the CA2 is (almost) between 0 and 5512 Hz. After two level, the CA2 is (almost) between 0 and 2756 Hz. So if you want to keep the $[2756,5512 ]$ band, set CA2 and CD1 to zero, and reconstruct. Warning: this is straightforward, but not the best approach IMHO Jan 14 '17 at 21:48
• Okay, so I can either downsampling or increase DWT level? Instead look at level 1 ( with downsampling ) I'll look at level 4. I don't know if it's the best approach but this method have pretty good result ( 95% success), so I want to check this out! Jan 15 '17 at 15:22
• Will I have the same result? I'm not entirely sure Jan 16 '17 at 11:11
• I just realize there is no way it will give the same result ! Thanks a lot once more time for your patience and clear explanation Jan 16 '17 at 14:09