Repository: mne-tools/mne-python

Issue:
Need robustness to uncoerceable filter cutoffs in BV headers
I think a recent PR leads to problems with the BV importer if the header file has a string for the filter cutoff.

```
raw = mne.io.brainvision.read_raw_brainvision(fname)

Online software filter detected. Using software filter settings and ignoring hardware values
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-8884b0022b63> in <module>()
      1 fname = "/Users/jona/Downloads/odd_00.vhdr"
----> 2 raw, events = get_raw(fname)

<ipython-input-3-28df6c2be3b1> in get_raw(fname)
      3 
      4 def get_raw(fname):
----> 5     with mne.io.brainvision.read_raw_brainvision(fname, montage=montage, 
      6 #                                                 preload=True
      7                                                 ) as raw:

/Users/jona/tools/mne-python/mne/io/brainvision/brainvision.py in read_raw_brainvision(vhdr_fname, montage, eog, misc, scale, preload, response_trig_shift, event_id, verbose)
    616                           misc=misc, scale=scale, preload=preload,
    617                           response_trig_shift=response_trig_shift,
--> 618                           event_id=event_id, verbose=verbose)

/Users/jona/tools/mne-python/mne/io/brainvision/brainvision.py in __init__(self, vhdr_fname, montage, eog, misc, scale, preload, response_trig_shift, event_id, verbose)

/Users/jona/tools/mne-python/mne/utils.py in verbose(function, *args, **kwargs)
    691         with use_log_level(verbose_level):
    692             return function(*args, **kwargs)
--> 693     return function(*args, **kwargs)
    694 
    695 

/Users/jona/tools/mne-python/mne/io/brainvision/brainvision.py in __init__(self, vhdr_fname, montage, eog, misc, scale, preload, response_trig_shift, event_id, verbose)
     80         vhdr_fname = os.path.abspath(vhdr_fname)
     81         info, fmt, self._order, mrk_fname, montage = _get_vhdr_info(
---> 82             vhdr_fname, eog, misc, scale, montage)
     83         events = _read_vmrk_events(mrk_fname, event_id, response_trig_shift)
     84         _check_update_montage(info, montage)

/Users/jona/tools/mne-python/mne/io/brainvision/brainvision.py in _get_vhdr_info(vhdr_fname, eog, misc, scale, montage)
    498         else:
    499             if hp_s:
--> 500                 info['highpass'] = np.min(np.array(highpass, dtype=np.float))
    501                 info['highpass'] = 1. / info['highpass']
    502             else:

ValueError: could not convert string to float: 'Off'
```

The end of the .vhdr looks like this:

```
S o f t w a r e  F i l t e r s
==============================
#     Low Cutoff [s]   High Cutoff [Hz]   Notch [Hz]
...
63     Off              Off                Off
64     Off              Off                Off
```

(etc)

It worked with this file before.
I have previously worked on a similar issue, but it seems I wasn't thorough enough: #1834

@palday ?

I can in principle do this, but I'd rather work on my long list of outstanding issues.



Discussion:
Jepp, can do - can you post the entire header file so that I can include a test?

---

From: jona-sassenhagen notifications@github.com
Sent: Sep 8, 2016 00:18
To: mne-tools/mne-python
Cc: Phillip Alday; Mention
Subject: [mne-tools/mne-python] Need robustness to uncoerceable filter cutoffs in BV headers (#3571)

I think a recent PR leads to problems with the BV importer if the header file has a string for the filter cutoff.

raw = mne.io.brainvision.read_raw_brainvision(fname)

## Online software filter detected. Using software filter settings and ignoring hardware values

ValueError                                Traceback (most recent call last)
<ipython-input-4-8884b0022b63> in <module>()
      1 fname = "/Users/jona/Downloads/odd_00.vhdr"
----> 2 raw, events = get_raw(fname)

<ipython-input-3-28df6c2be3b1> in get_raw(fname)
      3
      4 def get_raw(fname):
----> 5     with mne.io.brainvision.read_raw_brainvision(fname, montage=montage,
      6 #                                                 preload=True
      7                                                 ) as raw:

/Users/jona/tools/mne-python/mne/io/brainvision/brainvision.py in read_raw_brainvision(vhdr_fname, montage, eog, misc, scale, preload, response_trig_shift, event_id, verbose)
    616                           misc=misc, scale=scale, preload=preload,
    617                           response_trig_shift=response_trig_shift,
--> 618                           event_id=event_id, verbose=verbose)

/Users/jona/tools/mne-python/mne/io/brainvision/brainvision.py in **init**(self, vhdr_fname, montage, eog, misc, scale, preload, response_trig_shift, event_id, verbose)

/Users/jona/tools/mne-python/mne/utils.py in verbose(function, _args, *_kwargs)
    691         with use_log_level(verbose_level):
    692             return function(_args, *_kwargs)
--> 693     return function(_args, *_kwargs)
    694
    695

/Users/jona/tools/mne-python/mne/io/brainvision/brainvision.py in **init**(self, vhdr_fname, montage, eog, misc, scale, preload, response_trig_shift, event_id, verbose)
     80         vhdr_fname = os.path.abspath(vhdr_fname)
     81         info, fmt, self._order, mrk_fname, montage = _get_vhdr_info(
---> 82             vhdr_fname, eog, misc, scale, montage)
     83         events = _read_vmrk_events(mrk_fname, event_id, response_trig_shift)
     84         _check_update_montage(info, montage)

/Users/jona/tools/mne-python/mne/io/brainvision/brainvision.py in _get_vhdr_info(vhdr_fname, eog, misc, scale, montage)
    498         else:
    499             if hp_s:
--> 500                 info['highpass'] = np.min(np.array(highpass, dtype=np.float))
    501                 info['highpass'] = 1. / info['highpass']
    502             else:

ValueError: could not convert string to float: 'Off'

The end of the .vhdr looks like this:

# S o f t w a r e  F i l t e r s

# Low Cutoff [s]   High Cutoff [Hz]   Notch [Hz]

...
63     Off              Off                Off
64     Off              Off                Off

(etc)

It worked with this file before.
I have previously worked on a similar issue, but it seems I wasn't thorough enough: #1834https://github.com/mne-tools/mne-python/pull/1834

@paldayhttps://github.com/palday ?

I can in principle do this, but I'd rather work on my long list of outstanding issues.

## 

You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/mne-tools/mne-python/issues/3571, or mute the threadhttps://github.com/notifications/unsubscribe-auth/ABmZ11bMuNQsn3yW8ULdJIQUzyPBVW7tks5qnzgWgaJpZM4J3aoX.

http://pastebin.com/gXdD7qss

This was from some kind of test run IIRC.

It worked previously because software filters were ignored -- if you had something similar in your hardware filters (some `Off` but some on), it would have failed there as well because `Off` was only handled in those cases where it was the sole value. 


