@@ -166,6 +166,7 @@ def __init__(self, Id, open_frequencyFilterWindows, item, add_item_tree_widget):
166166 self .lanczos_cutoff_scale_sb .valueChanged .connect (self .delayed_update )
167167 self .fir_cutoff_sb .valueChanged .connect (self .delayed_update )
168168 self .fir_numtaps_sb .valueChanged .connect (self .delayed_update )
169+ self .fir_window_combo .currentTextChanged .connect (self .delayed_update )
169170 self .sg_cutoff_scale_sb .valueChanged .connect (self .delayed_update )
170171 self .sg_window_sb .valueChanged .connect (self .delayed_update )
171172 self .sg_poly_sb .valueChanged .connect (self .delayed_update )
@@ -252,7 +253,7 @@ def update_method_info(self, method):
252253 <b>FIR window filter</b><br>
253254
254255 <b>Backend call</b><br>
255- <code>ts.interp().filter(method="firwin", cutoff_freq=1/P , numtaps=...)</code><br><br>
256+ <code>ts.interp().filter(method="firwin", cutoff_scale=... , numtaps=..., window =...)</code><br><br>
256257
257258 <b>Backend defaults</b><br>
258259 <code>numtaps=None</code>, <code>fs=1</code>,
@@ -346,26 +347,38 @@ def _build_lanczos_page(self):
346347
347348 #---------------------------------------------------------------------------------------------
348349 def _build_fir_page (self ):
349-
350+
350351 page = QWidget ()
351352 layout = QFormLayout (page )
352-
353+
353354 self .fir_cutoff_sb = QDoubleSpinBox ()
354355 self .fir_cutoff_sb .setDecimals (2 )
355356 self .fir_cutoff_sb .setRange (2 , 1000000 )
356357 self .fir_cutoff_sb .setValue (20 )
357358 self .fir_cutoff_sb .setSingleStep (10 )
358359 self .fir_cutoff_sb .setFixedWidth (120 )
359-
360+
360361 self .fir_numtaps_sb = QSpinBox ()
361362 self .fir_numtaps_sb .setRange (3 , 1000000 )
362363 self .fir_numtaps_sb .setValue (21 )
363364 self .fir_numtaps_sb .setSingleStep (10 )
364365 self .fir_numtaps_sb .setFixedWidth (120 )
365-
366- layout .addRow ("Period threshold:" , self .fir_cutoff_sb )
366+
367+ self .fir_window_combo = QComboBox ()
368+ self .fir_window_combo .addItems ([
369+ "hamming" ,
370+ "hann" ,
371+ "blackman" ,
372+ "bartlett" ,
373+ "boxcar"
374+ ])
375+ self .fir_window_combo .setCurrentText ("hamming" )
376+ self .fir_window_combo .setFixedWidth (120 )
377+
378+ layout .addRow ("Period cutoff:" , self .fir_cutoff_sb )
367379 layout .addRow ("Number of taps:" , self .fir_numtaps_sb )
368-
380+ layout .addRow ("Window:" , self .fir_window_combo )
381+
369382 return page
370383
371384 #---------------------------------------------------------------------------------------------
@@ -508,18 +521,20 @@ def compute_filter(self):
508521
509522 period = self .fir_cutoff_sb .value ()
510523 numtaps = self .fir_numtaps_sb .value ()
524+ window = self .fir_window_combo .currentText ()
511525
512526 if period <= 2 :
513527 raise ValueError ("Cutoff period must be > 2 sampling steps." )
514528
515529 filtered = ts .interp ().filter (
516530 method = "firwin" ,
517531 cutoff_scale = period ,
518- numtaps = numtaps
532+ numtaps = numtaps ,
533+ window = window
519534 )
520-
521- label = f"FIR | long periods | P={ period } | numtaps={ numtaps } "
522-
535+
536+ label = f"FIR | long periods | P={ period } | numtaps={ numtaps } | window= { window } "
537+
523538 #-------------------------------
524539 elif method == self .METHOD_SAVGOL :
525540
0 commit comments