Datalens.ai
← All algorithms

SIGNAL-PROCESSING

firls

FIR filter design using least-squares error minimization.

Example of usage

Python API reference included; executable data demonstration pending review.

Usage / limitations

+Use when: Analyse frequencies and signals.

−Limitations: Check input requirements, mathematical assumptions and version-specific behaviour before using.

Mathematical formula

See method documentation: implementation and assumptions vary.
Sample dataShow
{
  "variable": "sensor_series",
  "domain": "Industrial vibration and periodic sensor analysis",
  "sample_rate_hz": 100,
  "feature_names": [
    "time_s",
    "vibration_mm_s"
  ],
  "records": [
    {
      "time_s": 0.0,
      "vibration_mm_s": 0.0
    },
    {
      "time_s": 0.01,
      "vibration_mm_s": 0.4447411
    },
    {
      "time_s": 0.02,
      "vibration_mm_s": 0.7033622
    },
    {
      "time_s": 0.03,
      "vibration_mm_s": 0.7717135
    },
    {
      "time_s": 0.04,
      "vibration_mm_s": 0.8037134
    },
    {
      "time_s": 0.05,
      "vibration_mm_s": 0.9118322
    },
    {
      "time_s": 0.06,
      "vibration_mm_s": 1.0233196
    },
    {
      "time_s": 0.07,
      "vibration_mm_s": 0.958721
    },
    {
      "time_s": 0.08,
      "vibration_mm_s": 0.6430039
    },
    {
      "time_s": 0.09,
      "vibration_mm_s": 0.2063349
    },
    {
      "time_s": 0.1,
      "vibration_mm_s": -0.1426585
    },
    {
      "time_s": 0.11,
      "vibration_mm_s": -0.327817
    },
    {
      "time_s": 0.12,
      "vibration_mm_s": -0.4611361
    },
    {
      "time_s": 0.13,
      "vibration_mm_s": -0.6823678
    },
    {
      "time_s": 0.14,
      "vibration_mm_s": -0.9698565
    },
    {
      "time_s": 0.15,
      "vibration_mm_s": -1.1426585
    },
    {
      "time_s": 0.16,
      "vibration_mm_s": -1.0537386
    },
    {
      "time_s": 0.17,
      "vibration_mm_s": -0.7537983
    },
    {
      "time_s": 0.18,
      "vibration_mm_s": -0.4380812
    },
    {
      "time_s": 0.19,
      "vibration_mm_s": -0.2367539
    },
    {
      "time_s": 0.2,
      "vibration_mm_s": -0.0881678
    },
    {
      "time_s": 0.21,
      "vibration_mm_s": 0.1616739
    },
    {
      "time_s": 0.22,
      "vibration_mm_s": 0.5504818
    },
    {
      "time_s": 0.23,
      "vibration_mm_s": 0.924594
    },
    {
      "time_s": 0.24,
      "vibration_mm_s": 1.0867806
    },
    {
      "time_s": 0.25,
      "vibration_mm_s": 1.0
    },
    {
      "time_s": 0.26,
      "vibration_mm_s": 0.8153325
    },
    {
      "time_s": 0.27,
      "vibration_mm_s": 0.69344
    },
    {
      "time_s": 0.28,
      "vibration_mm_s": 0.6250887
    },
    {
      "time_s": 0.29,
      "vibration_mm_s": 0.4563601
    },
    {
      "time_s": 0.3,
      "vibration_mm_s": 0.0881678
    },
    {
      "time_s": 0.31,
      "vibration_mm_s": -0.38128
    },
    {
      "time_s": 0.32,
      "vibration_mm_s": -0.7374893
    },
    {
      "time_s": 0.33,
      "vibration_mm_s": -0.8642357
    },
    {
      "time_s": 0.34,
      "vibration_mm_s": -0.8483745
    },
    {
      "time_s": 0.35,
      "vibration_mm_s": -0.8573415
    },
    {
      "time_s": 0.36,
      "vibration_mm_s": -0.9322565
    },
    {
      "time_s": 0.37,
      "vibration_mm_s": -0.9356662
    },
    {
      "time_s": 0.38,
      "vibration_mm_s": -0.7144344
    },
    {
      "time_s": 0.39,
      "vibration_mm_s": -0.290217
    },
    {
      "time_s": 0.4,
      "vibration_mm_s": 0.1426585
    },
    {
      "time_s": 0.41,
      "vibration_mm_s": 0.4116991
    },
    {
      "time_s": 0.42,
      "vibration_mm_s": 0.5325666
    },
    {
      "time_s": 0.43,
      "vibration_mm_s": 0.659313
    },
    {
      "time_s": 0.44,
      "vibration_mm_s": 0.8787935
    },
    {
      "time_s": 0.45,
      "vibration_mm_s": 1.0881678
    },
    {
      "time_s": 0.46,
      "vibration_mm_s": 1.0983996
    },
    {
      "time_s": 0.47,
      "vibration_mm_s": 0.8463205
    },
    {
      "time_s": 0.48,
      "vibration_mm_s": 0.4722083
    },
    {
      "time_s": 0.49,
      "vibration_mm_s": 0.1732929
    },
    {
      "time_s": 0.5,
      "vibration_mm_s": 0.0
    },
    {
      "time_s": 0.51,
      "vibration_mm_s": -0.1732929
    },
    {
      "time_s": 0.52,
      "vibration_mm_s": -0.4722083
    },
    {
      "time_s": 0.53,
      "vibration_mm_s": -0.8463205
    },
    {
      "time_s": 0.54,
      "vibration_mm_s": -1.0983996
    },
    {
      "time_s": 0.55,
      "vibration_mm_s": -1.0881678
    },
    {
      "time_s": 0.56,
      "vibration_mm_s": -0.8787935
    },
    {
      "time_s": 0.57,
      "vibration_mm_s": -0.659313
    },
    {
      "time_s": 0.58,
      "vibration_mm_s": -0.5325666
    },
    {
      "time_s": 0.59,
      "vibration_mm_s": -0.4116991
    },
    {
      "time_s": 0.6,
      "vibration_mm_s": -0.1426585
    },
    {
      "time_s": 0.61,
      "vibration_mm_s": 0.290217
    },
    {
      "time_s": 0.62,
      "vibration_mm_s": 0.7144344
    },
    {
      "time_s": 0.63,
      "vibration_mm_s": 0.9356662
    },
    {
      "time_s": 0.64,
      "vibration_mm_s": 0.9322565
    },
    {
      "time_s": 0.65,
      "vibration_mm_s": 0.8573415
    },
    {
      "time_s": 0.66,
      "vibration_mm_s": 0.8483745
    },
    {
      "time_s": 0.67,
      "vibration_mm_s": 0.8642357
    },
    {
      "time_s": 0.68,
      "vibration_mm_s": 0.7374893
    },
    {
      "time_s": 0.69,
      "vibration_mm_s": 0.38128
    },
    {
      "time_s": 0.7,
      "vibration_mm_s": -0.0881678
    },
    {
      "time_s": 0.71,
      "vibration_mm_s": -0.4563601
    },
    {
      "time_s": 0.72,
      "vibration_mm_s": -0.6250887
    },
    {
      "time_s": 0.73,
      "vibration_mm_s": -0.69344
    },
    {
      "time_s": 0.74,
      "vibration_mm_s": -0.8153325
    },
    {
      "time_s": 0.75,
      "vibration_mm_s": -1.0
    },
    {
      "time_s": 0.76,
      "vibration_mm_s": -1.0867806
    },
    {
      "time_s": 0.77,
      "vibration_mm_s": -0.924594
    },
    {
      "time_s": 0.78,
      "vibration_mm_s": -0.5504818
    },
    {
      "time_s": 0.79,
      "vibration_mm_s": -0.1616739
    },
    {
      "time_s": 0.8,
      "vibration_mm_s": 0.0881678
    },
    {
      "time_s": 0.81,
      "vibration_mm_s": 0.2367539
    },
    {
      "time_s": 0.82,
      "vibration_mm_s": 0.4380812
    },
    {
      "time_s": 0.83,
      "vibration_mm_s": 0.7537983
    },
    {
      "time_s": 0.84,
      "vibration_mm_s": 1.0537386
    },
    {
      "time_s": 0.85,
      "vibration_mm_s": 1.1426585
    },
    {
      "time_s": 0.86,
      "vibration_mm_s": 0.9698565
    },
    {
      "time_s": 0.87,
      "vibration_mm_s": 0.6823678
    },
    {
      "time_s": 0.88,
      "vibration_mm_s": 0.4611361
    },
    {
      "time_s": 0.89,
      "vibration_mm_s": 0.327817
    },
    {
      "time_s": 0.9,
      "vibration_mm_s": 0.1426585
    },
    {
      "time_s": 0.91,
      "vibration_mm_s": -0.2063349
    },
    {
      "time_s": 0.92,
      "vibration_mm_s": -0.6430039
    },
    {
      "time_s": 0.93,
      "vibration_mm_s": -0.958721
    },
    {
      "time_s": 0.94,
      "vibration_mm_s": -1.0233196
    },
    {
      "time_s": 0.95,
      "vibration_mm_s": -0.9118322
    },
    {
      "time_s": 0.96,
      "vibration_mm_s": -0.8037134
    },
    {
      "time_s": 0.97,
      "vibration_mm_s": -0.7717135
    },
    {
      "time_s": 0.98,
      "vibration_mm_s": -0.7033622
    },
    {
      "time_s": 0.99,
      "vibration_mm_s": -0.4447411
    },
    {
      "time_s": 1.0,
      "vibration_mm_s": -0.0
    },
    {
      "time_s": 1.01,
      "vibration_mm_s": 0.4447411
    },
    {
      "time_s": 1.02,
      "vibration_mm_s": 0.7033622
    },
    {
      "time_s": 1.03,
      "vibration_mm_s": 0.7717135
    },
    {
      "time_s": 1.04,
      "vibration_mm_s": 0.8037134
    },
    {
      "time_s": 1.05,
      "vibration_mm_s": 0.9118322
    },
    {
      "time_s": 1.06,
      "vibration_mm_s": 1.0233196
    },
    {
      "time_s": 1.07,
      "vibration_mm_s": 0.958721
    },
    {
      "time_s": 1.08,
      "vibration_mm_s": 0.6430039
    },
    {
      "time_s": 1.09,
      "vibration_mm_s": 0.2063349
    },
    {
      "time_s": 1.1,
      "vibration_mm_s": -0.1426585
    },
    {
      "time_s": 1.11,
      "vibration_mm_s": -0.327817
    },
    {
      "time_s": 1.12,
      "vibration_mm_s": -0.4611361
    },
    {
      "time_s": 1.13,
      "vibration_mm_s": -0.6823678
    },
    {
      "time_s": 1.14,
      "vibration_mm_s": -0.9698565
    },
    {
      "time_s": 1.15,
      "vibration_mm_s": -1.1426585
    },
    {
      "time_s": 1.16,
      "vibration_mm_s": -1.0537386
    },
    {
      "time_s": 1.17,
      "vibration_mm_s": -0.7537983
    },
    {
      "time_s": 1.18,
      "vibration_mm_s": -0.4380812
    },
    {
      "time_s": 1.19,
      "vibration_mm_s": -0.2367539
    },
    {
      "time_s": 1.2,
      "vibration_mm_s": -0.0881678
    },
    {
      "time_s": 1.21,
      "vibration_mm_s": 0.1616739
    },
    {
      "time_s": 1.22,
      "vibration_mm_s": 0.5504818
    },
    {
      "time_s": 1.23,
      "vibration_mm_s": 0.924594
    },
    {
      "time_s": 1.24,
      "vibration_mm_s": 1.0867806
    },
    {
      "time_s": 1.25,
      "vibration_mm_s": 1.0
    },
    {
      "time_s": 1.26,
      "vibration_mm_s": 0.8153325
    },
    {
      "time_s": 1.27,
      "vibration_mm_s": 0.69344
    },
    {
      "time_s": 1.28,
      "vibration_mm_s": 0.6250887
    },
    {
      "time_s": 1.29,
      "vibration_mm_s": 0.4563601
    },
    {
      "time_s": 1.3,
      "vibration_mm_s": 0.0881678
    },
    {
      "time_s": 1.31,
      "vibration_mm_s": -0.38128
    },
    {
      "time_s": 1.32,
      "vibration_mm_s": -0.7374893
    },
    {
      "time_s": 1.33,
      "vibration_mm_s": -0.8642357
    },
    {
      "time_s": 1.34,
      "vibration_mm_s": -0.8483745
    },
    {
      "time_s": 1.35,
      "vibration_mm_s": -0.8573415
    },
    {
      "time_s": 1.36,
      "vibration_mm_s": -0.9322565
    },
    {
      "time_s": 1.37,
      "vibration_mm_s": -0.9356662
    },
    {
      "time_s": 1.38,
      "vibration_mm_s": -0.7144344
    },
    {
      "time_s": 1.39,
      "vibration_mm_s": -0.290217
    },
    {
      "time_s": 1.4,
      "vibration_mm_s": 0.1426585
    },
    {
      "time_s": 1.41,
      "vibration_mm_s": 0.4116991
    },
    {
      "time_s": 1.42,
      "vibration_mm_s": 0.5325666
    },
    {
      "time_s": 1.43,
      "vibration_mm_s": 0.659313
    },
    {
      "time_s": 1.44,
      "vibration_mm_s": 0.8787935
    },
    {
      "time_s": 1.45,
      "vibration_mm_s": 1.0881678
    },
    {
      "time_s": 1.46,
      "vibration_mm_s": 1.0983996
    },
    {
      "time_s": 1.47,
      "vibration_mm_s": 0.8463205
    },
    {
      "time_s": 1.48,
      "vibration_mm_s": 0.4722083
    },
    {
      "time_s": 1.49,
      "vibration_mm_s": 0.1732929
    },
    {
      "time_s": 1.5,
      "vibration_mm_s": 0.0
    },
    {
      "time_s": 1.51,
      "vibration_mm_s": -0.1732929
    },
    {
      "time_s": 1.52,
      "vibration_mm_s": -0.4722083
    },
    {
      "time_s": 1.53,
      "vibration_mm_s": -0.8463205
    },
    {
      "time_s": 1.54,
      "vibration_mm_s": -1.0983996
    },
    {
      "time_s": 1.55,
      "vibration_mm_s": -1.0881678
    },
    {
      "time_s": 1.56,
      "vibration_mm_s": -0.8787935
    },
    {
      "time_s": 1.57,
      "vibration_mm_s": -0.659313
    },
    {
      "time_s": 1.58,
      "vibration_mm_s": -0.5325666
    },
    {
      "time_s": 1.59,
      "vibration_mm_s": -0.4116991
    },
    {
      "time_s": 1.6,
      "vibration_mm_s": -0.1426585
    },
    {
      "time_s": 1.61,
      "vibration_mm_s": 0.290217
    },
    {
      "time_s": 1.62,
      "vibration_mm_s": 0.7144344
    },
    {
      "time_s": 1.63,
      "vibration_mm_s": 0.9356662
    },
    {
      "time_s": 1.64,
      "vibration_mm_s": 0.9322565
    },
    {
      "time_s": 1.65,
      "vibration_mm_s": 0.8573415
    },
    {
      "time_s": 1.66,
      "vibration_mm_s": 0.8483745
    },
    {
      "time_s": 1.67,
      "vibration_mm_s": 0.8642357
    },
    {
      "time_s": 1.68,
      "vibration_mm_s": 0.7374893
    },
    {
      "time_s": 1.69,
      "vibration_mm_s": 0.38128
    },
    {
      "time_s": 1.7,
      "vibration_mm_s": -0.0881678
    },
    {
      "time_s": 1.71,
      "vibration_mm_s": -0.4563601
    },
    {
      "time_s": 1.72,
      "vibration_mm_s": -0.6250887
    },
    {
      "time_s": 1.73,
      "vibration_mm_s": -0.69344
    },
    {
      "time_s": 1.74,
      "vibration_mm_s": -0.8153325
    },
    {
      "time_s": 1.75,
      "vibration_mm_s": -1.0
    },
    {
      "time_s": 1.76,
      "vibration_mm_s": -1.0867806
    },
    {
      "time_s": 1.77,
      "vibration_mm_s": -0.924594
    },
    {
      "time_s": 1.78,
      "vibration_mm_s": -0.5504818
    },
    {
      "time_s": 1.79,
      "vibration_mm_s": -0.1616739
    },
    {
      "time_s": 1.8,
      "vibration_mm_s": 0.0881678
    },
    {
      "time_s": 1.81,
      "vibration_mm_s": 0.2367539
    },
    {
      "time_s": 1.82,
      "vibration_mm_s": 0.4380812
    },
    {
      "time_s": 1.83,
      "vibration_mm_s": 0.7537983
    },
    {
      "time_s": 1.84,
      "vibration_mm_s": 1.0537386
    },
    {
      "time_s": 1.85,
      "vibration_mm_s": 1.1426585
    },
    {
      "time_s": 1.86,
      "vibration_mm_s": 0.9698565
    },
    {
      "time_s": 1.87,
      "vibration_mm_s": 0.6823678
    },
    {
      "time_s": 1.88,
      "vibration_mm_s": 0.4611361
    },
    {
      "time_s": 1.89,
      "vibration_mm_s": 0.327817
    },
    {
      "time_s": 1.9,
      "vibration_mm_s": 0.1426585
    },
    {
      "time_s": 1.91,
      "vibration_mm_s": -0.2063349
    },
    {
      "time_s": 1.92,
      "vibration_mm_s": -0.6430039
    },
    {
      "time_s": 1.93,
      "vibration_mm_s": -0.958721
    },
    {
      "time_s": 1.94,
      "vibration_mm_s": -1.0233196
    },
    {
      "time_s": 1.95,
      "vibration_mm_s": -0.9118322
    },
    {
      "time_s": 1.96,
      "vibration_mm_s": -0.8037134
    },
    {
      "time_s": 1.97,
      "vibration_mm_s": -0.7717135
    },
    {
      "time_s": 1.98,
      "vibration_mm_s": -0.7033622
    },
    {
      "time_s": 1.99,
      "vibration_mm_s": -0.4447411
    }
  ],
  "method": "firls"
}

Code example (Python)

# DataLens.ai example — firls
# Domain: industrial vibration and condition monitoring.
# Input is supplied by “Copy input + code + test”.
import numpy as np
from scipy import signal
# Extract the named vibration feature and sampling rate.
fs = sensor_series["sample_rate_hz"]
t = np.array([r["time_s"] for r in sensor_series["records"]])
x = np.array([r["vibration_mm_s"] for r in sensor_series["records"]])

# Construct a least-squares FIR low-pass response.
taps=signal.firls(21,[0,8,14,50],[1,1,0,0],fs=fs)
assert len(taps)==21 and np.isfinite(taps).all()
print("Expected output verified")