MATLAB 的 pwelch 和 Python 的 SciPy welch 之间的比例差异

问题描述

我在使用名为 welch (https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.welch.html) 的 scipy.signal 方法使用 python 时遇到问题,该方法估计时间信号的频谱,因为它没有(完全)提供与 MATLAB 称为 pwelch (https://www.mathworks.com/help/signal/ref/pwelch.html) 的方法相同的输出,给定相同的参数(窗口类型(汉明)、窗口大小、重叠等)。下面是我的每种语言的代码(输入是真实信号):

MATLAB:

pxx_matlab = pwelch(w_in,4096,0.5*4096,4096)

(根据文档,MATLAB 的 pwelch 中的认窗口是 hamming)

蟒蛇:

from scipy import signal
f,pxx = signal.welch(w_in,fs=16000,window='hamming',nperseg=4096,noverlap=2048,nfft=4096,detrend=False) 

这是输入数据:

np.random.seed(0)
w_in = np.random.randn(16000*10)

(我不知道如何附加 CSV 文件

结果如下:

enter image description here

如您所见,两个信号的不同之处在于缩放常数(几乎是一个常数),约为 34 dB (2544)。我试图将常数与采样频率 fs = 16000、奈奎斯特频率 (8 kHz) 或窗口长度 4096、重叠 2048 和它们的 10*np.log10 dB 对应项但没有有用。

你知道为什么会有一个恒定的比例差异吗?这个常数等于多少(作为参数的函数)?

编辑:常数 34 dB 似乎与使用的数据无关,因此它很可能是信号处理参数(fs、窗口长度、重叠等)的函数

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)