def update(self, nprocs=1, factor=None, bw_hz=None, foi_hz=None, fs_hz=None, f_ord=None, ftype=None, n_freqs=None, n_samples=None, n_channels=None): self.n_channels = n_channels if n_channels is not None else self.n_channels self.n_freqs = n_freqs if n_freqs is not None else self.n_freqs self.n_processes = min(Parallel.check_nprocs() - 1, self.n_freqs) if nprocs != 1 else 1 # Signal process properties self.decimate_by = factor self.n_samples = int(n_samples / self.decimate_by) self.sample_rate = fs_hz / self.decimate_by if fs_hz is not None else self.sample_rate self.bandwidth = bw_hz if bw_hz is not None else self.bandwidth self.w_, self.H_ = self.create_filter(f_ord, self.bandwidth / 2.0, self.sample_rate / 2.0, self.n_samples, ftype='fir', output='freq') self.Hwin = self.H_[np.logical_and(self.w_ >= -self.bandwidth / 2.0, self.w_ < self.bandwidth / 2.0)] self.n_samples_procs = self.Hwin.size # Setup center frequencies if len(foi_hz) > 1: cf = np.arange(*foi_hz, np.diff(foi_hz) / self.n_freqs, dtype=int) diff = cf.shape[0] - self.n_freqs if diff > 0: cf = cf[:-diff] else: cf = foi_hz self.freqs = np.asarray([ (f - self.bandwidth / 2, f + self.bandwidth / 2) for f in cf ]) # Create rules for how to handle the data self._encoder_rule() self._decoder_rule() if self.n_processes > 1: self.pfunc = Parallel(self.multiply, nprocs=self.n_processes, axis=0, flag=0, ins_shape=[(self.n_channels, self.n_freqs, self.n_samples_procs), (1, self.n_samples_procs)], ins_dtype=[np.complex64, np.complex64], out_shape=(self.n_channels, self.n_freqs, self.n_samples_procs), out_dtype=np.complex64)