微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。