Resolving patch:
diff --git a/mne/io/brainvision/brainvision.py b/mne/io/brainvision/brainvision.py
--- a/mne/io/brainvision/brainvision.py
+++ b/mne/io/brainvision/brainvision.py
@@ -496,13 +496,36 @@ def _get_vhdr_info(vhdr_fname, eog, misc, scale, montage):
                 if hp_s:
                     info['highpass'] = 1. / info['highpass']
         else:
+            heterogeneous_hp_filter = True
             if hp_s:
+                # We convert channels with disabled filters to having
+                # highpass relaxed / no filters
+                highpass = [float(filt) if filt not in ('NaN', 'Off', 'DC')
+                            else np.Inf for filt in highpass]
                 info['highpass'] = np.min(np.array(highpass, dtype=np.float))
+                # Coveniently enough 1 / np.Inf = 0.0, so this works for
+                # DC / no highpass filter
                 info['highpass'] = 1. / info['highpass']
+
+                # not exactly the cleanest use of FP, but this makes us
+                # more conservative in *not* warning.
+                if info['highpass'] == 0.0:
+                    # not actually heterogeneous in effect
+                    # ... just heterogeneously disabled
+                    heterogeneous_hp_filter = False
             else:
+                highpass = [float(filt) if filt not in ('NaN', 'Off', 'DC')
+                            else 0.0 for filt in highpass]
                 info['highpass'] = np.max(np.array(highpass, dtype=np.float))
-            warn('Channels contain different highpass filters. Highest filter '
-                 'setting will be stored.')
+                if info['highpass'] == 0.0:
+                    # not actually heterogeneous in effect
+                    # ... just heterogeneously disabled
+                    heterogeneous_hp_filter = False
+            if heterogeneous_hp_filter:
+                warn('Channels contain different highpass filters. '
+                     'Highest filter setting (%0.2f Hz) will be stored.'
+                     % info['highpass'])
+
         if len(lowpass) == 0:
             pass
         elif len(set(lowpass)) == 1:
@@ -513,9 +536,41 @@ def _get_vhdr_info(vhdr_fname, eog, misc, scale, montage):
                 if lp_s:
                     info['lowpass'] = 1. / info['lowpass']
         else:
-            info['lowpass'] = np.min(np.array(lowpass, dtype=np.float))
-            warn('Channels contain different lowpass filters. Lowest filter '
-                 'setting will be stored.')
+            heterogeneous_lp_filter = True
+            if lp_s:
+                # We convert channels with disabled filters to having
+                # infinitely relaxed / no filters
+                lowpass = [float(filt) if filt not in ('NaN', 'Off')
+                           else 0.0 for filt in lowpass]
+                info['lowpass'] = np.max(np.array(lowpass, dtype=np.float))
+                try:
+                    info['lowpass'] = 1. / info['lowpass']
+                except ZeroDivisionError:
+                    # No lowpass actually set (always Off or equivalent)
+                    # so we let lowpass be set in _empty_info
+                    del info['lowpass']
+                    # not actually heterogeneous in effect
+                    # ... just heterogeneously disabled
+                    heterogeneous_lp_filter = False
+            else:
+                # We convert channels with disabled filters to having
+                # infinitely relaxed / no filters
+                lowpass = [float(filt) if filt not in ('NaN', 'Off')
+                           else np.Inf for filt in lowpass]
+                info['lowpass'] = np.min(np.array(lowpass, dtype=np.float))
+
+                if np.isinf(info['lowpass']):
+                    # No lowpass actually set (always Off or equivalent)
+                    # so we let lowpass be set in _empty_info
+                    del info['lowpass']
+                    # not actually heterogeneous in effect
+                    # ... just heterogeneously disabled
+                    heterogeneous_lp_filter = False
+
+            if heterogeneous_lp_filter:
+                warn('Channels contain different lowpass filters. '
+                     'Lowest filter setting (%0.2f Hz) will be stored.'
+                     % info['lowpass'])
 
     # locate EEG and marker files
     path = os.path.dirname(vhdr_fname)


