(20)MATLAB使用卡方(chi-square)分布生成Nakagami-m分布

文章目录


前言

Nakagami分布随机变量的生成,可以使用gamma分布实现,也可以使用卡方(chi-square)分布随机变量生成。使用伽马(gamma)分布 生成Nakagami-m分布的方法见:
(17)MATLAB使用伽马(gamma)分布生成Nakagami-m分布的方法1
(18)MATLAB使用伽马(gamma)分布生成Nakagami-m分布的方法2

本文介绍使用卡方(chi-square)分布随机变量生成Nakagami分布随机变量的方法。


一、使用卡方分布函数生成Nakagami分布随机变量

使用卡方分布生成Nakagami分布随机变量的方法由下式给出:

为了得到给定形状参数(m)和扩展参数(ω)的Nakagami-m随机变量,可将MATLAB仿真分为如下步骤:

(1)首先生成卡方分布随机变量CHI2,其自由度k设置为2m;

(2)将生成的随机变量CHI2乘以ω/(2m)并开方。

下面给出使用该方法生成Nakagami分布随机变量的MATLAB代码。

二、MATLAB仿真

以下代码使用卡方分布生成不同的形状参数(m)和尺度参数(ω)的Nakagami随机变量。然后给出仿真Nakagami随机变量的PDF画图结果。

1.仿真代码

代码如下:

c 复制代码
clc
clear all
close all

m = 1;                         % Nakagami分布的形状参数(shape parameters)
Omega = 0.2;                   % Nakagami分布的尺度参数(spread parameters)
N = 1e7;                       % Number of Samples

% 生成卡方分布随机数
% Generate Chi-squared distributed random numbers
% 方法1:使用标准正态分布随机变量的平方和生成卡方分布随机数
CHI2 = 0;                       % 卡方分布随机变量(Chi-squared distributed random numbers)
k = 2*m;                        % 卡方分布的自由度(degrees of freedom)
for j=1:k
    % Sum of square of k independent standard normal Random Variables 
    % k个独立标准正态随机变量的平方和
    CHI2 = CHI2 + randn(1 ,N).^2;
end

% 方法2:使用库函数chi2rnd直接生成卡方分布随机数
% CHI2 =  chi2rnd(2*m,1,N);

% 使用卡方分布随机变量生成Nakagami分布的随机变量
Y = sqrt(Omega/(2*m)) * sqrt(CHI2);

% 画图方法1。概率密度函数(使用了梯形积分)
figure();
[Q,X] = hist(Y,1000);           % histogram,Q为划分到每个桶中的元素个数,X为每个区间的中心
plot(X,Q/trapz(X,Q),'r');       % plot estimated PDF,trapz(X,Q)使用梯形法计算Q相对于X的积分
grid on;
title('Nakagami-m PDF ' );
xlabel('Parameter - y' );       % y应该是随机变量
ylabel('f_Y(y)' );              % 随机变量的概率密度

% 画图方法2。绘制生成的随机数的直方图,以概率密度形式(MATLAB建议的方式)
nbins = 50;                     % bin数量
figure();
histogram(Y,nbins,'Normalization','pdf','DisplayStyle','bar');
hold on

%% nakagami分布的概率密度的理论值
% Nakagami分布的参数
% m = 1;
% Omega = 2;

% nakagami分布的概率密度的理论表达式
x = 0.01:0.01:3;
f = (2*m.^m./(gamma(m).*Omega^m)) .* x.^(2*m-1) .* exp(-m*x.^2./Omega);
% figure(1)
plot(x,f,'LineWidth',1.5)
grid on
title('Nakagami分布的概率密度')
legend('概率密度函数的估计值','概率密度函数的理论值')

2.运行结果

代码运行结果画图如下:


相关推荐
方安乐19 小时前
python之向量、向量和、向量点积
开发语言·python·numpy
Old Uncle Tom20 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆21 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
小小小米粒21 小时前
Collection单列集合、Map(Key - Value)双列集合,多继承实现。
java·开发语言·windows
生信碱移21 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
智者知已应修善业21 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
czhc114007566321 小时前
C# 428 线程、异步
开发语言·c#
:1211 天前
java基础
java·开发语言
简简单单做算法1 天前
基于Qlearning强化学习和Parzen窗的图像分割算法matlab仿真
matlab·图像分割·强化学习·qlearning·parzen窗
SilentSamsara1 天前
Python 环境搭建完整指南:从下载安装到运行第一个程序
开发语言·python