高斯采样的仿真(python实现)

要点摘录(二维高斯函数)

1.为什么要用到高斯采样

  • 高斯采样是一种非参数化方法,相对于一般的参数化方法,不但可以为黑箱建模还可以为不确定性建模。

2.使用高斯函数产生样值点

  • 函数表达式
    f ∼ N ( μ , Σ ) f \sim N(\bold{\mu},\bold{\Sigma}) fN(μ,Σ)
    其中 μ = ( μ 1 , μ 2 , . . . , μ n ) \bold{\mu} = (\mu_1,\mu_2,...,\mu_n) μ=(μ1,μ2,...,μn) Σ = [ σ 11 σ 12 ⋯ σ 1 n σ 21 σ 22 ⋯ σ 2 n ⋮ ⋮ ⋱ ⋮ σ n 1 σ n 2 ⋯ σ n n ] \bold{\Sigma}=\left[ \begin{matrix} \sigma_{11} & \sigma_{12} & \dotsb & \sigma_{1n}\\ \sigma_{21} & \sigma_{22} & \dotsb & \sigma_{2n}\\ \vdots & \vdots & \ddots & \vdots\\ \sigma_{n1} & \sigma_{n2} & \dotsb & \sigma_{nn} \end{matrix} \right] Σ=σ11σ21σn1σ12σ22σn2σ1nσ2nσnn

  • 产生样值点 y = f ( x ) \bold{y} = f(\bold{x}) y=f(x) x = [ x 1 , x 2 , . . . , x n ] T \bold{x} = [x_1,x_2,...,x_n]^T x=[x1,x2,...,xn]T 表示需要采样的点的位置, y = [ y 1 , y 2 , . . . , y n ] T \bold{y}=[y_1,y_2,...,y_n]^T y=[y1,y2,...,yn]T 表示采样得到的值。

  • 参数说明:
    number_dot 采样点数,sample_scale 采样区设定,number_sample 设定样本曲线数,sigma 设定 σ \sigma σ 的值。

  • 主要代码:

    • sample_locate = np.linspace(sample_scale[0],sample_scale[1],number_dot) 选取采样点。
    • sample = np.random.multivariate_normal(np.zeros(number_dot),np.eye(number_dot),number_sample) 完成采样。
  • 采样结果:

    • 采样点 3 个,样本曲线 6 条,采样区间 [0,1],均值为 0 ,协方差矩阵为单位阵。
  • 采样点 30 个,样本曲线 6 条,采样区间 [0,1],均值为 0 ,协方差矩阵为单位阵。

3.增加高斯核函数的高斯采样

  • 从上面可以看出来,采样的曲线变换十分不规则,可以说非常嘈杂。这是因为将协方差矩阵设置为单位阵(即任何两个 x 对应的抽样值 y 均没有关系)。而解决的方法就是将协方差矩阵和抽样点 x 之间的距离建立起关系,当 x 之间的距离越近就让 x 的值之间的相关性越大,这样就能保证曲线的变化相对平滑。

  • 度量距离的方法(采用高斯核函数):
    k ( x , x ′ ) = exp ⁡ ( − ( x − x ′ ) 2 2 σ 2 ) k(x,x') = \exp(\displaystyle\frac{-(x-x')^2}{2\sigma^2}) k(x,x)=exp(2σ2(xx)2)

  • 主要代码

    • 定义高斯核
    # 定义高斯核函数,这里用到一个比较巧妙的地方在于用了 ndarray 的 broadcast 机制没有用循环来计算
    # 在 train 的时候类似 tensor 的矩阵计算要快的多
    def gauss_kernal(sample_scale,sigma):
        tempa = sample_scale.reshape(-1, 1) # 这里是为了升维,否则会导致转置之后还是向量形式
        tempb = np.transpose(tempa)
        temp = tempa - tempb
        gauss = np.exp(- temp**2 / (2 * sigma**2))
        return gauss
    
    • sample = np.random.multivariate_normal(np.zeros(number_dot),gauss_kernal(sample_locate, sigma ),number_sample) 完成采样。
  • 采样结果

    • 采样点 3 个,样本曲线 6 条,采样区间 [0,1],均值为 0 , σ = 0.3 \sigma=0.3 σ=0.3
    • 采样点 100 个,样本曲线 6 条,采样区间 [0,1],均值为 0 , σ = 0.1 \sigma=0.1 σ=0.1
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
雷达模糊函数是一种用于雷达系统信号处理的数学函数。通过对雷达接收到的信号进行处理和分析,可以得到目标物体的位置、速度、尺寸等信息。雷达模糊函数在雷达信号处理起到了关键的作用,因此在进行雷达系统仿真时,需要对雷达模糊函数进行模拟和仿真。 使用Python语言进行雷达模糊函数的仿真是一种常见和有效的方法。Python具有优秀的数值计算和科学计算能力,可以方便地进行雷达信号处理的仿真实验。具体实现雷达模糊函数的方法如下: 1. 导入必要的Python库,如NumPy、SciPy等,用于进行数值计算和信号处理。 2. 确定仿真实验的参数,如雷达的发射频率、接收信号的采样率、目标物体的速度等。 3. 生成目标物体的回波信号。可以通过生成具有一定幅度和相位的正弦波来模拟目标物体的回波信号。 4. 对生成的回波信号进行信号处理,如滤波、采样、噪声抑制等。 5. 对信号进行雷达模糊函数的计算和仿真。可以使用已有的雷达模糊函数算法,如维纳滤波器、高斯噪声滤波器等。 6. 分析并可视化仿真结果。可以通过绘制目标物体位置、速度等随时间变化的曲线来分析仿真结果。 通过以上步骤,可以使用Python进行雷达模糊函数的仿真。这种仿真方法可以帮助工程师和研究人员更好地理解和优化雷达系统的信号处理算法,提高雷达系统的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值