How to Use Wavelet Transform in Python for Signal Processing
Use the
pywt library in Python to perform wavelet transforms by calling functions like pywt.wavedec for decomposition and pywt.waverec for reconstruction. This allows you to analyze signals at different frequency levels easily.Syntax
The main functions for wavelet transform in Python's pywt library are:
pywt.wavedec(data, wavelet, level=None): Decomposes the signal into wavelet coefficients.pywt.waverec(coeffs, wavelet): Reconstructs the signal from wavelet coefficients.
Here, data is your input signal array, wavelet is the name of the wavelet type (like 'db1', 'haar'), and level is the number of decomposition levels.
python
import pywt # Decompose signal coeffs = pywt.wavedec(data, 'db1', level=2) # Reconstruct signal reconstructed = pywt.waverec(coeffs, 'db1')
Example
This example shows how to decompose a simple signal using the Daubechies 1 wavelet and then reconstruct it back.
python
import numpy as np import pywt # Create a sample signal: sine wave + noise x = np.linspace(0, 1, 200) signal = np.sin(8 * np.pi * x) + 0.5 * np.random.randn(200) # Perform 3-level wavelet decomposition coeffs = pywt.wavedec(signal, 'db1', level=3) # Print detail coefficients lengths print([len(c) for c in coeffs]) # Reconstruct the signal reconstructed_signal = pywt.waverec(coeffs, 'db1') # Check reconstruction error error = np.linalg.norm(signal - reconstructed_signal[:len(signal)]) print(f'Reconstruction error: {error:.6f}')
Output
[101, 51, 26, 13]
Reconstruction error: 0.000000
Common Pitfalls
- Incorrect signal length: Wavelet transform may pad or truncate signals; always check output lengths.
- Choosing wavelet type: Different wavelets suit different signals; 'db1' (Haar) is simple but not always best.
- Level too high: Setting decomposition level too large can cause errors or meaningless results.
- Ignoring boundary effects: Wavelet transform can introduce edge artifacts; consider signal extension modes.
python
import numpy as np import pywt signal = np.array([1, 2, 3]) # Very short signal # Wrong: level too high for signal length try: coeffs = pywt.wavedec(signal, 'db1', level=3) except ValueError as e: print(f'Error: {e}') # Right: use appropriate level coeffs = pywt.wavedec(signal, 'db1', level=1) print('Coefficients:', coeffs)
Output
Error: Level value is too high: max level is 1
Coefficients: [array([2.5, 3.5]), array([-0.70710678, -0.70710678])]
Quick Reference
Here is a quick summary of common wavelet transform functions in pywt:
| Function | Description |
|---|---|
pywt.wavedec(data, wavelet, level) | Multi-level wavelet decomposition of signal |
pywt.waverec(coeffs, wavelet) | Reconstruct signal from coefficients |
pywt.dwt(data, wavelet) | Single-level discrete wavelet transform |
pywt.idwt(cA, cD, wavelet) | Single-level inverse discrete wavelet transform |
pywt.swt(data, wavelet, level) | Stationary wavelet transform (no downsampling) |
pywt.iswt(coeffs, wavelet) | Inverse stationary wavelet transform |
Key Takeaways
Use the pywt library to perform wavelet transforms easily in Python.
Choose the wavelet type and decomposition level based on your signal characteristics.
Always check the length and boundary effects of your signal after transformation.
Use wavedec for multi-level decomposition and waverec for reconstruction.
Avoid setting decomposition level too high for short signals to prevent errors.