This is a pre-release version (2.0.0.dev0+git20260907.41eeb59).Go to latest (1.18.0)
{ } Raw JSON

bundles / scipy 2.0.0.dev0+git20260907.41eeb59 / scipy / signal / _spectral_py / coherence

function

scipy.signal._spectral_py:coherence

source: build-install/usr/lib/python3.14/site-packages/scipy/signal/_spectral_py.py:1910

Signature

def coherence(x, y, fs = 1.0, window = hann_periodic, nperseg = None, noverlap = None, nfft = None, detrend = constant, axis = -1)

Summary

Estimate the magnitude squared coherence estimate, Cxy, of discrete-time signals X and Y using Welch's method.

Extended Summary

Cxy = abs(Pxy)**2/(Pxx*Pyy), where Pxx and Pyy are power spectral density estimates of X and Y, and Pxy is the cross spectral density estimate of X and Y.

Parameters

x : array_like

Time series of measurement values

y : array_like

Time series of measurement values

fs : float, optional

Sampling frequency of the x and y time series. Defaults to 1.0.

window : str or tuple or array_like, optional

Desired window to use. If window is a string or tuple, it is passed to get_window to generate the window values, which are DFT-even by default. See get_window for a list of windows and required parameters. If window is array_like it will be used directly as the window and its length must be nperseg. Defaults to a periodic Hann window.

nperseg : int, optional

Length of each segment. Defaults to None, but if window is str or tuple, is set to 256, and if window is array_like, is set to the length of the window.

noverlap : int, optional

Number of points to overlap between segments. If None, noverlap = nperseg // 2. Defaults to None.

nfft : int, optional

Length of the FFT used, if a zero padded FFT is desired. If None, the FFT length is nperseg. Defaults to None.

detrend : str or function or `False`, optional

Specifies how to detrend each segment. If detrend is a string, it is passed as the type argument to the detrend function. If it is a function, it takes a segment and returns a detrended segment. If detrend is False, no detrending is done. Defaults to 'constant'.

axis : int, optional

Axis along which the coherence is computed for both inputs; the default is over the last axis (i.e. axis=-1).

Returns

f : ndarray

Array of sample frequencies.

Cxy : ndarray

Magnitude squared coherence of x and y.

Notes

An appropriate amount of overlap will depend on the choice of window and on your requirements. For the default Hann window an overlap of 50% is a reasonable trade-off between accurately estimating the signal power, while not over counting any of the data. Narrower windows may require a larger overlap.

Examples

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
rng = np.random.default_rng()
✓
Generate two test signals with some common features.
fs = 10e3
N = 1e5
amp = 20
freq = 1234.0
noise_power = 0.001 * fs / 2
time = np.arange(N) / fs
b, a = signal.butter(2, 0.25, 'low')
x = rng.normal(scale=np.sqrt(noise_power), size=time.shape)
y = signal.lfilter(b, a, x)
x += amp*np.sin(2*np.pi*freq*time)
y += rng.normal(scale=0.1*np.sqrt(noise_power), size=time.shape)
✓
Compute and plot the coherence.
f, Cxy = signal.coherence(x, y, fs, nperseg=1024)
✓
plt.semilogy(f, Cxy)
plt.xlabel('frequency [Hz]')
plt.ylabel('Coherence')
✗
Text(0, 0.5, 'Coherence')
plt.show()
✓
fig-6496216a8128a6e9.png

See also

csd

Cross spectral density by Welch's method.

lombscargle

Lomb-Scargle periodogram for unevenly sampled data

periodogram

Simple, optionally modified periodogram

welch

Power spectral density by Welch's method.

Aliases

  • scipy.signal.coherence

Referenced by