Test patch:
diff --git a/mne/io/brainvision/tests/data/test_highpass_hz.vhdr b/mne/io/brainvision/tests/data/test_highpass_hz.vhdr
new file mode 100644
--- /dev/null
+++ b/mne/io/brainvision/tests/data/test_highpass_hz.vhdr
@@ -0,0 +1,103 @@
+Brain Vision Data Exchange Header File Version 1.0
+; Data created by the Vision Recorder
+
+[Common Infos]
+Codepage=UTF-8
+DataFile=test.eeg
+MarkerFile=test.vmrk
+DataFormat=BINARY
+; Data orientation: MULTIPLEXED=ch1,pt1, ch2,pt1 ...
+DataOrientation=MULTIPLEXED
+NumberOfChannels=32
+; Sampling interval in microseconds
+SamplingInterval=1000
+
+[Binary Infos]
+BinaryFormat=INT_16
+
+[Channel Infos]
+; Each entry: Ch<Channel number>=<Name>,<Reference channel name>,
+; <Resolution in "Unit">,<Unit>, Future extensions..
+; Fields are delimited by commas, some fields might be omitted (empty).
+; Commas in channel names are coded as "\1".
+Ch1=FP1,,0.5,µV
+Ch2=FP2,,0.5,µV
+Ch3=F3,,0.5,µV
+Ch4=F4,,0.5,µV
+Ch5=C3,,0.5,µV
+Ch6=C4,,0.5,µV
+Ch7=P3,,0.5,µV
+Ch8=P4,,0.5,µV
+Ch9=O1,,0.5,µV
+Ch10=O2,,0.5,µV
+Ch11=F7,,0.5,µV
+Ch12=F8,,0.5,µV
+Ch13=P7,,0.5,µV
+Ch14=P8,,0.5,µV
+Ch15=Fz,,0.5,µV
+Ch16=FCz,,0.5,µV
+Ch17=Cz,,0.5,µV
+Ch18=CPz,,0.5,µV
+Ch19=Pz,,0.5,µV
+Ch20=POz,,0.5,µV
+Ch21=FC1,,0.5,µV
+Ch22=FC2,,0.5,µV
+Ch23=CP1,,0.5,µV
+Ch24=CP2,,0.5,µV
+Ch25=FC5,,0.5,µV
+Ch26=FC6,,0.5,µV
+Ch27=CP5,,0.5,µV
+Ch28=CP6,,0.5,µV
+Ch29=HL,,0.5,µV
+Ch30=HR,,0.5,µV
+Ch31=Vb,,0.5,µV
+Ch32=ReRef,,0.5,µV
+
+[Comment]
+
+A m p l i f i e r  S e t u p
+============================
+Number of channels: 32
+Sampling Rate [Hz]: 1000
+Sampling Interval [µS]: 1000
+
+Channels
+--------
+#     Name      Phys. Chn.    Resolution / Unit   Low Cutoff [Hz]   High Cutoff [Hz]   Notch [Hz]    Series Res. [kOhm] Gradient         Offset
+1     FP1         1                0.5 µV             10              250              Off                0
+2     FP2         2                0.5 µV             10              250              Off                0
+3     F3          3                0.5 µV             10              250              Off                0
+4     F4          4                0.5 µV             10              250              Off                0
+5     C3          5                0.5 µV             10              250              Off                0
+6     C4          6                0.5 µV             10              250              Off                0
+7     P3          7                0.5 µV             10              250              Off                0
+8     P4          8                0.5 µV             10              250              Off                0
+9     O1          9                0.5 µV             10              250              Off                0
+10    O2          10               0.5 µV             10              250              Off                0
+11    F7          11               0.5 µV             10              250              Off                0
+12    F8          12               0.5 µV             10              250              Off                0
+13    P7          13               0.5 µV             10              250              Off                0
+14    P8          14               0.5 µV             10              250              Off                0
+15    Fz          15               0.5 µV             10              250              Off                0
+16    FCz         16               0.5 µV             10              250              Off                0
+17    Cz          17               0.5 µV             10              250              Off                0
+18    CPz         18               0.5 µV             10              250              Off                0
+19    Pz          19               0.5 µV             10              250              Off                0
+20    POz         20               0.5 µV             10              250              Off                0
+21    FC1         21               0.5 µV             10              250              Off                0
+22    FC2         22               0.5 µV             10              250              Off                0
+23    CP1         23               0.5 µV             10              250              Off                0
+24    CP2         24               0.5 µV             10              250              Off                0
+25    FC5         25               0.5 µV             10              250              Off                0
+26    FC6         26               0.5 µV             10              250              Off                0
+27    CP5         27               0.5 µV             10              250              Off                0
+28    CP6         28               0.5 µV             10              250              Off                0
+29    HL          29               0.5 µV             10              250              Off                0
+30    HR          30               0.5 µV             10              250              Off                0
+31    Vb          31               0.5 µV             10              250              Off                0
+32    ReRef       32               0.5 µV             10              250              Off                0
+
+S o f t w a r e  F i l t e r s
+==============================
+Disabled
+
diff --git a/mne/io/brainvision/tests/data/test_lowpass_s.vhdr b/mne/io/brainvision/tests/data/test_lowpass_s.vhdr
new file mode 100755
--- /dev/null
+++ b/mne/io/brainvision/tests/data/test_lowpass_s.vhdr
@@ -0,0 +1,103 @@
+Brain Vision Data Exchange Header File Version 1.0
+; Data created by the Vision Recorder
+
+[Common Infos]
+Codepage=UTF-8
+DataFile=test.eeg
+MarkerFile=test.vmrk
+DataFormat=BINARY
+; Data orientation: MULTIPLEXED=ch1,pt1, ch2,pt1 ...
+DataOrientation=MULTIPLEXED
+NumberOfChannels=32
+; Sampling interval in microseconds
+SamplingInterval=1000
+
+[Binary Infos]
+BinaryFormat=INT_16
+
+[Channel Infos]
+; Each entry: Ch<Channel number>=<Name>,<Reference channel name>,
+; <Resolution in "Unit">,<Unit>, Future extensions..
+; Fields are delimited by commas, some fields might be omitted (empty).
+; Commas in channel names are coded as "\1".
+Ch1=FP1,,0.5,µV
+Ch2=FP2,,0.5,µV
+Ch3=F3,,0.5,µV
+Ch4=F4,,0.5,µV
+Ch5=C3,,0.5,µV
+Ch6=C4,,0.5,µV
+Ch7=P3,,0.5,µV
+Ch8=P4,,0.5,µV
+Ch9=O1,,0.5,µV
+Ch10=O2,,0.5,µV
+Ch11=F7,,0.5,µV
+Ch12=F8,,0.5,µV
+Ch13=P7,,0.5,µV
+Ch14=P8,,0.5,µV
+Ch15=Fz,,0.5,µV
+Ch16=FCz,,0.5,µV
+Ch17=Cz,,0.5,µV
+Ch18=CPz,,0.5,µV
+Ch19=Pz,,0.5,µV
+Ch20=POz,,0.5,µV
+Ch21=FC1,,0.5,µV
+Ch22=FC2,,0.5,µV
+Ch23=CP1,,0.5,µV
+Ch24=CP2,,0.5,µV
+Ch25=FC5,,0.5,µV
+Ch26=FC6,,0.5,µV
+Ch27=CP5,,0.5,µV
+Ch28=CP6,,0.5,µV
+Ch29=HL,,0.5,µV
+Ch30=HR,,0.5,µV
+Ch31=Vb,,0.5,µV
+Ch32=ReRef,,0.5,µV
+
+[Comment]
+
+A m p l i f i e r  S e t u p
+============================
+Number of channels: 32
+Sampling Rate [Hz]: 1000
+Sampling Interval [µS]: 1000
+
+Channels
+--------
+#     Name      Phys. Chn.    Resolution / Unit   Low Cutoff [s]   High Cutoff [s]   Notch [Hz]    Series Res. [kOhm] Gradient         Offset
+1     FP1         1                0.5 µV             10              0.004              Off                0
+2     FP2         2                0.5 µV             10              0.004              Off                0
+3     F3          3                0.5 µV             10              0.004              Off                0
+4     F4          4                0.5 µV             10              0.004              Off                0
+5     C3          5                0.5 µV             10              0.004              Off                0
+6     C4          6                0.5 µV             10              0.004              Off                0
+7     P3          7                0.5 µV             10              0.004              Off                0
+8     P4          8                0.5 µV             10              0.004              Off                0
+9     O1          9                0.5 µV             10              0.004              Off                0
+10    O2          10               0.5 µV             10              0.004              Off                0
+11    F7          11               0.5 µV             10              0.004              Off                0
+12    F8          12               0.5 µV             10              0.004              Off                0
+13    P7          13               0.5 µV             10              0.004              Off                0
+14    P8          14               0.5 µV             10              0.004              Off                0
+15    Fz          15               0.5 µV             10              0.004              Off                0
+16    FCz         16               0.5 µV             10              0.004              Off                0
+17    Cz          17               0.5 µV             10              0.004              Off                0
+18    CPz         18               0.5 µV             10              0.004              Off                0
+19    Pz          19               0.5 µV             10              0.004              Off                0
+20    POz         20               0.5 µV             10              0.004              Off                0
+21    FC1         21               0.5 µV             10              0.004              Off                0
+22    FC2         22               0.5 µV             10              0.004              Off                0
+23    CP1         23               0.5 µV             10              0.004              Off                0
+24    CP2         24               0.5 µV             10              0.004              Off                0
+25    FC5         25               0.5 µV             10              0.004              Off                0
+26    FC6         26               0.5 µV             10              0.004              Off                0
+27    CP5         27               0.5 µV             10              0.004              Off                0
+28    CP6         28               0.5 µV             10              0.004              Off                0
+29    HL          29               0.5 µV             10              0.004              Off                0
+30    HR          30               0.5 µV             10              0.004              Off                0
+31    Vb          31               0.5 µV             10              0.004              Off                0
+32    ReRef       32               0.5 µV             10              0.004              Off                0
+
+S o f t w a r e  F i l t e r s
+==============================
+Disabled
+
diff --git a/mne/io/brainvision/tests/data/test_mixed_highpass.vhdr b/mne/io/brainvision/tests/data/test_mixed_highpass.vhdr
new file mode 100755
--- /dev/null
+++ b/mne/io/brainvision/tests/data/test_mixed_highpass.vhdr
@@ -0,0 +1,103 @@
+Brain Vision Data Exchange Header File Version 1.0
+; Data created by the Vision Recorder
+
+[Common Infos]
+Codepage=UTF-8
+DataFile=test.eeg
+MarkerFile=test.vmrk
+DataFormat=BINARY
+; Data orientation: MULTIPLEXED=ch1,pt1, ch2,pt1 ...
+DataOrientation=MULTIPLEXED
+NumberOfChannels=32
+; Sampling interval in microseconds
+SamplingInterval=1000
+
+[Binary Infos]
+BinaryFormat=INT_16
+
+[Channel Infos]
+; Each entry: Ch<Channel number>=<Name>,<Reference channel name>,
+; <Resolution in "Unit">,<Unit>, Future extensions..
+; Fields are delimited by commas, some fields might be omitted (empty).
+; Commas in channel names are coded as "\1".
+Ch1=FP1,,0.5,µV
+Ch2=FP2,,0.5,µV
+Ch3=F3,,0.5,µV
+Ch4=F4,,0.5,µV
+Ch5=C3,,0.5,µV
+Ch6=C4,,0.5,µV
+Ch7=P3,,0.5,µV
+Ch8=P4,,0.5,µV
+Ch9=O1,,0.5,µV
+Ch10=O2,,0.5,µV
+Ch11=F7,,0.5,µV
+Ch12=F8,,0.5,µV
+Ch13=P7,,0.5,µV
+Ch14=P8,,0.5,µV
+Ch15=Fz,,0.5,µV
+Ch16=FCz,,0.5,µV
+Ch17=Cz,,0.5,µV
+Ch18=CPz,,0.5,µV
+Ch19=Pz,,0.5,µV
+Ch20=POz,,0.5,µV
+Ch21=FC1,,0.5,µV
+Ch22=FC2,,0.5,µV
+Ch23=CP1,,0.5,µV
+Ch24=CP2,,0.5,µV
+Ch25=FC5,,0.5,µV
+Ch26=FC6,,0.5,µV
+Ch27=CP5,,0.5,µV
+Ch28=CP6,,0.5,µV
+Ch29=HL,,0.5,µV
+Ch30=HR,,0.5,µV
+Ch31=Vb,,0.5,µV
+Ch32=ReRef,,0.5,µV
+
+[Comment]
+
+A m p l i f i e r  S e t u p
+============================
+Number of channels: 32
+Sampling Rate [Hz]: 1000
+Sampling Interval [µS]: 1000
+
+Channels
+--------
+#     Name      Phys. Chn.    Resolution / Unit   Low Cutoff [s]   High Cutoff [Hz]   Notch [Hz]    Series Res. [kOhm] Gradient         Offset
+1     FP1         1                0.5 µV             10              250              Off                0
+2     FP2         2                0.5 µV             10              250              Off                0
+3     F3          3                0.5 µV             10              250              Off                0
+4     F4          4                0.5 µV             10              250              Off                0
+5     C3          5                0.5 µV             10              250              Off                0
+6     C4          6                0.5 µV             10              250              Off                0
+7     P3          7                0.5 µV             10              250              Off                0
+8     P4          8                0.5 µV             10              250              Off                0
+9     O1          9                0.5 µV             10              250              Off                0
+10    O2          10               0.5 µV             10              250              Off                0
+11    F7          11               0.5 µV             10              250              Off                0
+12    F8          12               0.5 µV             10              250              Off                0
+13    P7          13               0.5 µV             10              250              Off                0
+14    P8          14               0.5 µV             10              250              Off                0
+15    Fz          15               0.5 µV             10              250              Off                0
+16    FCz         16               0.5 µV             10              250              Off                0
+17    Cz          17               0.5 µV             10              250              Off                0
+18    CPz         18               0.5 µV             10              250              Off                0
+19    Pz          19               0.5 µV             10              250              Off                0
+20    POz         20               0.5 µV             10              250              Off                0
+21    FC1         21               0.5 µV             10              250              Off                0
+22    FC2         22               0.5 µV             10              250              Off                0
+23    CP1         23               0.5 µV             10              250              Off                0
+24    CP2         24               0.5 µV             10              250              Off                0
+25    FC5         25               0.5 µV             10              250              Off                0
+26    FC6         26               0.5 µV             10              250              Off                0
+27    CP5         27               0.5 µV             10              250              Off                0
+28    CP6         28               0.5 µV             10              250              Off                0
+29    HL          29               0.5 µV             10              250              Off                0
+30    HR          30               0.5 µV             10              250              Off                0
+31    Vb          31               0.5 µV             10              250              Off                0
+32    ReRef       32               0.5 µV              5              250              Off                0
+
+S o f t w a r e  F i l t e r s
+==============================
+Disabled
+
diff --git a/mne/io/brainvision/tests/data/test_mixed_highpass_hz.vhdr b/mne/io/brainvision/tests/data/test_mixed_highpass_hz.vhdr
new file mode 100644
--- /dev/null
+++ b/mne/io/brainvision/tests/data/test_mixed_highpass_hz.vhdr
@@ -0,0 +1,103 @@
+Brain Vision Data Exchange Header File Version 1.0
+; Data created by the Vision Recorder
+
+[Common Infos]
+Codepage=UTF-8
+DataFile=test.eeg
+MarkerFile=test.vmrk
+DataFormat=BINARY
+; Data orientation: MULTIPLEXED=ch1,pt1, ch2,pt1 ...
+DataOrientation=MULTIPLEXED
+NumberOfChannels=32
+; Sampling interval in microseconds
+SamplingInterval=1000
+
+[Binary Infos]
+BinaryFormat=INT_16
+
+[Channel Infos]
+; Each entry: Ch<Channel number>=<Name>,<Reference channel name>,
+; <Resolution in "Unit">,<Unit>, Future extensions..
+; Fields are delimited by commas, some fields might be omitted (empty).
+; Commas in channel names are coded as "\1".
+Ch1=FP1,,0.5,µV
+Ch2=FP2,,0.5,µV
+Ch3=F3,,0.5,µV
+Ch4=F4,,0.5,µV
+Ch5=C3,,0.5,µV
+Ch6=C4,,0.5,µV
+Ch7=P3,,0.5,µV
+Ch8=P4,,0.5,µV
+Ch9=O1,,0.5,µV
+Ch10=O2,,0.5,µV
+Ch11=F7,,0.5,µV
+Ch12=F8,,0.5,µV
+Ch13=P7,,0.5,µV
+Ch14=P8,,0.5,µV
+Ch15=Fz,,0.5,µV
+Ch16=FCz,,0.5,µV
+Ch17=Cz,,0.5,µV
+Ch18=CPz,,0.5,µV
+Ch19=Pz,,0.5,µV
+Ch20=POz,,0.5,µV
+Ch21=FC1,,0.5,µV
+Ch22=FC2,,0.5,µV
+Ch23=CP1,,0.5,µV
+Ch24=CP2,,0.5,µV
+Ch25=FC5,,0.5,µV
+Ch26=FC6,,0.5,µV
+Ch27=CP5,,0.5,µV
+Ch28=CP6,,0.5,µV
+Ch29=HL,,0.5,µV
+Ch30=HR,,0.5,µV
+Ch31=Vb,,0.5,µV
+Ch32=ReRef,,0.5,µV
+
+[Comment]
+
+A m p l i f i e r  S e t u p
+============================
+Number of channels: 32
+Sampling Rate [Hz]: 1000
+Sampling Interval [µS]: 1000
+
+Channels
+--------
+#     Name      Phys. Chn.    Resolution / Unit   Low Cutoff [Hz]   High Cutoff [Hz]   Notch [Hz]    Series Res. [kOhm] Gradient         Offset
+1     FP1         1                0.5 µV             10              250              Off                0
+2     FP2         2                0.5 µV             10              250              Off                0
+3     F3          3                0.5 µV             10              250              Off                0
+4     F4          4                0.5 µV             10              250              Off                0
+5     C3          5                0.5 µV             10              250              Off                0
+6     C4          6                0.5 µV             10              250              Off                0
+7     P3          7                0.5 µV             10              250              Off                0
+8     P4          8                0.5 µV             10              250              Off                0
+9     O1          9                0.5 µV             10              250              Off                0
+10    O2          10               0.5 µV             10              250              Off                0
+11    F7          11               0.5 µV             10              250              Off                0
+12    F8          12               0.5 µV             10              250              Off                0
+13    P7          13               0.5 µV             10              250              Off                0
+14    P8          14               0.5 µV             10              250              Off                0
+15    Fz          15               0.5 µV             10              250              Off                0
+16    FCz         16               0.5 µV             10              250              Off                0
+17    Cz          17               0.5 µV             10              250              Off                0
+18    CPz         18               0.5 µV             10              250              Off                0
+19    Pz          19               0.5 µV             10              250              Off                0
+20    POz         20               0.5 µV             10              250              Off                0
+21    FC1         21               0.5 µV             10              250              Off                0
+22    FC2         22               0.5 µV             10              250              Off                0
+23    CP1         23               0.5 µV             10              250              Off                0
+24    CP2         24               0.5 µV             10              250              Off                0
+25    FC5         25               0.5 µV             10              250              Off                0
+26    FC6         26               0.5 µV             10              250              Off                0
+27    CP5         27               0.5 µV             10              250              Off                0
+28    CP6         28               0.5 µV             10              250              Off                0
+29    HL          29               0.5 µV             10              250              Off                0
+30    HR          30               0.5 µV             10              250              Off                0
+31    Vb          31               0.5 µV             10              250              Off                0
+32    ReRef       32               0.5 µV              5              250              Off                0
+
+S o f t w a r e  F i l t e r s
+==============================
+Disabled
+
diff --git a/mne/io/brainvision/tests/data/test_mixed_lowpass.vhdr b/mne/io/brainvision/tests/data/test_mixed_lowpass.vhdr
new file mode 100644
--- /dev/null
+++ b/mne/io/brainvision/tests/data/test_mixed_lowpass.vhdr
@@ -0,0 +1,103 @@
+Brain Vision Data Exchange Header File Version 1.0
+; Data created by the Vision Recorder
+
+[Common Infos]
+Codepage=UTF-8
+DataFile=test.eeg
+MarkerFile=test.vmrk
+DataFormat=BINARY
+; Data orientation: MULTIPLEXED=ch1,pt1, ch2,pt1 ...
+DataOrientation=MULTIPLEXED
+NumberOfChannels=32
+; Sampling interval in microseconds
+SamplingInterval=1000
+
+[Binary Infos]
+BinaryFormat=INT_16
+
+[Channel Infos]
+; Each entry: Ch<Channel number>=<Name>,<Reference channel name>,
+; <Resolution in "Unit">,<Unit>, Future extensions..
+; Fields are delimited by commas, some fields might be omitted (empty).
+; Commas in channel names are coded as "\1".
+Ch1=FP1,,0.5,µV
+Ch2=FP2,,0.5,µV
+Ch3=F3,,0.5,µV
+Ch4=F4,,0.5,µV
+Ch5=C3,,0.5,µV
+Ch6=C4,,0.5,µV
+Ch7=P3,,0.5,µV
+Ch8=P4,,0.5,µV
+Ch9=O1,,0.5,µV
+Ch10=O2,,0.5,µV
+Ch11=F7,,0.5,µV
+Ch12=F8,,0.5,µV
+Ch13=P7,,0.5,µV
+Ch14=P8,,0.5,µV
+Ch15=Fz,,0.5,µV
+Ch16=FCz,,0.5,µV
+Ch17=Cz,,0.5,µV
+Ch18=CPz,,0.5,µV
+Ch19=Pz,,0.5,µV
+Ch20=POz,,0.5,µV
+Ch21=FC1,,0.5,µV
+Ch22=FC2,,0.5,µV
+Ch23=CP1,,0.5,µV
+Ch24=CP2,,0.5,µV
+Ch25=FC5,,0.5,µV
+Ch26=FC6,,0.5,µV
+Ch27=CP5,,0.5,µV
+Ch28=CP6,,0.5,µV
+Ch29=HL,,0.5,µV
+Ch30=HR,,0.5,µV
+Ch31=Vb,,0.5,µV
+Ch32=ReRef,,0.5,µV
+
+[Comment]
+
+A m p l i f i e r  S e t u p
+============================
+Number of channels: 32
+Sampling Rate [Hz]: 1000
+Sampling Interval [µS]: 1000
+
+Channels
+--------
+#     Name      Phys. Chn.    Resolution / Unit   Low Cutoff [s]   High Cutoff [Hz]   Notch [Hz]    Series Res. [kOhm] Gradient         Offset
+1     FP1         1                0.5 µV             10              250              Off                0
+2     FP2         2                0.5 µV             10              250              Off                0
+3     F3          3                0.5 µV             10              250              Off                0
+4     F4          4                0.5 µV             10              250              Off                0
+5     C3          5                0.5 µV             10              250              Off                0
+6     C4          6                0.5 µV             10              250              Off                0
+7     P3          7                0.5 µV             10              250              Off                0
+8     P4          8                0.5 µV             10              250              Off                0
+9     O1          9                0.5 µV             10              250              Off                0
+10    O2          10               0.5 µV             10              250              Off                0
+11    F7          11               0.5 µV             10              250              Off                0
+12    F8          12               0.5 µV             10              250              Off                0
+13    P7          13               0.5 µV             10              250              Off                0
+14    P8          14               0.5 µV             10              250              Off                0
+15    Fz          15               0.5 µV             10              250              Off                0
+16    FCz         16               0.5 µV             10              250              Off                0
+17    Cz          17               0.5 µV             10              250              Off                0
+18    CPz         18               0.5 µV             10              250              Off                0
+19    Pz          19               0.5 µV             10              250              Off                0
+20    POz         20               0.5 µV             10              250              Off                0
+21    FC1         21               0.5 µV             10              250              Off                0
+22    FC2         22               0.5 µV             10              250              Off                0
+23    CP1         23               0.5 µV             10              250              Off                0
+24    CP2         24               0.5 µV             10              250              Off                0
+25    FC5         25               0.5 µV             10              250              Off                0
+26    FC6         26               0.5 µV             10              250              Off                0
+27    CP5         27               0.5 µV             10              250              Off                0
+28    CP6         28               0.5 µV             10              250              Off                0
+29    HL          29               0.5 µV             10              250              Off                0
+30    HR          30               0.5 µV             10              250              Off                0
+31    Vb          31               0.5 µV             10              250              Off                0
+32    ReRef       32               0.5 µV             10              125              Off                0
+
+S o f t w a r e  F i l t e r s
+==============================
+Disabled
+
diff --git a/mne/io/brainvision/tests/data/test_mixed_lowpass_s.vhdr b/mne/io/brainvision/tests/data/test_mixed_lowpass_s.vhdr
new file mode 100644
--- /dev/null
+++ b/mne/io/brainvision/tests/data/test_mixed_lowpass_s.vhdr
@@ -0,0 +1,103 @@
+Brain Vision Data Exchange Header File Version 1.0
+; Data created by the Vision Recorder
+
+[Common Infos]
+Codepage=UTF-8
+DataFile=test.eeg
+MarkerFile=test.vmrk
+DataFormat=BINARY
+; Data orientation: MULTIPLEXED=ch1,pt1, ch2,pt1 ...
+DataOrientation=MULTIPLEXED
+NumberOfChannels=32
+; Sampling interval in microseconds
+SamplingInterval=1000
+
+[Binary Infos]
+BinaryFormat=INT_16
+
+[Channel Infos]
+; Each entry: Ch<Channel number>=<Name>,<Reference channel name>,
+; <Resolution in "Unit">,<Unit>, Future extensions..
+; Fields are delimited by commas, some fields might be omitted (empty).
+; Commas in channel names are coded as "\1".
+Ch1=FP1,,0.5,µV
+Ch2=FP2,,0.5,µV
+Ch3=F3,,0.5,µV
+Ch4=F4,,0.5,µV
+Ch5=C3,,0.5,µV
+Ch6=C4,,0.5,µV
+Ch7=P3,,0.5,µV
+Ch8=P4,,0.5,µV
+Ch9=O1,,0.5,µV
+Ch10=O2,,0.5,µV
+Ch11=F7,,0.5,µV
+Ch12=F8,,0.5,µV
+Ch13=P7,,0.5,µV
+Ch14=P8,,0.5,µV
+Ch15=Fz,,0.5,µV
+Ch16=FCz,,0.5,µV
+Ch17=Cz,,0.5,µV
+Ch18=CPz,,0.5,µV
+Ch19=Pz,,0.5,µV
+Ch20=POz,,0.5,µV
+Ch21=FC1,,0.5,µV
+Ch22=FC2,,0.5,µV
+Ch23=CP1,,0.5,µV
+Ch24=CP2,,0.5,µV
+Ch25=FC5,,0.5,µV
+Ch26=FC6,,0.5,µV
+Ch27=CP5,,0.5,µV
+Ch28=CP6,,0.5,µV
+Ch29=HL,,0.5,µV
+Ch30=HR,,0.5,µV
+Ch31=Vb,,0.5,µV
+Ch32=ReRef,,0.5,µV
+
+[Comment]
+
+A m p l i f i e r  S e t u p
+============================
+Number of channels: 32
+Sampling Rate [Hz]: 1000
+Sampling Interval [µS]: 1000
+
+Channels
+--------
+#     Name      Phys. Chn.    Resolution / Unit   Low Cutoff [s]   High Cutoff [s]   Notch [Hz]    Series Res. [kOhm] Gradient         Offset
+1     FP1         1                0.5 µV             10              0.004              Off                0
+2     FP2         2                0.5 µV             10              0.004              Off                0
+3     F3          3                0.5 µV             10              0.004              Off                0
+4     F4          4                0.5 µV             10              0.004              Off                0
+5     C3          5                0.5 µV             10              0.004              Off                0
+6     C4          6                0.5 µV             10              0.004              Off                0
+7     P3          7                0.5 µV             10              0.004              Off                0
+8     P4          8                0.5 µV             10              0.004              Off                0
+9     O1          9                0.5 µV             10              0.004              Off                0
+10    O2          10               0.5 µV             10              0.004              Off                0
+11    F7          11               0.5 µV             10              0.004              Off                0
+12    F8          12               0.5 µV             10              0.004              Off                0
+13    P7          13               0.5 µV             10              0.004              Off                0
+14    P8          14               0.5 µV             10              0.004              Off                0
+15    Fz          15               0.5 µV             10              0.004              Off                0
+16    FCz         16               0.5 µV             10              0.004              Off                0
+17    Cz          17               0.5 µV             10              0.004              Off                0
+18    CPz         18               0.5 µV             10              0.004              Off                0
+19    Pz          19               0.5 µV             10              0.004              Off                0
+20    POz         20               0.5 µV             10              0.004              Off                0
+21    FC1         21               0.5 µV             10              0.004              Off                0
+22    FC2         22               0.5 µV             10              0.004              Off                0
+23    CP1         23               0.5 µV             10              0.004              Off                0
+24    CP2         24               0.5 µV             10              0.004              Off                0
+25    FC5         25               0.5 µV             10              0.004              Off                0
+26    FC6         26               0.5 µV             10              0.004              Off                0
+27    CP5         27               0.5 µV             10              0.004              Off                0
+28    CP6         28               0.5 µV             10              0.004              Off                0
+29    HL          29               0.5 µV             10              0.004              Off                0
+30    HR          30               0.5 µV             10              0.004              Off                0
+31    Vb          31               0.5 µV             10              0.004              Off                0
+32    ReRef       32               0.5 µV             10              0.008              Off                0
+
+S o f t w a r e  F i l t e r s
+==============================
+Disabled
+
diff --git a/mne/io/brainvision/tests/data/test_partially_disabled_hw_filter.vhdr b/mne/io/brainvision/tests/data/test_partially_disabled_hw_filter.vhdr
new file mode 100755
--- /dev/null
+++ b/mne/io/brainvision/tests/data/test_partially_disabled_hw_filter.vhdr
@@ -0,0 +1,103 @@
+Brain Vision Data Exchange Header File Version 1.0
+; Data created by the Vision Recorder
+
+[Common Infos]
+Codepage=UTF-8
+DataFile=test.eeg
+MarkerFile=test.vmrk
+DataFormat=BINARY
+; Data orientation: MULTIPLEXED=ch1,pt1, ch2,pt1 ...
+DataOrientation=MULTIPLEXED
+NumberOfChannels=32
+; Sampling interval in microseconds
+SamplingInterval=1000
+
+[Binary Infos]
+BinaryFormat=INT_16
+
+[Channel Infos]
+; Each entry: Ch<Channel number>=<Name>,<Reference channel name>,
+; <Resolution in "Unit">,<Unit>, Future extensions..
+; Fields are delimited by commas, some fields might be omitted (empty).
+; Commas in channel names are coded as "\1".
+Ch1=FP1,,0.5,µV
+Ch2=FP2,,0.5,µV
+Ch3=F3,,0.5,µV
+Ch4=F4,,0.5,µV
+Ch5=C3,,0.5,µV
+Ch6=C4,,0.5,µV
+Ch7=P3,,0.5,µV
+Ch8=P4,,0.5,µV
+Ch9=O1,,0.5,µV
+Ch10=O2,,0.5,µV
+Ch11=F7,,0.5,µV
+Ch12=F8,,0.5,µV
+Ch13=P7,,0.5,µV
+Ch14=P8,,0.5,µV
+Ch15=Fz,,0.5,µV
+Ch16=FCz,,0.5,µV
+Ch17=Cz,,0.5,µV
+Ch18=CPz,,0.5,µV
+Ch19=Pz,,0.5,µV
+Ch20=POz,,0.5,µV
+Ch21=FC1,,0.5,µV
+Ch22=FC2,,0.5,µV
+Ch23=CP1,,0.5,µV
+Ch24=CP2,,0.5,µV
+Ch25=FC5,,0.5,µV
+Ch26=FC6,,0.5,µV
+Ch27=CP5,,0.5,BS
+Ch28=CP6,,0.5,µS
+Ch29=HL,,0.5,ARU
+Ch30=HR,,0.5,uS
+Ch31=Vb,,0.5,S
+Ch32=ReRef,,0.5,C
+
+[Comment]
+
+A m p l i f i e r  S e t u p
+============================
+Number of channels: 32
+Sampling Rate [Hz]: 1000
+Sampling Interval [µS]: 1000
+
+Channels
+--------
+#     Name      Phys. Chn.    Resolution / Unit   Low Cutoff [s]   High Cutoff [Hz]   Notch [Hz]    Series Res. [kOhm] Gradient         Offset
+1     FP1         1                0.5 µV             DC              250              Off                0
+2     FP2         2                0.5 µV             DC              250              Off                0
+3     F3          3                0.5 µV             DC              250              Off                0
+4     F4          4                0.5 µV             DC              250              Off                0
+5     C3          5                0.5 µV             DC              250              Off                0
+6     C4          6                0.5 µV             DC              250              Off                0
+7     P3          7                0.5 µV             DC              250              Off                0
+8     P4          8                0.5 µV             DC              250              Off                0
+9     O1          9                0.5 µV             DC              250              Off                0
+10    O2          10               0.5 µV             DC              250              Off                0
+11    F7          11               0.5 µV             DC              250              Off                0
+12    F8          12               0.5 µV             DC              250              Off                0
+13    P7          13               0.5 µV             DC              250              Off                0
+14    P8          14               0.5 µV             DC              250              Off                0
+15    Fz          15               0.5 µV             DC              250              Off                0
+16    FCz         16               0.5 µV             DC              250              Off                0
+17    Cz          17               0.5 µV             DC              250              Off                0
+18    CPz         18               0.5 µV             DC              250              Off                0
+19    Pz          19               0.5 µV             DC              250              Off                0
+20    POz         20               0.5 µV             DC              250              Off                0
+21    FC1         21               0.5 µV             DC              250              Off                0
+22    FC2         22               0.5 µV             DC              250              Off                0
+23    CP1         23               0.5 µV             DC              250              Off                0
+24    CP2         24               0.5 µV             DC              250              Off                0
+25    FC5         25               0.5 µV             DC              250              Off                0
+26    FC6         26               0.5 µV             DC              250              Off                0
+27    CP5         27               0.5 BS             DC              250              Off                0
+28    CP6         28               0.5 µS             DC              250              Off                0
+29    HL          29               0.5 ARU            DC              250              Off                0
+30    HR          30               0.5 uS             DC              Off              Off                0
+31    Vb          31               0.5 S              Off             250              Off                0
+32    ReRef       32               0.5 C              10              250              Off                0
+
+S o f t w a r e  F i l t e r s
+==============================
+Disabled
+
diff --git a/mne/io/brainvision/tests/test_brainvision.py b/mne/io/brainvision/tests/test_brainvision.py
--- a/mne/io/brainvision/tests/test_brainvision.py
+++ b/mne/io/brainvision/tests/test_brainvision.py
@@ -24,6 +24,11 @@
 data_dir = op.join(op.dirname(op.abspath(FILE)), 'data')
 vhdr_path = op.join(data_dir, 'test.vhdr')
 vmrk_path = op.join(data_dir, 'test.vmrk')
