Recommended Free Tools
Use scipy.signal.butter to design a low-pass, high-pass, band-pass, or band-stop Butterworth filter, then apply its coefficients with the filtering method that fits your data. For most designs, request second-order sections with output="sos"; set the cutoff in the right frequency units, and choose between causal filtering and forward-backward filtering based on whether phase and edge behavior matter.
Design a Butterworth filter with the right cutoff units
scipy.signal.butter designs digital or analog Butterworth filters and returns filter coefficients. A Butterworth critical frequency is the half-power point, corresponding to −3 dB; it is not necessarily the edge convention used by another filter family, such as an FIR design.
As an Amazon Associate I earn from qualifying purchases.
The documented SciPy 1.18.0 signature is butter(N, Wn, btype='low', analog=False, output='ba', fs=None). Here, N is the filter order; btype selects low-pass, high-pass, band-pass, or band-stop; and analog selects analog rather than digital design.
- Digital, no
fs:Wnis normalized from 0 to 1, with 1 representing the Nyquist frequency. - Digital, with
fs: specifyWnin the same units as the sampling frequency. For example, iffsis in hertz,Wnis in hertz. - Analog:
Wnis angular frequency in radians per second. - Cutoff shape: use a scalar
Wnfor low-pass and high-pass filters, and a pair for band-pass and band-stop filters.
For example, this designs a digital high-pass filter with a 15 Hz critical frequency for data sampled at 1000 Hz:
#1 Best Overall
- 【Precise Conversion of Various Signal Types】 The 4-20ma signal generator is upgraded to support switching various signal modes available under different signal types: mA Current Signal (0 to 24 mA, precision 0.01mA), V Voltage Signal (0 to 24V, 0.01V), XMT Passive Current Signal (0 to 24mA, precision 0.01mA), Hz Pulse Signal (Frequency Output 0 to 9999 Hz, precision 5 digits). The input signal can be converted into an output signal among different physical quantities
- 【2.4 Inch TFT Colorful Screen】 Designed with an adjustable pressing button backlight and a high-definition 240*320 TFT color LCD screen, it makes the signal generator kit for PLC testing easier for users to operate at night and during the day
- 【Built-in 3000 mAh USB Rechargeable】 With a 3000 mAh 3.7V built-in USB rechargeable battery embedded inside (charged via a micro 5V USB port), the function generator can be fully charged within 4-6 hours. Its working length of up to 26 hours allows for a longer working period
- 【Multiple Interfaces to Choose】 Main interface programmable output. Input waveform interface: switchable input current graph display, input voltage graph display. VCA conversion interface: switchable voltage to active current, voltage to passive current, current to voltage. Automatic interface: automatic mode can be set for single ascent, single drop, and loop. PWM interface: Output PWM signal, voltage, frequency, and duty cycle can be set
- 【Programmable Output】 The 4-20 ma signal generator has the output function of auto, continuously changes the size according to the set parameters, and chooses three modes: monotonous rise, monotonous fall, and cycle
from scipy import signal
sos = signal.butter(10, 15, btype="highpass", fs=1000, output="sos")
The values 15 and 1000 are in hertz because fs is supplied. Without fs, the same value 15 would instead be interpreted as a normalized frequency and would not mean 15 Hz. See the SciPy 1.18.0 butter reference for the function parameters and examples.
Use second-order sections for general-purpose filtering
Although butter defaults to output='ba', which returns numerator and denominator polynomial coefficients, SciPy recommends output='sos' for general use. A single high-degree polynomial can be numerically sensitive, particularly for high-order or narrowband designs. Second-order sections represent the filter as a cascade of lower-order sections and are the safer default for applying such filters.
Rank #2
- 【5 Integrated Functions】Integrates current/voltage output, current/voltage measurement, and PWM output(Square Wave) into a single device, eliminating the need for multiple tools and greatly boosting testing efficiency for electronic engineers in daily work
- 【High-Precision Custom Output】Supports customizable 0-24mA current (0.05mA accuracy) and ±12V voltage (0.03V accuracy), perfectly satisfying the high-precision testing demands of industrial control system and electronic equipment
- 【Portable Wireless Use】Equipped with a 1500mAh rechargeable battery for long-lasting cord-free operation; its palm-sized compact design allows easy carrying duringon-site maintenance tasks without being limited by power cords
- 【One-Click Calibration】Built-in one-click calibration function, effectively eliminating errors caused by long-term use or environmental factors, ensuring stable and accurate readings for laboratory testing
- 【Storage & Triple Protection】Features parameter storage to save frequently used settings for quick access; triple protection (short-circuit, reverse connection, charging) ensures safe circuit debugging operations and device durability
For a band-pass or band-stop design, the resulting SOS matrix represents order 2*N as N biquad sections. Do not confuse the number of sections with the order argument supplied to butter.
Choose ba only when a downstream interface requires numerator/denominator coefficients or compatibility makes that representation necessary. For sensitive designs, inspect the filter characteristics rather than assuming polynomial coefficients behave well. SciPy’s Butterworth reference and signal-processing tutorial describe the representation and numerical considerations.
Rank #3
- Upgraded Signal Stability: Seesii Dual-channel DDS arbitrary waveform generator adopts large scale FPGA integrated circuit and high speed MCU microprocessor. The internal circuit adopts active crystal oscillator as benchmark. So the signal stability is greatly strengthened
- Storage And Custom: You can store 99 groups instrument state parameters set by the user, can be called up to Reproduce. Frequency output of Sine wave can be up to 60MHz. 200MSa/s sampling rate. It has 60 positions for saving user-defined waveform. In addition, it has a very good software package that allows you to create your own waves and frequency combinations. After you save them, you can disconnect the unit from the computer and use them for any applications you wish
- High Precise: Using Dual-channel DDS signal and TTL electric level output to generate precise, stable, low distortion output signal. includes Sine wave, Square wave, Triangle wave, Sawtooth wave, Pulse wave, white noise, user-defined waveform etc. each channel can be independently set the parameters.Duty cycle of each channel can be adjusted separately. Precision can be 0.1%
- Frequency Meter: With linear sweep(Max. up to 999.9s) and logarithmic frequency sweep functions.Has a frequency measurement, period measurement, positive and negative pulse width measurement and counting function.The settings allow you to enter up to 20volts
- Lightweght Compact and Portable: With intuitive control panel, you can easy to control.This Signal Generator is the ideal instrument for electronic engineering, laboratories, production lines, teaching and scientific research. This is an important tool for both experts and newcomers
Choose between causal and zero-phase filtering
Use sosfilt for forward, causal processing
For a streaming pipeline or another workflow that processes samples in order, apply the designed SOS coefficients with signal.sosfilt(sos, x). This is a forward filter and can introduce phase delay. It is suitable when causal processing is required, but the output timing may shift relative to the input.
from scipy import signal
sos = signal.butter(10, 15, btype="highpass", fs=1000, output="sos")
y = signal.sosfilt(sos, x)
Use sosfiltfilt for offline, zero-phase processing
When the full record is available and preserving phase is important, signal.sosfiltfilt(sos, x) filters forward and then backward. The two passes remove phase delay, but the effective order is doubled. The backward pass also means this is not a causal streaming method: the operation needs the data segment rather than only the current and past samples.
Rank #4
- Good Precision: the XR2206 function signal generator is precise, with a transparent case box shell for good assemble; Amplitude: 0-3V at 9V DC input; Distortion: less than 1% (at 1KHz); Flatness: +0.05dB 1Hz - 100kHz; Note:this set requires soldering tools; Please consult customer service for a detailed installation video
- Parameters: Voltage Supply: 9-12V DC Input; Waveforms: Square, Sine, Triangle; Impedance: 600 Ohm + 10%; Frequency: 1Hz-1MHz; Amplitude: 0-3V at 9V DC; InputDistortion: less than 1% (at 1KHz); Flatness: +0.05dB 1Hz - 100kaHz
- Sine wave parameters:Amplitude: 0-3V at 9V DC input; Distortion: less than 1% (at 1KHz); Flatness: +0.05dB 1Hz - 100kHz
- Square wave parameters: Amplitude: 8V (no load) at 9V DC Input; Rise Time: less than 50ns (at 1KHz); Fall Time: less than 30ns (at 1KHz); Symmetry: less than 5% (at 1KHz)
- Triangle wave: Amplitude: 0-3V at 9V DC input; Linearity: less than 1% (up to 100 KHz) 10 mA
from scipy import signal
sos = signal.butter(4, 0.125, output="sos")
y = signal.sosfiltfilt(sos, x)
Here, 0.125 is normalized to Nyquist because fs is omitted. sosfiltfilt also handles endpoints using padding; the choice of padding and the record’s length can affect edge output and create transients. Pay particular attention when filtering short records. Consult the sosfiltfilt reference for its padding and endpoint behavior, and the filtfilt reference for the forward-backward method.
Free tools Windows power users keep installed
One-click scans. No signup required.
Set filter order from passband and stopband requirements
If you know the passband edge, stopband edge, allowed passband loss, and required stopband attenuation, use signal.buttord instead of choosing an order by intuition. It returns the minimum Butterworth order and a natural frequency for those constraints. Pass both returned values to butter; when using a digital sampling frequency, supply fs consistently to both functions.
Best Value
- Arbitrary Waveform Generator adopts large scale FPGA integrated circuit and high-speed MCU microprocessor. The internal circuit adopts the active crystal oscillator as the benchmark. So the signal stability is greatly strengthened.
- Using Dual-channel DDS signal and TTL electric level output to generate precise, stable, low distortion output signal. includes Sine wave, Square wave, Triangle wave, Saw toothwave, Pulse wave, white noise, user-defined waveform etc. each channel can be independently set the parameters.
- With linear sweep(Max. up to 999.9s) and logarithmic frequency sweep functions.Has a frequency measurement, period measurement, positive and negative pulse width measurement and counting function.
- Storage feature: You can store 99 groups instrument state parameters set by the user, can be called up to Reproduce.The frequency output of Sine wave can be up to 15MHz. 200MSa/s sampling rate. It has 60 positions for saving user-defined waveform. Waveform Length of each one is 2048 and vertical resolution is 14 bits
- This Signal Generator is the ideal instrument for electronic engineering, laboratories, production lines, teaching and scientific research.
from scipy import signal
N, Wn = signal.buttord(wp, ws, gpass, gstop, fs=fs)
sos = signal.butter(N, Wn, btype="lowpass", fs=fs, output="sos")
In this pattern, wp and ws describe the passband and stopband edges, while gpass and gstop set the passband-loss and stopband-attenuation requirements in decibels. Use values and filter type that match the actual specification; the example’s "lowpass" is appropriate only for a low-pass design. See the buttord reference for parameter details and the documented analog example.
Check the design before relying on its output
- Confirm that digital frequency values use the intended convention: normalized-to-Nyquist when
fsis omitted, or the units offswhen it is supplied. - Confirm that analog designs use radians per second and that the selected filter type matches the desired passband.
- Prefer SOS for high-order or narrowband filters; be cautious about numerical behavior if a downstream requirement forces
ba. - Match the filtering method to the workflow:
sosfiltis forward and causal, whilesosfiltfiltis a two-pass, offline method with edge handling. - For explicit passband and stopband constraints, calculate the order with
buttordand pass its result tobutter.
These details reflect the SciPy 1.18.0 documentation. Check the reference for the SciPy version installed in your environment if its API or behavior differs.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




