gpt4 book ai didi

python - Scipy welch 和 MATLAB pwelch 没有提供相同的答案

转载 作者:太空狗 更新时间:2023-10-29 21:51:48 27 4
gpt4 key购买 nike

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

https://www.dropbox.com/s/2ch36phbbmjfhqg/inputs_outputs.zip?dl=0

输入是一个二维数组,行是时间步长,每列是一个信号段。输出中的列是输入中相应列的光谱。

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 是问题所在,因为它的输出在反射(reflect)我使用的滤波器(使用 filtfilt 从 0.3 到 35 Hz 的 4 阶巴特沃斯带通)方面没有意义 - 然而,MATLAB 的输出确实如此:

Each methods output using imagesc in MATLAB

这里有一些元素差异图

Elementwise differences (y-axis should be 0-64!) (the third plot I have excluded the most extreme values)

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

最佳答案

您的 Python 和 MATLAB 文件的排序方式不同,这会给您带来错误。尽管数组的形状相同,但值在 Python 中按行排序,在 MATLAB 中按列排序。

您可以通过 reshape 输入数组和转置来解决此问题。这将为您提供与 MATLAB 中相同的值排序:

input = input.reshape((input.shape[1], input.shape[0])).T

关于python - Scipy welch 和 MATLAB pwelch 没有提供相同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com