Python scipy.signal() Examples
The following are 30
code examples of scipy.signal().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
scipy
, or try the search function
.
Example #1
Source File: dsss-bpsk-reverse.py From clock-recovery with MIT License | 7 votes |
def extract_chip_samples(samples): a = array(samples) f = scipy.fft(a*a) p = find_clock_frequency(abs(f)) if 0 == p: return [] cycles_per_sample = (p*1.0)/len(f) clock_phase = 0.25 + numpy.angle(f[p])/(tau) if clock_phase <= 0.5: clock_phase += 1 chip_samples = [] for i in range(len(a)): if clock_phase >= 1: clock_phase -= 1 chip_samples.append(a[i]) clock_phase += cycles_per_sample return chip_samples # input: complex valued samples, FFT bin number of chip rate # input signal must be centered at 0 frequency # output: number of chips found in repetitive chip sequence
Example #2
Source File: functions.py From tf-pose with Apache License 2.0 | 6 votes |
def applyFilter(data, b, a, padding=100, bidir=True): """Apply a linear filter with coefficients a, b. Optionally pad the data before filtering and/or run the filter in both directions.""" try: import scipy.signal except ImportError: raise Exception("applyFilter() requires the package scipy.signal.") d1 = data.view(np.ndarray) if padding > 0: d1 = np.hstack([d1[:padding], d1, d1[-padding:]]) if bidir: d1 = scipy.signal.lfilter(b, a, scipy.signal.lfilter(b, a, d1)[::-1])[::-1] else: d1 = scipy.signal.lfilter(b, a, d1) if padding > 0: d1 = d1[padding:-padding] if (hasattr(data, 'implements') and data.implements('MetaArray')): return MetaArray(d1, info=data.infoCopy()) else: return d1
Example #3
Source File: tests_signal.py From NeuroKit with MIT License | 6 votes |
def test_signal_detrend(): signal = np.cos(np.linspace(start=0, stop=10, num=1000)) # Low freq signal += np.cos(np.linspace(start=0, stop=100, num=1000)) # High freq signal += 3 # Add baseline rez_nk = nk.signal_detrend(signal, order=1) rez_scipy = scipy.signal.detrend(signal, type="linear") assert np.allclose(np.mean(rez_nk - rez_scipy), 0, atol=0.000001) rez_nk = nk.signal_detrend(signal, order=0) rez_scipy = scipy.signal.detrend(signal, type="constant") assert np.allclose(np.mean(rez_nk - rez_scipy), 0, atol=0.000001) # Tarvainen rez_nk = nk.signal_detrend(signal, method="tarvainen2002", regularization=500) assert np.allclose(np.mean(rez_nk - signal), -2.88438737697, atol=0.000001)
Example #4
Source File: ecg_clean.py From NeuroKit with MIT License | 6 votes |
def _ecg_clean_elgendi(ecg_signal, sampling_rate=1000): """From https://github.com/berndporr/py-ecg-detectors/ - Elgendi, Mohamed & Jonkman, Mirjam & De Boer, Friso. (2010). Frequency Bands Effects on QRS Detection. The 3rd International Conference on Bio-inspired Systems and Signal Processing (BIOSIGNALS2010). 428-431. """ f1 = 8 / sampling_rate f2 = 20 / sampling_rate b, a = scipy.signal.butter(2, [f1 * 2, f2 * 2], btype="bandpass") return scipy.signal.lfilter(b, a, ecg_signal) # Return filtered # ============================================================================= # Hamilton (2002) # =============================================================================
Example #5
Source File: tests_signal.py From NeuroKit with MIT License | 6 votes |
def test_signal_filter(): signal = np.cos(np.linspace(start=0, stop=10, num=1000)) # Low freq signal += np.cos(np.linspace(start=0, stop=100, num=1000)) # High freq filtered = nk.signal_filter(signal, highcut=10) assert np.std(signal) > np.std(filtered) # Generate 10 seconds of signal with 2 Hz oscillation and added 50Hz powerline-noise. sampling_rate = 250 samples = np.arange(10 * sampling_rate) signal = np.sin(2 * np.pi * 2 * (samples / sampling_rate)) powerline = np.sin(2 * np.pi * 50 * (samples / sampling_rate)) signal_corrupted = signal + powerline signal_clean = nk.signal_filter(signal_corrupted, sampling_rate=sampling_rate, method="powerline") # import matplotlib.pyplot as plt # figure, (ax0, ax1, ax2) = plt.subplots(nrows=3, ncols=1, sharex=True) # ax0.plot(signal_corrupted) # ax1.plot(signal) # ax2.plot(signal_clean * 100) assert np.allclose(sum(signal_clean - signal), -2, atol=0.2)
Example #6
Source File: rsp_clean.py From NeuroKit with MIT License | 6 votes |
def _rsp_clean_khodadad2018(rsp_signal, sampling_rate=1000): """The algorithm is based on (but not an exact implementation of) the "Zero-crossing algorithm with amplitude threshold" by `Khodadad et al. (2018) <https://iopscience.iop.org/article/10.1088/1361-6579/aad7e6/meta>`_. """ # Slow baseline drifts / fluctuations must be removed from the raw # breathing signal (i.e., the signal must be centered around zero) in order # to be able to reliable detect zero-crossings. # Remove baseline by applying a lowcut at .05Hz (preserves breathing rates # higher than 3 breath per minute) and high frequency noise by applying a # highcut at 3 Hz (preserves breathing rates slower than 180 breath per # minute). clean = signal_filter( rsp_signal, sampling_rate=sampling_rate, lowcut=0.05, highcut=3, order=2, method="butterworth_ba" ) return clean # ============================================================================= # BioSPPy # =============================================================================
Example #7
Source File: ecg_findpeaks.py From NeuroKit with MIT License | 6 votes |
def _ecg_findpeaks_pantompkins(signal, sampling_rate=1000): """From https://github.com/berndporr/py-ecg-detectors/ - Jiapu Pan and Willis J. Tompkins. A Real-Time QRS Detection Algorithm. In: IEEE Transactions on Biomedical Engineering BME-32.3 (1985), pp. 230–236. """ diff = np.diff(signal) squared = diff * diff N = int(0.12 * sampling_rate) mwa = _ecg_findpeaks_MWA(squared, N) mwa[: int(0.2 * sampling_rate)] = 0 mwa_peaks = _ecg_findpeaks_peakdetect(mwa, sampling_rate) mwa_peaks = np.array(mwa_peaks, dtype="int") return mwa_peaks # ============================================================================= # Hamilton (2002) # =============================================================================
Example #8
Source File: rsp_clean.py From NeuroKit with MIT License | 6 votes |
def _rsp_clean_biosppy(rsp_signal, sampling_rate=1000): """Uses the same defaults as `BioSPPy. <https://github.com/PIA-Group/BioSPPy/blob/master/biosppy/signals/resp.py>`_. """ # Parameters order = 2 frequency = [0.1, 0.35] frequency = 2 * np.array(frequency) / sampling_rate # Normalize frequency to Nyquist Frequency (Fs/2). # Filtering b, a = scipy.signal.butter(N=order, Wn=frequency, btype="bandpass", analog=False) filtered = scipy.signal.filtfilt(b, a, rsp_signal) # Baseline detrending clean = signal_detrend(filtered, order=0) return clean
Example #9
Source File: signal_filter.py From NeuroKit with MIT License | 6 votes |
def _signal_filter_powerline(signal, sampling_rate, powerline=50): """Filter out 50 Hz powerline noise by smoothing the signal with a moving average kernel with the width of one period of 50Hz.""" if sampling_rate >= 100: b = np.ones(int(sampling_rate / powerline)) else: b = np.ones(2) a = [len(b)] y = scipy.signal.filtfilt(b, a, signal, method="pad") return y # ============================================================================= # Utility # =============================================================================
Example #10
Source File: signal_filter.py From NeuroKit with MIT License | 6 votes |
def _signal_filter_butterworth_ba(signal, sampling_rate=1000, lowcut=None, highcut=None, order=5): """Filter a signal using IIR Butterworth B/A method.""" # Get coefficients freqs, filter_type = _signal_filter_sanitize(lowcut=lowcut, highcut=highcut, sampling_rate=sampling_rate) b, a = scipy.signal.butter(order, freqs, btype=filter_type, output="ba", fs=sampling_rate) try: filtered = scipy.signal.filtfilt(b, a, signal, method="gust") except ValueError: filtered = scipy.signal.filtfilt(b, a, signal, method="pad") return filtered # ============================================================================= # Bessel # =============================================================================
Example #11
Source File: signal_filter.py From NeuroKit with MIT License | 6 votes |
def _signal_filter_savgol(signal, sampling_rate=1000, order=2, window_size="default"): """Filter a signal using the Savitzky-Golay method. Default window size is chosen based on `Sadeghi, M., & Behnia, F. (2018). Optimum window length of Savitzky-Golay filters with arbitrary order. arXiv preprint arXiv:1808.10489. <https://arxiv.org/ftp/arxiv/papers/1808/1808.10489.pdf>`_. """ window_size = _signal_filter_windowsize(window_size=window_size, sampling_rate=sampling_rate) filtered = scipy.signal.savgol_filter(signal, window_length=window_size, polyorder=order) return filtered # ============================================================================= # FIR # =============================================================================
Example #12
Source File: functions.py From tf-pose with Apache License 2.0 | 6 votes |
def besselFilter(data, cutoff, order=1, dt=None, btype='low', bidir=True): """return data passed through bessel filter""" try: import scipy.signal except ImportError: raise Exception("besselFilter() requires the package scipy.signal.") if dt is None: try: tvals = data.xvals('Time') dt = (tvals[-1]-tvals[0]) / (len(tvals)-1) except: dt = 1.0 b,a = scipy.signal.bessel(order, cutoff * dt, btype=btype) return applyFilter(data, b, a, bidir=bidir) #base = data.mean() #d1 = scipy.signal.lfilter(b, a, data.view(ndarray)-base) + base #if (hasattr(data, 'implements') and data.implements('MetaArray')): #return MetaArray(d1, info=data.infoCopy()) #return d1
Example #13
Source File: functions.py From tf-pose with Apache License 2.0 | 6 votes |
def butterworthFilter(data, wPass, wStop=None, gPass=2.0, gStop=20.0, order=1, dt=None, btype='low', bidir=True): """return data passed through bessel filter""" try: import scipy.signal except ImportError: raise Exception("butterworthFilter() requires the package scipy.signal.") if dt is None: try: tvals = data.xvals('Time') dt = (tvals[-1]-tvals[0]) / (len(tvals)-1) except: dt = 1.0 if wStop is None: wStop = wPass * 2.0 ord, Wn = scipy.signal.buttord(wPass*dt*2., wStop*dt*2., gPass, gStop) #print "butterworth ord %f Wn %f c %f sc %f" % (ord, Wn, cutoff, stopCutoff) b,a = scipy.signal.butter(ord, Wn, btype=btype) return applyFilter(data, b, a, bidir=bidir)
Example #14
Source File: ecg_delineate.py From NeuroKit with MIT License | 6 votes |
def _ecg_delineator_peak_T_offset(rpeak, heartbeat, R, T): if T is None: return np.nan segment = heartbeat.iloc[R + T :] # Select left of P wave try: signal = signal_smooth(segment["Signal"].values, size=R / 10) except TypeError: signal = segment["Signal"] if len(signal) < 2: return np.nan signal = np.gradient(np.gradient(signal)) T_offset = np.argmax(signal) return rpeak + T + T_offset # ============================================================================= # Internals # =============================================================================
Example #15
Source File: stft.py From stft with MIT License | 6 votes |
def cosine(M): """Gernerate a halfcosine window of given length Uses :code:`scipy.signal.cosine` by default. However since this window function has only recently been merged into mainline SciPy, a fallback calculation is in place. Parameters ---------- M : int Length of the window. Returns ------- data : array_like The window function """ try: import scipy.signal return scipy.signal.cosine(M) except AttributeError: return numpy.sin(numpy.pi / M * (numpy.arange(0, M) + .5))
Example #16
Source File: common_audio.py From tensor2tensor with Apache License 2.0 | 6 votes |
def add_delta_deltas(filterbanks, name=None): """Compute time first and second-order derivative channels. Args: filterbanks: float32 tensor with shape [batch_size, len, num_bins, 1] name: scope name Returns: float32 tensor with shape [batch_size, len, num_bins, 3] """ delta_filter = np.array([2, 1, 0, -1, -2]) delta_delta_filter = scipy.signal.convolve(delta_filter, delta_filter, "full") delta_filter_stack = np.array( [[0] * 4 + [1] + [0] * 4, [0] * 2 + list(delta_filter) + [0] * 2, list(delta_delta_filter)], dtype=np.float32).T[:, None, None, :] delta_filter_stack /= np.sqrt( np.sum(delta_filter_stack**2, axis=0, keepdims=True)) filterbanks = tf.nn.conv2d( filterbanks, delta_filter_stack, [1, 1, 1, 1], "SAME", data_format="NHWC", name=name) return filterbanks
Example #17
Source File: signal_resample.py From NeuroKit with MIT License | 6 votes |
def _resample_pandas(signal, desired_length): # Convert to Time Series index = pd.date_range("20131212", freq="L", periods=len(signal)) resampled_signal = pd.Series(signal, index=index) # Create resampling factor resampling_factor = str(np.round(1 / (desired_length / len(signal)), 6)) + "L" # Resample resampled_signal = resampled_signal.resample(resampling_factor).bfill().values # Sanitize resampled_signal = _resample_sanitize(resampled_signal, desired_length) return resampled_signal # ============================================================================= # Internals # =============================================================================
Example #18
Source File: speech_recognition.py From fine-lm with MIT License | 6 votes |
def add_delta_deltas(filterbanks, name=None): """Compute time first and second-order derivative channels. Args: filterbanks: float32 tensor with shape [batch_size, len, num_bins, 1] name: scope name Returns: float32 tensor with shape [batch_size, len, num_bins, 3] """ delta_filter = np.array([2, 1, 0, -1, -2]) delta_delta_filter = scipy.signal.convolve(delta_filter, delta_filter, "full") delta_filter_stack = np.array( [[0] * 4 + [1] + [0] * 4, [0] * 2 + list(delta_filter) + [0] * 2, list(delta_delta_filter)], dtype=np.float32).T[:, None, None, :] delta_filter_stack /= np.sqrt( np.sum(delta_filter_stack**2, axis=0, keepdims=True)) filterbanks = tf.nn.conv2d( filterbanks, delta_filter_stack, [1, 1, 1, 1], "SAME", data_format="NHWC", name=name) return filterbanks
Example #19
Source File: common_audio.py From BERT with Apache License 2.0 | 6 votes |
def add_delta_deltas(filterbanks, name=None): """Compute time first and second-order derivative channels. Args: filterbanks: float32 tensor with shape [batch_size, len, num_bins, 1] name: scope name Returns: float32 tensor with shape [batch_size, len, num_bins, 3] """ delta_filter = np.array([2, 1, 0, -1, -2]) delta_delta_filter = scipy.signal.convolve(delta_filter, delta_filter, "full") delta_filter_stack = np.array( [[0] * 4 + [1] + [0] * 4, [0] * 2 + list(delta_filter) + [0] * 2, list(delta_delta_filter)], dtype=np.float32).T[:, None, None, :] delta_filter_stack /= np.sqrt( np.sum(delta_filter_stack**2, axis=0, keepdims=True)) filterbanks = tf.nn.conv2d( filterbanks, delta_filter_stack, [1, 1, 1, 1], "SAME", data_format="NHWC", name=name) return filterbanks
Example #20
Source File: MPI_ICESat2_ATL03.py From read-ICESat-2 with MIT License | 6 votes |
def filter_elevation(r0): #-- calculate percentiles for IQR and RDE #-- IQR: first and third quartiles (25th and 75th percentiles) #-- RDE: 16th and 84th percentiles #-- median: 50th percentile Q1,Q3,P16,P84,MEDIAN = np.percentile(r0,[25,75,16,84,50]) #-- calculate interquartile range IQR = Q3 - Q1 #-- calculate robust dispersion estimator (RDE) RDE = P84 - P16 #-- IQR pass: residual-(median value) is within 75% of IQR #-- RDE pass: residual-(median value) is within 50% of P84-P16 return (0.75*IQR,0.5*RDE,MEDIAN) #-- PURPOSE: try fitting a surface to the signal photons with progressively #-- less confidence if no valid surface is found
Example #21
Source File: signal_filter.py From NeuroKit with MIT License | 5 votes |
def _signal_filter_butterworth(signal, sampling_rate=1000, lowcut=None, highcut=None, order=5): """Filter a signal using IIR Butterworth SOS method.""" freqs, filter_type = _signal_filter_sanitize(lowcut=lowcut, highcut=highcut, sampling_rate=sampling_rate) sos = scipy.signal.butter(order, freqs, btype=filter_type, output="sos", fs=sampling_rate) filtered = scipy.signal.sosfiltfilt(sos, signal) return filtered
Example #22
Source File: TDSequentialStrategy.py From freqtrade-strategies with GNU General Public License v3.0 | 5 votes |
def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: """ Based on TA indicators, populates the sell signal for the given dataframe :param dataframe: DataFrame :param metadata: Additional information, like the currently traded pair :return: DataFrame with buy columnNA / NaN values """ dataframe["sell"] = 0 dataframe.loc[((dataframe['exceed_high']) | (dataframe['seq_sell'] > 8)) , 'sell'] = 1 return dataframe
Example #23
Source File: TDSequentialStrategy.py From freqtrade-strategies with GNU General Public License v3.0 | 5 votes |
def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: """ Based on TA indicators, populates the buy signal for the given dataframe :param dataframe: DataFrame :param metadata: Additional information, like the currently traded pair :return: DataFrame with buy column """ dataframe["buy"] = 0 dataframe.loc[((dataframe['exceed_low']) & (dataframe['seq_buy'] > 8)) , 'buy'] = 1 return dataframe
Example #24
Source File: functions.py From tf-pose with Apache License 2.0 | 5 votes |
def adaptiveDetrend(data, x=None, threshold=3.0): """Return the signal with baseline removed. Discards outliers from baseline measurement.""" try: import scipy.signal except ImportError: raise Exception("adaptiveDetrend() requires the package scipy.signal.") if x is None: x = data.xvals(0) d = data.view(np.ndarray) d2 = scipy.signal.detrend(d) stdev = d2.std() mask = abs(d2) < stdev*threshold #d3 = where(mask, 0, d2) #d4 = d2 - lowPass(d3, cutoffs[1], dt=dt) lr = scipy.stats.linregress(x[mask], d[mask]) base = lr[1] + lr[0]*x d4 = d - base if (hasattr(data, 'implements') and data.implements('MetaArray')): return MetaArray(d4, info=data.infoCopy()) return d4
Example #25
Source File: signal_findpeaks.py From NeuroKit with MIT License | 5 votes |
def _signal_findpeaks_findbase(peaks, signal, what="onset"): if what == "onset": direction = "smaller" else: direction = "greater" troughs, _ = scipy.signal.find_peaks(-1 * signal) bases = find_closest(peaks, troughs, direction=direction, strictly=True) bases = as_vector(bases) return bases
Example #26
Source File: signal_phase.py From NeuroKit with MIT License | 5 votes |
def _signal_phase_prophase(signal): pi2 = 2.0 * np.pi # Get pro-phase prophase = np.mod(np.angle(scipy.signal.hilbert(signal)), pi2) # Transform a pro-phase to a real phase sort_idx = np.argsort(prophase) # Get a sorting index reverse_idx = np.argsort(sort_idx) # Get index reversing sorting tht = pi2 * np.arange(prophase.size) / (prophase.size) # Set up sorted real phase phase = tht[reverse_idx] # Reverse the sorting of it return phase
Example #27
Source File: signal_phase.py From NeuroKit with MIT License | 5 votes |
def _signal_phase_binary(signal): phase = itertools.chain.from_iterable(np.linspace(0, 1, sum([1 for i in v])) for _, v in itertools.groupby(signal)) phase = np.array(list(phase)) # Convert to radiant phase = np.deg2rad(phase * 360) return phase
Example #28
Source File: tests_signal.py From NeuroKit with MIT License | 5 votes |
def test_signal_interpolate(): x_axis = np.linspace(start=10, stop=30, num=10) signal = np.cos(x_axis) interpolated = nk.signal_interpolate(x_axis, signal, x_new=np.arange(1000)) assert len(interpolated) == 1000 assert interpolated[0] == signal[0] assert interpolated[-1] == signal[-1]
Example #29
Source File: signal_filter.py From NeuroKit with MIT License | 5 votes |
def _signal_filter_fir(signal, sampling_rate=1000, lowcut=None, highcut=None, window_size="default"): """Filter a signal using a FIR filter.""" try: import mne except ImportError: raise ImportError( "NeuroKit error: signal_filter(): the 'mne' module is required for this method to run. ", "Please install it first (`pip install mne`).", ) if isinstance(window_size, str): window_size = "auto" filtered = mne.filter.filter_data( signal, sfreq=sampling_rate, l_freq=lowcut, h_freq=highcut, method="fir", fir_window="hamming", filter_length=window_size, l_trans_bandwidth="auto", h_trans_bandwidth="auto", phase="zero-double", fir_design="firwin", pad="reflect_limited", verbose=False, ) return filtered # ============================================================================= # Butterworth # =============================================================================
Example #30
Source File: signal_resample.py From NeuroKit with MIT License | 5 votes |
def _resample_fft(signal, desired_length): resampled_signal = scipy.signal.resample(signal, desired_length) return resampled_signal