Почему кросс-спектры отличаются в mlab и scipy.signal?
У меня два сигнала
import numpy as np import matplotlib.pyplot as plt from matplotlib import mlab import mpld3 from scipy import signal mpld3.enable_notebook() nfft = 256 dt = 0.01 t = np.arange(0, 30, dt) nse1 = np.random.randn(len(t)) * 0.1 # white noise 1 nse2 = np.random.randn(len(t)) * 0.1 # white noise 2 # two signals with a coherent part and a random part s1 = np.sin(2*np.pi*1*t) + nse1 s2 = np.sin(2*np.pi*1*t+np.pi) + nse2 plt.plot(s1, 'r', s2, 'g') plt.show()
Я хотел бы получить согласованность
cxy, fcoh = plt.cohere(s1, s2, nfft, 1./dt) fcoh,cxy = signal.coherence(s1,s2, nfft=nfft, fs=1./dt) plt.hold(True) plt.plot(fcoh, cxy) #plt.xlim(0, 5) plt.show()
и фазовый сдвиг
(csd, f) = mlab.csd(s1, s2, NFFT=nfft, Fs=1./dt) fig = plt.figure() angle = np.angle(csd,deg =False) angle[angle<-np.pi/2] += 2*np.pi plt.plot(f, angle, 'g') plt.hold(True) (f, csd) = signal.csd(s1, s2, fs=1./dt, nfft=nfft) angle = np.angle(csd,deg =False) angle[angle<-np.pi/2] += 2*np.pi plt.plot(f, angle,'r') #plt.xlim(0,5) plt.show()
Я пытался использовать scipy
и mlab
. Может ли кто-нибудь объяснить, почему я получаю разные результаты?
- Кросс-корреляция непериодической функции с NumPy
- используя основной компонентный анализ для декорирования шумов
- Повторное создание временных рядов данных с использованием результатов FFT без использования ifft
- Как получить частоту прямоугольной волны в сценарии python
- SciPy "lfilter" возвращает только NaNs
Поскольку для некоторых параметров две функции имеют разные значения по умолчанию.
Например, если вы перейдете в plt.cohere()
параметр noverlap=128
вы получите почти идеальное соответствие с numpy.signal()
:
Помимо небольшого несоответствия на частоте 0 Гц, и мы не очень заботимся о согласованности компонентов постоянного тока, не так ли? Готов поспорить, что если вы углубитесь в документацию, вы обнаружите еще одну небольшую причуду в стандартных значениях этих двух.
- Кажется, что strptime создает неправильную дату с номера недели
- Как вызвать 'from x import *', где x является переменной в Python
- Профилирование Python – потоковое аудио и спектр
- Орбитальный импульс Добеши в питоне
- вычислять точки поворота / точки поворота в траектории (пути)
- Эффект Jello при отображении отфильтрованного цифрового сигнала
- Вычисление DCT с помощью OpenCV
- signal.spectrogram найти максимальную частоту для данного сегмента
- Пакет Python для обработки сигналов
- Как удалить граничные эффекты, возникающие из-за нулевого заполнения в scipy / numpy fft?
- циклический кросс-корреляционный питон