@@ -438,8 +438,7 @@ def __init__(self, device_info, stream_name=None):
438438 self .marker_outlet = None
439439 self .exg_outlet = None
440440 self .orn_outlet = None
441- self .adc_mask = SettingsManager (
442- device_info ["device_name" ]).get_adc_mask ()
441+ self .adc_mask = SettingsManager (device_info ["device_name" ]).get_adc_mask ()
443442 if len (SettingsManager (device_info ["device_name" ]).get_channel_names ()) == len (self .adc_mask ):
444443 self .channel_names = SettingsManager (device_info ["device_name" ]).get_channel_names ()
445444 else :
@@ -544,64 +543,92 @@ def __init__(self, device_info, calib_param, notch_freq):
544543 self .packet_buffer = []
545544
546545 def _add_filters (self ):
547- bp_freq = self ._device_info ['sampling_rate' ] / 4 - \
548- 1.5 , self ._device_info ['sampling_rate' ] / 4 + 1.5
549- noise_freq = self ._device_info ['sampling_rate' ] / \
550- 4 + 2.5 , self ._device_info ['sampling_rate' ] / 4 + 5.5
546+ s_rate = 250
547+ center = s_rate / 4
548+
549+ bp_freq = (center - 1.5 , center + 1.5 )
550+ noise_freq = (center + 2.5 , center + 5.5 )
551+
551552 settings_manager = SettingsManager (self ._device_info ["device_name" ])
552- settings_manager .load_current_settings ()
553- n_chan = settings_manager .settings_dict [settings_manager .channel_count_key ]
554- # Temporary fix for 16/32 channel filters
555- if not is_explore_pro_device ():
556- if n_chan >= 16 :
557- n_chan = 32
558- self ._filters ['notch' ] = ExGFilter (cutoff_freq = self ._notch_freq ,
559- filter_type = 'notch_imp' ,
560- s_rate = self ._device_info ['sampling_rate' ],
561- n_chan = n_chan )
562-
563- self ._filters ['demodulation' ] = ExGFilter (cutoff_freq = bp_freq ,
564- filter_type = 'bandpass' ,
565- s_rate = self ._device_info ['sampling_rate' ],
566- n_chan = n_chan )
567-
568- self ._filters ['base_noise' ] = ExGFilter (cutoff_freq = noise_freq ,
569- filter_type = 'bandpass' ,
570- s_rate = self ._device_info ['sampling_rate' ],
571- n_chan = n_chan )
553+ n_chan = settings_manager .get_channel_count ()
554+ self .adc_count = n_chan // 8
555+
556+ def make_filter (filter_type , cutoff , channels ):
557+ return ExGFilter (
558+ cutoff_freq = cutoff ,
559+ filter_type = filter_type ,
560+ s_rate = s_rate ,
561+ n_chan = channels ,
562+ )
563+
564+ if not self ._calib_param ['calibration' ]:
565+
566+ self ._filters ['notch' ] = [
567+ make_filter ('notch_imp' , self ._notch_freq , 8 )
568+ for _ in range (self .adc_count )
569+ ]
570+ self ._filters ['demodulation' ] = [
571+ make_filter ('bandpass' , bp_freq , 8 )
572+ for _ in range (self .adc_count )
573+ ]
574+ self ._filters ['base_noise' ] = [
575+ make_filter ('bandpass' , noise_freq , 8 )
576+ for _ in range (self .adc_count )
577+ ]
578+ else :
579+ self ._filters ['notch' ] = make_filter ('notch_imp' , self ._notch_freq , n_chan )
580+ self ._filters ['demodulation' ] = make_filter ('bandpass' , bp_freq , n_chan )
581+ self ._filters ['base_noise' ] = make_filter ('bandpass' , noise_freq , n_chan )
572582
573583 def measure_imp (self , packet ):
574584 """Compute electrode impedances
575585 """
586+ if self ._calib_param ['calibration' ]:
587+ return None
576588 self .packet_buffer .append (packet )
577589
578590 if len (self .packet_buffer ) < 16 :
579591 return None
580592 else :
581- timestamp , _ = self .packet_buffer [0 ].get_data ()
593+ timestamp , data = self .packet_buffer [0 ].get_data ()
582594 resized_packet = BleImpedancePacket (
583595 timestamp = timestamp , payload = None )
584596 resized_packet .populate_packet_with_data (self .packet_buffer )
585597 self .packet_buffer .clear ()
586- temp_packet = self ._filters ['notch' ].apply (
587- input_data = resized_packet , in_place = False )
588- self ._calib_param ['noise_level' ] = self ._filters ['base_noise' ]. \
589- apply (input_data = temp_packet , in_place = False ).get_ptp ()
590- self ._filters ['demodulation' ].apply (
591- input_data = temp_packet , in_place = True
592- ).calculate_impedance (self ._calib_param )
593- return temp_packet
598+ imp_packet_buffer = []
599+ if isinstance (self ._filters ['notch' ], list ):
600+ temp_packet = None
601+ # slice packet and feed it to the filters
602+ for i in range (self .adc_count ):
603+ sliced_packet = BleImpedancePacket (
604+ timestamp = timestamp , payload = None )
605+ sliced_packet .resize_packet (resized_packet .get_data ()[1 ], i )
606+ temp_packet = self ._filters ['notch' ][i ].apply (
607+ input_data = sliced_packet , in_place = False )
608+ self ._calib_param ['noise_level' ] = self ._filters ['base_noise' ][i ]. \
609+ apply (input_data = temp_packet , in_place = False ).get_ptp ()
610+ self ._filters ['demodulation' ][i ].apply (
611+ input_data = temp_packet , in_place = True
612+ )
613+ temp_packet .calculate_impedance (self ._calib_param , index = i )
614+ temp_packet .data = temp_packet .imp_data
615+ imp_packet_buffer .append (temp_packet )
616+ imp_packet = BleImpedancePacket (timestamp = timestamp , payload = None )
617+ imp_packet .populate_data_1d (imp_packet_buffer )
618+ imp_packet .imp_data = imp_packet .data
619+
620+ return imp_packet
594621
595622
596623def find_free_port ():
597- """Find a free port on the localhost
624+ """Find a free port on the localhost)
625+ free_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
598626
599627 Returns:
600628 int: Port number
601629 """
602630 with closing (socket .socket (socket .AF_INET , socket .SOCK_STREAM )) as free_socket :
603631 free_socket .bind (('localhost' , 0 ))
604- free_socket .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
605632 port_number = free_socket .getsockname ()[1 ]
606633 return port_number
607634
0 commit comments