如何在python中获得600个值的零均值和σ= 2 dB的标准偏差的对数正态分布(即以dB为单位的正态分布)?

时间:2016-05-02 22:50:30

标签: python numpy distribution

我试着查看以下选项。

numpy.random.lognormal(0,2,600) - 我对这种方法的怀疑是输入参数是dB吗?如果是,则mu = 0,sigma = 2.如果输入参数应该是线性值,则输入参数应为mu = 1,sigma = 10 ^ 0.2。另一个问题是,得到的随机值是线性还是dB?如果它们是线性的,我需要获取这些值的10 * math.log10()。

http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.random.lognormal.html中的文档没有提供有关输入参数是线性的还是以dB为单位的任何信息,也没有提供有关输出结果性质的任何信息。

1 个答案:

答案 0 :(得分:2)

如果x是正态分布的,则log(x)将正常分发。如果您不确定参数的参考,那么您可以绘制一些样本,记录它们,然后计算平均值和标准偏差:

import numpy as np

np.random.seed(0)

mu, sigma = 1, 2
x = np.random.lognormal(mu, sigma, 10000)
logx = np.log(x)

print(logx.mean(), logx.std())
# 0.963132559683 1.97511313635

因此np.random.lognormal(mu, sigma, ...)从随机变量中抽取样本,该变量的对数通常以均值mu和标准差sigma分布。换句话说,如果以对数单位指定musigma,则样本将采用线性单位。