python scipy.signal.pwelch_python – Scipy welch和MATLAB pwelch没有提供相同的答案

用pych(

https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.welch.html)的scipy.signal方法在python中遇到麻烦,它估计时间信号的频谱,因为它(根本没有)提供与MATLAB的pwelch方法相同的输出,给定相同的参数(窗口大小,重叠等). Beneath是我在每种语言中的代码,输入文件和输出文件在这里的链接:

输入是2D阵列,行是时间步长,每列是信号段.输出中的列是输入中相应列的光谱.

Python:

import numpy as np

from scipy.signal import welch, get_window

input = np.genfromtxt('python_input.csv', delimiter=',')

fs = 128

window = get_window('hamming', fs*1)

ff,yy = welch(input, fs=fs, window = window, noverlap = fs/2, nfft=fs*2,

axis=0, scaling="density", detrend=False)

np.savetxt("python_spectrum.csv", 10*np.log10(yy), delimiter=",")

MATLAB:

input = csvread('matlab_input.csv');

fs = 128

win = hamming(fs);

[pxx,f] = pwelch(input ,win,[],[],fs,'psd');

csvwrite('matlab_spectrum.csv',pxx);

我怀疑scipy是问题所在,因为它的输出在反映我使用的滤波器(4阶的butterworth带通0.3至35 Hz with filtfilt)方面没有意义 – 然而,MATLAB的输出:

这里有一些元素差异的图表

我确实试过一个简单的正弦曲线,它在两种编程语言中都运行良好 – 所以我完全迷失了.

你可能感兴趣的:(python)