如何基于中心极限定理从均匀随机数生成无阶乘泊松噪声?
基于均匀随机数的泊松噪声近似实现(中心极限定理应用)
1. 从均匀随机数近似生成高斯噪声
利用中心极限定理:多个独立同分布的均匀随机变量的和,会趋近于正态(高斯)分布。其中最实用的简化实现是使用12个[0,1)区间的均匀随机数,计算上无需额外开根号操作:
每个[0,1)均匀随机变量的均值为0.5,方差为1/12。12个这样的变量求和后,均值为6,方差为1。将求和结果减去6,就能得到近似标准正态分布(均值0,方差1)的随机数。再通过线性变换mu + z * sigma,即可得到任意均值mu、标准差sigma的高斯分布样本。
伪代码示例:
import random def approx_gaussian(mu, sigma): # 用12个均匀随机数生成近似高斯样本 sum_u = sum(random.uniform(0, 1) for _ in range(12)) z = sum_u - 6 # 标准正态分布近似值 return mu + z * sigma
这个方法计算高效,无需复杂运算,12个样本的近似度在大多数工程场景中足够使用;若需要更高精度,可增加均匀随机数的数量(如24个),近似效果会更接近真实高斯分布。
2. λ较小时用高斯噪声近似泊松噪声的优化方法
泊松分布的均值和方差均为λ,理论上可用高斯分布N(λ, λ)(均值λ,标准差sqrt(λ))近似,但λ较小时(通常λ<5),泊松分布是右偏的离散分布,而高斯是对称连续分布,直接近似误差较大,需通过以下修正优化:
核心修正技巧
- 连续性修正:泊松变量是离散整数,高斯变量是连续值。为匹配两者的概率对应关系,生成高斯样本后,需将其调整为
gauss_sample - 0.5再取整,让离散的泊松整数k对应高斯分布中[k-0.5, k+0.5)的区间概率。 - 非负截断:泊松变量取值非负,但λ较小时高斯样本可能出现负值,需将所有负样本截断为0。
完整伪代码实现
import random import math def approx_poisson(lam): # 生成近似高斯N(lam, lam)的样本 sum_u = sum(random.uniform(0, 1) for _ in range(12)) z = sum_u - 6 gauss_sample = lam + z * math.sqrt(lam) # 应用连续性修正+非负截断,得到泊松近似样本 corrected = gauss_sample - 0.5 poisson_sample = max(0, round(corrected)) return poisson_sample
λ极小时的额外优化
当λ<0.5时,高斯近似的负样本概率会升高,此时可:
- 增加生成高斯样本的均匀随机数数量(如24个),提升高斯分布的近似精度;
- 结合泊松分布的可加性:将λ拆分为n个小值
λ/n,分别生成每个小值的近似泊松样本后求和(每个小值的高斯近似误差更小)。
内容的提问来源于stack exchange,提问作者nishi
相关产品推荐
相关产品推荐