+
+vhdr_partially_disabled_hw_filter_path = op.join(data_dir,
+                                                 'test_partially_disabled'
+                                                 '_hw_filter.vhdr')
+
 vhdr_old_path = op.join(data_dir,
                         'test_old_layout_latin1_software_filter.vhdr')
 vmrk_old_path = op.join(data_dir,
@@ -31,7 +36,18 @@
 
 vhdr_v2_path = op.join(data_dir, 'testv2.vhdr')
 vmrk_v2_path = op.join(data_dir, 'testv2.vmrk')
+
 vhdr_highpass_path = op.join(data_dir, 'test_highpass.vhdr')
+vhdr_mixed_highpass_path = op.join(data_dir, 'test_mixed_highpass.vhdr')
+vhdr_highpass_hz_path = op.join(data_dir, 'test_highpass_hz.vhdr')
+vhdr_mixed_highpass_hz_path = op.join(data_dir, 'test_mixed_highpass_hz.vhdr')
+
+# Not a typo: we can reuse the highpass file for the lowpass (Hz) test
+vhdr_lowpass_path = op.join(data_dir, 'test_highpass.vhdr')
+vhdr_mixed_lowpass_path = op.join(data_dir, 'test_mixed_lowpass.vhdr')
+vhdr_lowpass_s_path = op.join(data_dir, 'test_lowpass_s.vhdr')
+vhdr_mixed_lowpass_s_path = op.join(data_dir, 'test_mixed_lowpass_s.vhdr')
+
 montage = op.join(data_dir, 'test.hpts')
 eeg_bin = op.join(data_dir, 'test_bin_raw.fif')
 eog = ['HL', 'HR', 'Vb']
@@ -39,8 +55,9 @@
 warnings.simplefilter('always')
 
 
-def test_brainvision_data_filters():
-    """Test reading raw Brain Vision files"""
+def test_brainvision_data_highpass_filters():
+    """Test reading raw Brain Vision files with amplifier HP filter settings"""
+    # Homogeneous highpass in seconds (default measurement unit)
     with warnings.catch_warnings(record=True) as w:  # event parsing
         raw = _test_raw_reader(
             read_raw_brainvision, vhdr_fname=vhdr_highpass_path,
@@ -50,6 +67,145 @@ def test_brainvision_data_filters():
     assert_equal(raw.info['highpass'], 0.1)
     assert_equal(raw.info['lowpass'], 250.)
 
+    # Heterogeneous highpass in seconds (default measurement unit)
+    with warnings.catch_warnings(record=True) as w:  # event parsing
+        raw = _test_raw_reader(
+            read_raw_brainvision, vhdr_fname=vhdr_mixed_highpass_path,
+            montage=montage, eog=eog)
+
+    trigger_warning = ['parse triggers that' in str(ww.message)
+                       for ww in w]
+    lowpass_warning = ['different lowpass filters' in str(ww.message)
+                       for ww in w]
+    highpass_warning = ['different highpass filters' in str(ww.message)
+                        for ww in w]
+
+    expected_warnings = zip(trigger_warning, lowpass_warning, highpass_warning)
+
+    assert_true(all(any([trg, lp, hp]) for trg, lp, hp in expected_warnings))
+
+    assert_equal(raw.info['highpass'], 0.2)
+    assert_equal(raw.info['lowpass'], 250.)
+
+    # Homogeneous highpass in Hertz
+    with warnings.catch_warnings(record=True) as w:  # event parsing
+        raw = _test_raw_reader(
+            read_raw_brainvision, vhdr_fname=vhdr_highpass_hz_path,
+            montage=montage, eog=eog)
+    assert_true(all('parse triggers that' in str(ww.message) for ww in w))
+
+    assert_equal(raw.info['highpass'], 10.)
+    assert_equal(raw.info['lowpass'], 250.)
+
+    # Heterogeneous highpass in Hertz
+    with warnings.catch_warnings(record=True) as w:  # event parsing
+        raw = _test_raw_reader(
+            read_raw_brainvision, vhdr_fname=vhdr_mixed_highpass_hz_path,
+            montage=montage, eog=eog)
+
+    trigger_warning = ['parse triggers that' in str(ww.message)
+                       for ww in w]
+    lowpass_warning = ['different lowpass filters' in str(ww.message)
+                       for ww in w]
+    highpass_warning = ['different highpass filters' in str(ww.message)
+                        for ww in w]
+
+    expected_warnings = zip(trigger_warning, lowpass_warning, highpass_warning)
+
+    assert_true(all(any([trg, lp, hp]) for trg, lp, hp in expected_warnings))
+
+    assert_equal(raw.info['highpass'], 10.)
+    assert_equal(raw.info['lowpass'], 250.)
+
+
+def test_brainvision_data_lowpass_filters():
+    """Test reading raw Brain Vision files with amplifier LP filter settings"""
+
+    # Homogeneous lowpass in Hertz (default measurement unit)
+    with warnings.catch_warnings(record=True) as w:  # event parsing
+        raw = _test_raw_reader(
+            read_raw_brainvision, vhdr_fname=vhdr_lowpass_path,
+            montage=montage, eog=eog)
+    assert_true(all('parse triggers that' in str(ww.message) for ww in w))
+
+    assert_equal(raw.info['highpass'], 0.1)
+    assert_equal(raw.info['lowpass'], 250.)
+
+    # Heterogeneous lowpass in Hertz (default measurement unit)
+    with warnings.catch_warnings(record=True) as w:  # event parsing
+        raw = _test_raw_reader(
+            read_raw_brainvision, vhdr_fname=vhdr_mixed_lowpass_path,
+            montage=montage, eog=eog)
+
+    trigger_warning = ['parse triggers that' in str(ww.message)
+                       for ww in w]
+    lowpass_warning = ['different lowpass filters' in str(ww.message)
+                       for ww in w]
+    highpass_warning = ['different highpass filters' in str(ww.message)
+                        for ww in w]
+
+    expected_warnings = zip(trigger_warning, lowpass_warning, highpass_warning)
+
+    assert_true(all(any([trg, lp, hp]) for trg, lp, hp in expected_warnings))
+
+    assert_equal(raw.info['highpass'], 0.1)
+    assert_equal(raw.info['lowpass'], 125.)
+
+    # Homogeneous lowpass in seconds
+    with warnings.catch_warnings(record=True) as w:  # event parsing
+        raw = _test_raw_reader(
+            read_raw_brainvision, vhdr_fname=vhdr_lowpass_s_path,
+            montage=montage, eog=eog)
+    assert_true(all('parse triggers that' in str(ww.message) for ww in w))
+
+    assert_equal(raw.info['highpass'], 0.1)
+    assert_equal(raw.info['lowpass'], 250.)
+
+    # Heterogeneous lowpass in seconds
+    with warnings.catch_warnings(record=True) as w:  # event parsing
+        raw = _test_raw_reader(
+            read_raw_brainvision, vhdr_fname=vhdr_mixed_lowpass_s_path,
+            montage=montage, eog=eog)
+
+    trigger_warning = ['parse triggers that' in str(ww.message)
+                       for ww in w]
+    lowpass_warning = ['different lowpass filters' in str(ww.message)
+                       for ww in w]
+    highpass_warning = ['different highpass filters' in str(ww.message)
+                        for ww in w]
+
+    expected_warnings = zip(trigger_warning, lowpass_warning, highpass_warning)
+
+    assert_true(all(any([trg, lp, hp]) for trg, lp, hp in expected_warnings))
+
+    assert_equal(raw.info['highpass'], 0.1)
+    assert_equal(raw.info['lowpass'], 125.)
+
+
+def test_brainvision_data_partially_disabled_hw_filters():
+    """Test reading raw Brain Vision files with heterogeneous amplifier
+       filter settings including non-numeric values
+    """
+    with warnings.catch_warnings(record=True) as w:  # event parsing
+        raw = _test_raw_reader(
+            read_raw_brainvision,
+            vhdr_fname=vhdr_partially_disabled_hw_filter_path,
+            montage=montage, eog=eog)
+
+    trigger_warning = ['parse triggers that' in str(ww.message)
+                       for ww in w]
+    lowpass_warning = ['different lowpass filters' in str(ww.message)
+                       for ww in w]
+    highpass_warning = ['different highpass filters' in str(ww.message)
+                        for ww in w]
+
+    expected_warnings = zip(trigger_warning, lowpass_warning, highpass_warning)
+
+    assert_true(all(any([trg, lp, hp]) for trg, lp, hp in expected_warnings))
+
+    assert_equal(raw.info['highpass'], 0.1)
+    assert_equal(raw.info['lowpass'], 250.)
+
 
 def test_brainvision_data_software_filters_latin1_global_units():
     """Test reading raw Brain Vision files"""