问题描述
我在使用名为 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 文件)
如您所见,两个信号的不同之处在于缩放常数(几乎是一个常数),约为 34 dB (2544)。我试图将常数与采样频率 fs = 16000
、奈奎斯特频率 (8 kHz) 或窗口长度 4096
、重叠 2048
和它们的 10*np.log10
dB 对应项但没有有用。
你知道为什么会有一个恒定的比例差异吗?这个常数等于多少(作为参数的函数)?
编辑:常数 34 dB 似乎与使用的数据无关,因此它很可能是信号处理参数(fs、窗口长度、重叠等)的函数。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)