from scipy import signal import matplotlib.pyplot as plt # 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 = np.random.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 += np.random.normal(scale=0.1*np.sqrt(noise_power), size=time.shape) # Compute and plot the magnitude of the cross spectral density. f, Pxy = signal.csd(x, y, fs, nperseg=1024) plt.semilogy(f, np.abs(Pxy)) plt.xlabel('frequency [Hz]') plt.ylabel('CSD [V**2/Hz]') plt.show()