indsl Logo

Toolboxes

  • Data Quality
  • Detect
  • Drilling
  • Equipment
  • Filter
  • Fluid Dynamics
  • Forecast
  • Numerical Calculus
  • Oil and Gas
  • Resample
  • Signals
  • Smooth
  • Statistics
  • Sustainability
  • Basic time series functions

Examples

  • Data quality
  • Detection Functions
  • Equipment Functions
  • Filter Functions
    • Noise removal and trending with the Wavelet filter
  • Forecasting Functions
  • Numerical Calculus
  • Oil and Gas Functions
  • Resampling Functions
  • Synthetic Signal Generation
  • Smoothing Functions
  • Statistics
  • Sustainability Functions
  • Function versioning

Developers

  • Contributing
  • Code of Conduct
  • Developer utility functions
  • Changelog
indsl
  • Filter Functions
  • Noise removal and trending with the Wavelet filter
  • View page source

Note

Click here to download the full example code

Noise removal and trending with the Wavelet filter

Example of filtering to remove noise from time series data using the Wavelet filter. We use data from volumetric flow rate (m3/h) sensor with non-uniform sampling frequency measuring measuring flow into a compressor.

In the figure below it can be observed how applying different wavelet type filters can help remove some of the noise (fluctuations) from the data and such provide a more smooth an easily interpretable signal. Applying different type wavelets (db[1-20], sym[2-20] or coif[1-5]) will provide different results, but generally one will find that the lower numbered wavelets let more noise through while higher value wavelets results in a smoother signal. The same applies to wavelet decomposition level. The lower the number the more similar the result will be to the original data. Zero or negative numbers will fail and typically one will not want to choose a value higher than 6.

Noise removal effect using different type wavelets and wavelet decomposition levels
import os

import matplotlib.pyplot as plt
import pandas as pd

from indsl.filter import wavelet_filter


base_path = "" if __name__ == "__main__" else os.path.dirname(__file__)
data = pd.read_csv(os.path.join(base_path, "../../datasets/data/vol_flow_rate_m3h.csv"), index_col=0)
data = data.squeeze()
data.index = pd.to_datetime(data.index)
# TODO: Create load_flowrate_data method from above

# Apply the filter with different settings and plot the results
plt.figure(1, figsize=[9, 7])

# RAW data
plt.plot(data, color="lightblue", label="RAW")

# Filter applied using 'db6' wavelet and a level of 2
plt.plot(
    wavelet_filter(data, level=2, wavelet="db8"),
    color="black",
    linewidth=1,
    label="db8, level 2",
)

# Filter applied using sym4 wavelet, and a level of 3
plt.plot(
    wavelet_filter(data, level=3, wavelet="sym4"),
    color="red",
    linewidth=1,
    ls="--",
    label="sym4, level=3",
)

plt.ylabel("Vol. Flow (m3/h)")
plt.title("Noise removal effect using different type wavelets and wavelet decomposition levels")
_ = plt.legend(loc=2)
plt.show()

Total running time of the script: ( 0 minutes 27.907 seconds)

Download Python source code: plot_wavelet_filter.py

Download Jupyter notebook: plot_wavelet_filter.ipynb

Gallery generated by Sphinx-Gallery

Previous Next

© Copyright 2021, Cognite AS <support@cognite.com>.

Built with Sphinx using a theme provided by Read the Docs.