mne.filter.create_filter#
- mne.filter.create_filter(data, sfreq, l_freq, h_freq, filter_length='auto', l_trans_bandwidth='auto', h_trans_bandwidth='auto', method='fir', iir_params=None, phase='zero', fir_window='hamming', fir_design='firwin', verbose=None)[source]#
Create a FIR or IIR filter.
l_freq
andh_freq
are the frequencies below which and above which, respectively, to filter out of the data. Thus the uses are:l_freq < h_freq
: band-pass filterl_freq > h_freq
: band-stop filterl_freq is not None and h_freq is None
: high-pass filterl_freq is None and h_freq is not None
: low-pass filter
- Parameters:
- data
ndarray
, shape (…, n_times) |None
The data that will be filtered. This is used for sanity checking only. If None, no sanity checking related to the length of the signal relative to the filter order will be performed.
- sfreq
float
The sample frequency in Hz.
- l_freq
float
|None
For FIR filters, the lower pass-band edge; for IIR filters, the lower cutoff frequency. If None the data are only low-passed.
- h_freq
float
|None
For FIR filters, the upper pass-band edge; for IIR filters, the upper cutoff frequency. If None the data are only high-passed.
- filter_length
str
|int
Length of the FIR filter to use (if applicable):
‘auto’ (default): The filter length is chosen based on the size of the transition regions (6.6 times the reciprocal of the shortest transition band for fir_window=’hamming’ and fir_design=”firwin2”, and half that for “firwin”).
str: A human-readable time in units of “s” or “ms” (e.g., “10s” or “5500ms”) will be converted to that number of samples if
phase="zero"
, or the shortest power-of-two length at least that duration forphase="zero-double"
.int: Specified length in samples. For fir_design=”firwin”, this should not be used.
- l_trans_bandwidth
float
|str
Width of the transition band at the low cut-off frequency in Hz (high pass or cutoff 1 in bandpass). Can be “auto” (default) to use a multiple of
l_freq
:min(max(l_freq * 0.25, 2), l_freq)
Only used for
method='fir'
.- h_trans_bandwidth
float
|str
Width of the transition band at the high cut-off frequency in Hz (low pass or cutoff 2 in bandpass). Can be “auto” (default in 0.14) to use a multiple of
h_freq
:min(max(h_freq * 0.25, 2.), info['sfreq'] / 2. - h_freq)
Only used for
method='fir'
.- method
str
'fir'
will use overlap-add FIR filtering,'iir'
will use IIR forward-backward filtering (viafiltfilt()
).- iir_params
dict
|None
Dictionary of parameters to use for IIR filtering. If
iir_params=None
andmethod="iir"
, 4th order Butterworth will be used. For more information, seemne.filter.construct_iir_filter()
.- phase
str
Phase of the filter. When
method='fir'
, symmetric linear-phase FIR filters are constructed with the following behaviors whenmethod="fir"
:"zero"
(default)The delay of this filter is compensated for, making it non-causal.
"minimum"
A minimum-phase filter will be constructed by decomposing the zero-phase filter into a minimum-phase and all-pass systems, and then retaining only the minimum-phase system (of the same length as the original zero-phase filter) via
scipy.signal.minimum_phase()
."zero-double"
This is a legacy option for compatibility with MNE <= 0.13. The filter is applied twice, once forward, and once backward (also making it non-causal).
"minimum-half"
This is a legacy option for compatibility with MNE <= 1.6. A minimum-phase filter will be reconstructed from the zero-phase filter with half the length of the original filter.
When
method='iir'
,phase='zero'
(default) or equivalently'zero-double'
constructs and applies IIR filter twice, once forward, and once backward (making it non-causal) usingfiltfilt()
;phase='forward'
will apply the filter once in the forward (causal) direction usinglfilter()
.New in v0.13.
Changed in version 1.7: The behavior for
phase="minimum"
was fixed to use a filter of the requested length and improved suppression.- fir_window
str
The window to use in FIR design, can be “hamming” (default), “hann” (default in 0.13), or “blackman”.
New in v0.15.
- fir_design
str
Can be “firwin” (default) to use
scipy.signal.firwin()
, or “firwin2” to usescipy.signal.firwin2()
. “firwin” uses a time-domain design technique that generally gives improved attenuation using fewer samples than “firwin2”.New in v0.15.
- verbosebool |
str
|int
|None
Control verbosity of the logging output. If
None
, use the default verbosity level. See the logging documentation andmne.verbose()
for details. Should only be passed as a keyword argument.
- data
- Returns:
See also
Notes
Note
For FIR filters, the cutoff frequency, i.e. the -6 dB point, is in the middle of the transition band (when using phase=’zero’ and fir_design=’firwin’). For IIR filters, the cutoff frequency is given by
l_freq
orh_freq
directly, andl_trans_bandwidth
andh_trans_bandwidth
are ignored.Band-pass filter
The frequency response is (approximately) given by:
1-| ---------- | /| | \ |H| | / | | \ | / | | \ | / | | \ 0-|---------- | | -------------- | | | | | | 0 Fs1 Fp1 Fp2 Fs2 Nyq
Where:
Fs1 = Fp1 - l_trans_bandwidth in Hz
Fs2 = Fp2 + h_trans_bandwidth in Hz
Band-stop filter
The frequency response is (approximately) given by:
1-|--------- ---------- | \ / |H| | \ / | \ / | \ / 0-| ----------- | | | | | | 0 Fp1 Fs1 Fs2 Fp2 Nyq
Where
Fs1 = Fp1 + l_trans_bandwidth
andFs2 = Fp2 - h_trans_bandwidth
.Multiple stop bands can be specified using arrays.
Low-pass filter
The frequency response is (approximately) given by:
1-|------------------------ | \ |H| | \ | \ | \ 0-| ---------------- | | | | 0 Fp Fstop Nyq
Where
Fstop = Fp + trans_bandwidth
.High-pass filter
The frequency response is (approximately) given by:
1-| ----------------------- | / |H| | / | / | / 0-|--------- | | | | 0 Fstop Fp Nyq
Where
Fstop = Fp - trans_bandwidth
.New in v0.14.
Examples using mne.filter.create_filter
#
Background information on filtering