10
10
import time
11
11
12
12
# Constants
13
- FFT_WINDOW_SIZE = 500
14
- SMOOTHING_WINDOW_SIZE = 128
13
+ FFT_WINDOW_SIZE = 512
14
+ SMOOTHING_WINDOW_SIZE = 10
15
15
DISPLAY_DURATION = 4 # seconds
16
16
BAND_RANGES = {'delta' : (0.5 , 4 ), 'theta' : (4 , 8 ), 'alpha' : (8 , 12 ), 'beta' : (12 , 30 ), 'gamma' : (30 , 45 )}
17
17
@@ -22,7 +22,7 @@ def __init__(self, num_channels, sampling_rate):
22
22
23
23
# Initialize filters
24
24
self .b_notch , self .a_notch = iirnotch (50 , 30 , self .sampling_rate )
25
- self .b_band , self .a_band = butter (4 , [0.5 / (self .sampling_rate / 2 ), 48 .0 / (self .sampling_rate / 2 )], btype = 'band' )
25
+ self .b_band , self .a_band = butter (4 , [0.5 / (self .sampling_rate / 2 ), 45 .0 / (self .sampling_rate / 2 )], btype = 'band' )
26
26
self .zi_notch = [lfilter_zi (self .b_notch , self .a_notch ) * 0 for _ in range (num_channels )]
27
27
self .zi_band = [lfilter_zi (self .b_band , self .a_band ) * 0 for _ in range (num_channels )]
28
28
@@ -124,17 +124,6 @@ def compute_band_powers(self, channel, time_data):
124
124
# Return relative powers
125
125
return {'delta' : delta / total_power ,'theta' : theta / total_power ,'alpha' : alpha / total_power ,'beta' : beta / total_power ,'gamma' : gamma / total_power }
126
126
127
- class BandPowerSmoother :
128
- def __init__ (self ):
129
- self .buffers = {band : deque (maxlen = SMOOTHING_WINDOW_SIZE ) for band in BAND_RANGES }
130
-
131
- def update (self , band_powers ):
132
- for band , power in band_powers .items ():
133
- self .buffers [band ].append (power )
134
-
135
- def get_smoothed (self ):
136
- return {band : np .mean (buffer ) if buffer else 0 for band , buffer in self .buffers .items ()}
137
-
138
127
class SettingBox (QDialog ):
139
128
def __init__ (self , num_channels , selected_eeg , selected_bp , parent = None ):
140
129
super ().__init__ (parent )
@@ -199,7 +188,6 @@ def __init__(self):
199
188
# Data processing components
200
189
self .data_processor = DataProcessor (self .num_channels , self .sampling_rate )
201
190
self .fft_analyzer = FFTAnalyzer (self .num_channels , self .sampling_rate )
202
- self .band_smoother = BandPowerSmoother ()
203
191
204
192
self .selected_eeg_channels = list (range (self .num_channels ))
205
193
self .selected_bp_channel = 0
@@ -425,10 +413,7 @@ def update_brainpower_plot(self):
425
413
band_powers = self .fft_analyzer .compute_band_powers (ch , time_data )
426
414
427
415
if band_powers is not None :
428
- self .band_smoother .update (band_powers )
429
- smoothed_powers = self .band_smoother .get_smoothed ()
430
-
431
- relative_powers = [smoothed_powers ['delta' ], smoothed_powers ['theta' ], smoothed_powers ['alpha' ], smoothed_powers ['beta' ], smoothed_powers ['gamma' ]]
416
+ relative_powers = [band_powers ['delta' ], band_powers ['theta' ], band_powers ['alpha' ], band_powers ['beta' ], band_powers ['gamma' ]]
432
417
self .brainwave_bars .setOpts (height = relative_powers )
433
418
434
419
if __name__ == "__main__" :
0 commit comments