为什么 scipy.signal.windows.gaussian 产生的数字与 Matlab 和 Octave 的 gausswin 不同?

Why does scipy.signal.windows.gaussian produce different numbers than Matlab and Octave's gausswin?

例如,我们可以使用长度 16 window,偏差为 3:

scipy.signal.windows.gaussian(16,3)
#returns : 
array([0.04393693, 0.09563444, 0.18627046, 0.32465247, 0.50633562,
       0.70664828, 0.8824969 , 0.98620712, 0.98620712, 0.8824969 ,
       0.70664828, 0.50633562, 0.32465247, 0.18627046, 0.09563444,
       0.04393693])

八度产生的位置:

gausswin(16,3)
#returns : 
0.011109
   0.034047
   0.088922
   0.197899
   0.375311
   0.606531
   0.835270
   0.980199
   0.980199
   0.835270
   0.606531
   0.375311
   0.197899
   0.088922
   0.034047
   0.011109

Matlab 产生与 Octave 相似的结果。我真的不明白为什么数字会故意不同?这是一个错误吗?

Octave signal 包中的函数 gaussian(M, std) from scipy.signal.windows and the Octave function gausswin(m, a) 不以相同方式处理第二个参数。要将 Octave 参数 ma 转换为 scipy 参数,您可以使用

std = (m - 1)/(2*a)

例如,您可以通过以下方式获得与使用 gausswin(16, 3) 在 Octave 中生成的值相同的值:

In [74]: from scipy.signal.windows import gaussian

In [75]: m = 16

In [76]: a = 3

In [77]: gaussian(m, (m - 1)/(2*a))
Out[77]: 
array([0.011109  , 0.03404745, 0.08892162, 0.1978987 , 0.3753111 ,
       0.60653066, 0.83527021, 0.98019867, 0.98019867, 0.83527021,
       0.60653066, 0.3753111 , 0.1978987 , 0.08892162, 0.03404745,
       0.011109  ])